如何将javascript变量引入php

how to take javascript variable into php

本文关键字:php 变量 javascript      更新时间:2024-01-31

我知道这个问题在堆栈溢出中重复了一遍,但我问这个问题是因为我在尝试这些问题时没有得到正确的答案。我使用的是codeigniter,我有一个用户可以对产品进行评分的表。我需要知道的是,当一个星形按钮被点击并提交时,我需要在数据库中插入是否点击了哪个星形按钮。如果点击第5个按钮,它将显示"优秀"文本。如果单击第4个按钮,它将显示"良好"文本。所以我需要将用户的评分插入数据库。所以请指导我该怎么做?

 <form name="myForm7" method="post" action="<?php echo 'http://localhost/ci/businessRateCtrl/insertIntoBusinessReview/'. $Vehicleid;  ?>" >

 <h1><div class="rating" style="width:200px;float:left;padding-left:1px">
                    <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
                                <span class="rate-star" data-rate="Excellent">&bigstar;</span> 
                                <span class="rate-star" data-rate="Good" >&bigstar;</span> 
                                <span class="rate-star" data-rate="Okay" >&bigstar;</span>
                                <span class="rate-star" data-rate="Unsatisfied" >&bigstar;</span>
                                <span class="rate-star" data-rate="Terrible" >&bigstar;</span>
                                </div>
                            </h1>

                              <div style="float:right;padding-right:450px">
                            <h3><label id="rateText" name="lblrating"></label></h3>

 <script type="text/javascript">
             var rateText;
                    window.onload = function() {
                    var starList = document.getElementsByClassName('rate-star');  
                    var numOfStars = starList.length;
                        for(var i = 0; i < numOfStars; i++) {
                            starList[i].addEventListener('click', starClickHandler, false);
                        }
                    }
                        function starClickHandler(event) {
                            var star = event.currentTarget;
                            setActive(star, false);
                            setActive(star, true);
                            document.getElementById('rateText').textContent = star.getAttribute('data-rate');
                               rateText=document.getElementById('rateText').textContent 
                        document.getElementById('rating').value = rateText;
                        }
                        function setActive(element, isActive) {
                            if(isActive) {
                            element.classList.add('active');
                            element.nextElementSibling && setActive(element.nextElementSibling, isActive);
                            }
                            else {
                            element.classList.remove('active');
                            element.previousElementSibling && setActive(element.previousElementSibling, isActive);
                            }
                            }
                             $(document).ready(function(){
                            $(".rating .rate-star").click(function(){
                            $(".active").removeClass("active");
                            $( ".rate-star:lt("+($(this).index()+1)+")" ).addClass("active");
                            $("#rateText").html($(this).data("rate"));
                            $("#submitreview").removeAttr("disabled");
                            });
                            });

                        function cancelConfirm(){
                            return confirm("Are you sure you want to cancel and leave this page?");
                        }
            </script>
            <style type="text/css">
                 .active{
                            color:yellow;
                                }
                       #rateText{
                    text-align:right;
                        }
                        .rating {
                            unicode-bidi: bidi-override;
                            direction: rtl ;
                                }

                                .rating > .rate-star.active,
                                .rating > .rate-star:hover,
                                .rating > .rate-star:hover ~ .rate-star {
                                     color: #FFFF00;
                                    cursor: default;
                                    }


            </style>

从下面的代码中,它将属于单击按钮的文本分配到rateText标签中。现在我需要通过该表单的action属性(作为参数)将该文本传递给我的控制器。有人能给我一个解决这个问题的方法吗。

document.getElementById('rateText').textContent = star.getAttribute('data-rate');

我想了一种方法,我不知道它是否正确。下面我提到了strongtext中添加的部分。如果这是正确的,我想知道如何将这个javascript变量作为参数放入表单的action属性中,并将其发送到控制器。

               **var rateText;**
                window.onload = function() {
                var starList = document.getElementsByClassName('rate-star');  
                var numOfStars = starList.length;
                    for(var i = 0; i < numOfStars; i++) {
                        starList[i].addEventListener('click', starClickHandler, false);
                    }
                }
                    function starClickHandler(event) {
                        var star = event.currentTarget;
                        setActive(star, false);
                        setActive(star, true);
                        document.getElementById('rateText').textContent = star.getAttribute('data-rate');
                          **rateText=document.getElementById('rateText').textContent** 
                    }

p.S我添加了你在这里提到的代码。但它是刷新页面,并且显示相同的页面。在url中,它显示了类似于的内容

http://localhost/ci/businessRateCtrl/loadReviewPage/base_url();?%3EbusinessRateCtrl/insertIntoBusinessReview/base_url();

在表单的action属性中,我只使用过action="businessRateCtrl/insertIntoBusinessReview/'.$Vehicleid;?>"以上代码。但我不知道它是怎么附加的http://localhost/ci/businessRateCtrl/loadReviewPage/进入url。有人帮我吗?我正在为这几个小时寻找解决方案。

我不清楚你现在在做什么。你可以设置一个隐藏的输入,然后提交,这似乎是你想要做的?

或者你可以做一个ajax请求,它不需要提交,这意味着没有刷新,这通常会给更好的用户体验

在此处阅读有关ajax请求的更多信息:http://api.jquery.com/jquery.ajax/

附言:这页底部有一些例子。

对于通过表格提交,请在您的表格中添加隐藏输入:

<input type="hidden" id="rating" value="" />

然后当你想在函数中分配它的值时:

function starClickHandler(event) {
                    var star = event.currentTarget;
                    setActive(star, false);
                    setActive(star, true);
                    document.getElementById('rateText').textContent = star.getAttribute('data-rate');
                    rateText=document.getElementById('rateText').textContent 
                    document.getElementById('rating').value = rateText;
                }

我认为这应该有效,正如其他人所说,最好使用数值而不是字符串来保存在数据库

我可以建议使用jquery和ajax调用而不是javascript吗?使用ajax调用,您可以获得星号的值,并将其传递到php页面,以便在不重新加载页面的情况下将其保存到数据库中。下面是一个快速示例:

html你的还好

jquery

    $('.rate-star').click(function(){
        var ratestar=$(this).data('rate');
            $.ajax({
                type: "POST",
                url: "../ajax/ajax-rate.php",//here your php page
                cache: false,
                dataType: "json",
                data: {
                    rate: ratestar              
                },
                success: function (data) {
                    //if the ajax is done correctly enter in success   
                  if(data.error==false){
                    $('#rateText').html(ratestar);
                  }else{
                     //handle your error
                   }
                },
                error: function (e, t, n){
                //if there are some problems with the ajax request enter here
                }
            });
        });

php ajax-rate.php

<?php
if(isset($_POST['rate'])){
$rate=$_POST['rate'];
//now save it into the db as you usually do
$message['message']='some message if you need';
$message['error']=false //this is not the error ajax function but it can helps you in the susseccs ajax function to handle errors
echo json_encode($message);
}
?>

这是一些文件http://api.jquery.com/jquery.ajax/