将jquery值传递给php变量

时间:2016-05-10 15:22:32

标签: javascript php jquery

我有一个表单,显示输入日期选择器和具有多个时间选择的选择,以选择客户必须在日期选择的时间。

这是我的代码:

echo '<form action="my_account.php" method="post">
                Date : <input required type="text" id="datepicker" name="BIRTHDATE">';
                echo'

                <select id="slots" name="slots" >
                <option value=""></option>';

<script>
				
				$("#slots").on("click", function() {
					
					
					if($( "#datepicker" ).val() == ''){
						 
						 alert('veuillez remplir le champ date en premier');
						 return false;
					}else{
						var date_book = $( "#datepicker" ).val();
						alert(date_book);
						alert('champ rempli');
							$.ajax({
							type : 'POST',
							url : 'my_account.php',
							data : {
								param : date_book
							},
							success : function(data) {
								alert('ok');
							
							}
						});
						
						}					
					});
			</script>
我在我的SQL查询中需要这个变量:

$start_time="09:45";
                $end_time="16:45";
                for($i = strtotime($start_time); $i<= strtotime($end_time); $i = $i + $duration * 60) {
                        $slots[] = date("H:i:s", $i);

                }   
                 echo'post param :'. $_POST['param'];
                $sql_book="select id, start, date from bookings where id_event=".$id_eve." and id_cust=".$_SESSION['id']." and date =". $_POST['param'];
                echo'sql book :'.$sql_book;
                $times=db_query($db_name,$sql_book);
                foreach($times as $time)
                {
                    if($time->id != NULL){
                        $start_book[] = $time->start;               
                        $date_book[] = $time->date;             
                    }
                }       

            for($j=0; $j < count($slots); $j++){

                echo' <option value='.$slots[$j].'">'.$slots[$j].'</option>';
            }
echo'</select>


<input type="submit" id="form_sendbutton" name="BT_Envoyer" value="Envoyer" />
</form>';

但该变量未分配给php。 谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

您正在以JSON格式发送日期,而在PHP脚本中,您不会对其进行解码。

但是因为只有一个值...我会删除JSON格式。

$.ajax({
    type : 'POST',
    url : 'my_account.php',
    data : "param="+date_book,
    success : function(data) {
        alert('ok');

    }
});



-----------
修改

我在这个上做了一点工作,因为我讨厌被投票 好的......我的回答并非解决所有问题
有很多要修复的!

好吧,我认为您希望使用dB查询的结果填充select字段,具体取决于datepicker的结果日期。 如果我错了......就在这里放弃阅读这个答案!并尝试解释我的错误。
;)

首先,点击select时触发ajax调用...这是错误的。
即使它填充了一些数据库结果,也会在用户的每次尝试时触发ajax调用以选择option
所以我将其更改为日期字段的onchange
然后 ......我的第一个回答没有错。只需将日期作为POST值发送即可。没有必要JSON它
最重要的
您必须为数据库查询创建单独的PHP文件 结果将是options中的HTML select

这是您的my_account.php

<?php
// Your PHP code before this, if any...
?>
<form action="my_account.php" method="post">
    Date : <input required type="text" id="datepicker" name="BIRTHDATE">

    <select id="slots" name="slots" ></select>
    <input type="submit" id="form_sendbutton" name="BT_Envoyer" value="Envoyer" />
</form>

<script>

$("#datepicker").on("change", function() {

    if($( "#datepicker" ).val() == ''){
        return false;
    }else{
        var date_book = $( "#datepicker" ).val();
        console.log("champ rempli "+date_book);
        $.ajax({

            type : 'POST',
            url : 'my_account_options.php',
            data : "param="+date_book,
            success : function(data) {
                console.log("ajax success");
                $("#slots").html(data);
            }
        });
    }                   
});

// Datepicker - I added this too to trigger the datepicker.
// It may be different in your code.
$('#datepicker').fdatepicker('yy-mm-dd');

</script>

这是第二个PHP文件,我称之为my_account_options.php

<?php
if($_POST['param']){
    $start_time="09:45";
    $end_time="16:45";
    $duration=1;    // Added to test... Remove it.
    for($i = strtotime($start_time); $i<= strtotime($end_time); $i = $i + $duration * 60) {
            $slots[] = date("H:i:s", $i);

    }   
    $id_eve="someEvent";    // Added to test... Remove it.
    $_SESSION['id']="custId";    // Added to test... Remove it.
    $sql_book="select id, start, date from bookings where id_event='".$id_eve."' and id_cust='".$_SESSION['id']."' and date='". $_POST['param']."'";

    // Commented out to test...
    /*
    $times=db_query($db_name,$sql_book);
    foreach($times as $time)
    {
        if($time->id != NULL){
            $start_book[] = $time->start;               
            $date_book[] = $time->date;             
        }
    }       

    for($j=0; $j < count($slots); $j++){

        echo ' <option value="'.$slots[$j].'">'.$slots[$j].'</option>';

    }
    */

    // Added to test... Remove it.
    echo ' <option value="sql query">'.$sql_book.'</option>';
}
?>

由于我没有您的数据库。
我“模拟”了您的$duration$_SESSION['id']$id_eve vars ......

现在,登录选项文本的内容是......您的数据库查询是否可供您查看 我得到的结果是:select id, start, date from bookings where id_event="someEvent" and id_cust="custId" and date="2016-05-05"

注意包装值的双引号(在查询中):它丢失了。

所以...希望成为“未经投票”(!!!)并且这对你有所帮助 ;)

-----------
修改
最后一件事要检查...... 您可能在my_account_options.php中没有$duration$id_eve个变量。

只需将它们设置为my_account.php中的$ _SESSION变量,这样它就可以用于您的SQL查询...如果是这样,请不要忘记session_start();
将它们作为帖子值传递,如下所示:

data : "param="+date_book+"&duration=<?php echo $duration; ?>&id_eve=<?php echo $id_eve; ?>",