2016-05-10 165 views
-3

我有一个窗体显示一个输入日期选择器和一个选择有很多次选择来选择一个时间,客户必须选择在一个日期。传递一个jQuery值到PHP变量

这是我的代码:

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> 
 
\t \t \t \t 
 
\t \t \t \t $("#slots").on("click", function() { 
 
\t \t \t \t \t 
 
\t \t \t \t \t 
 
\t \t \t \t \t if($("#datepicker").val() == ''){ 
 
\t \t \t \t \t \t 
 
\t \t \t \t \t \t alert('veuillez remplir le champ date en premier'); 
 
\t \t \t \t \t \t return false; 
 
\t \t \t \t \t }else{ 
 
\t \t \t \t \t \t var date_book = $("#datepicker").val(); 
 
\t \t \t \t \t \t alert(date_book); 
 
\t \t \t \t \t \t alert('champ rempli'); 
 
\t \t \t \t \t \t \t $.ajax({ 
 
\t \t \t \t \t \t \t type : 'POST', 
 
\t \t \t \t \t \t \t url : 'my_account.php', 
 
\t \t \t \t \t \t \t data : { 
 
\t \t \t \t \t \t \t \t param : date_book 
 
\t \t \t \t \t \t \t }, 
 
\t \t \t \t \t \t \t success : function(data) { 
 
\t \t \t \t \t \t \t \t alert('ok'); 
 
\t \t \t \t \t \t \t 
 
\t \t \t \t \t \t \t } 
 
\t \t \t \t \t \t }); 
 
\t \t \t \t \t \t 
 
\t \t \t \t \t \t } \t \t \t \t \t 
 
\t \t \t \t \t }); 
 
\t \t \t </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。 感谢您的帮助

+0

你看了在浏览器的控制台中的AJAX请求/响应? –

+0

是的,我在我的浏览器控制台中观看Ajax响应 –

回答

1

您正在以JSON格式发送日期,并且在PHP脚本中,您不会将其解码。

但由于只有一个值...我只是删除JSON格式。

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

    } 
}); 



-----------
编辑

我的工作一点点就这一个,因为我讨厌被downvoted。
好的......我的回答并不是解决所有问题。

有很多事情要解决!

那么,我认为你想select字段填充dB查询的结果,基于datepicker的结果日期。 如果我在这个问题上错了......请在这里放弃阅读这个答案!并试图解释我错了什么。
;)

首先,你触发你阿贾克斯点击呼吁select ...至极是错误的。
即使填充了某些数据库结果,也会在每次尝试用户时触发ajax调用,以选择option
所以我把它改为日期字段的onchange

然后 ......我的第一个答案没有错。只需将日期作为POST值发送即可。没有必要JSON它。

而最重要的
你必须为你的数据库查询创建一个单独的PHP文件。
结果将是HTML options登陆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瓦尔...

现在,什么是降落在该选项的文本在这里......是您的数据库查询,为您检查一下。
我得到的结果是这样的:select id, start, date from bookings where id_event="someEvent" and id_cust="custId" and date="2016-05-05"

注意用双引号环绕值(在查询中):它丢失了。

所以...希望能成为“未解除投票”(!!!),这会对你有所帮助。
;)

-----------
编辑
最后一两件事来检查...
你可能没有$duration$id_eve my_account_options.php中的变量。

只需将这些设置为my_account.php中的$ _SESSION变量,以便它可以用于您的SQL查询...如果是的话,请不要忘记session_start();
OR将它们作为提交值是这样的:

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

首先,感谢您的回复 我遵循了您向我描述的步骤。所以我使用sql查询创建一个新的php文件,并且我通过输入datepicker的onchange来替换select中的onclick,以便根据所选日期选择选择,并将引号添加到sql查询中的变量中,但是选择总是空的。 有关信息,成功ajax味精出现: console.log(“ajax success”);我必须加什么? –

+0

好...所以ajax部分就解决了。现在问题必须是您的查询。尝试从查询连接行删除$ db_name ...如下所示:$ times = db_query($ sql_book);你会在这里找到更多的细节:https://www.drupal.org/node/310072 –

+0

我只是看到这...检查你的datepicker结果格式。它必须用数据库中的破折号分隔,而不是反斜杠。在这里检查格式化提示:https://api.jqueryui.com/datepicker/#option-dateFormat我编辑了我的答案,因为我在datepicker初始化过程中有一个很好的“y”(mistyping !!)...对不起,如果这是问题;) –