2016-05-10 215 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 !!)...對不起,如果這是問題;) –