2016-12-30 39 views
0

我有這樣的代碼,對於迴歸問題阿賈克斯從問題拋SQL的列表中使用SQL和PHP通過AJAX值發送到另一個頁面的過程

<form id="reg-form3"> 
    <ul class="nav nav-list primary push-bottom"> 
     <? 
     $db['db_host']="localhost"; 
     $db['db_user']="root"; 
     $db['db_pass']=""; 
     $db['db_name']="zadli"; 
     foreach ($db as $key => $value){ 
      define(strtoupper($key), $value); 
     } 

     $con=mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
     if($con){ 
     mysqli_query($con,'SET NAMES "utf8";'); 
      // echo "<h1>we are connected</h1>"; 
     } 
     else { 
      die("eroor conection".mysqli_error($con)); 
     } 

     $query = "SELECT * FROM `training_questions` WHERE category_id=$cat_id "; 
     $query_quize= mysqli_query($con, $query); 

     while ($row = mysqli_fetch_assoc($query_quize)) { 
      $qustio=$row['id']; 
      $i=$row['id']; 
      echo $i; 
      ?> 
      <input name="start_time" type="hidden" id="start_time" value="<?= time() ?>"> 
      <input name="training_id" type="hidden" id="training_id" value="<?= $_GET['cat'] ?>"> 
      <li><input name="btn-save" type="submit" id="btn-save4" value="<?=$qustio ?>"> 
       <? 
       $queryt = "SELECT * FROM `training_questions` WHERE id=$i ORDER BY id LIMIT 1"; 
       $query_quizet= mysqli_query($con, $queryt); 
       while ($rowt = mysqli_fetch_assoc($query_quizet)) { 
       ?> 
        <input name="questions_id" type="hidden" id="questions_id" value="<?= $rowt['id'] ?>"> 
       <? 
       } 
       $txt_clean = strip_tags($row['question_text']); 
       $final_txt = cutText($txt_clean, 90); 
       echo $final_txt.'...'; 
       ?> 
       </input> 
      </li> 
     <? } ?> 
    </ul> 
</form> 

下面的代碼問題

名單
<script type="text/javascript"> 
$(document).ready(function(){ 
    //using $.ajax() function 

    $(document).on('submit', '#reg-form3', function(){ 
     var op1=document.getElementById("btn-save4"); 
     var data = $(this).serialize(); 
     $.ajax({ 
      type: 'POST', 
      url: 'ajaxquastion3.php', 
      data: data, 
      success: function (data) { 
       $("#btn-save").hide(); 
       $("#btn-save2").show(); 
       $('#reg-form').attr('id', 'reg-form2'); 

       $("#quas").fadeOut(500).hide(function(){ 
        $("#quas").fadeIn(500).show(function(){ 
         $("#quas").html(data); 
        }); 
       }); 
      } 
     }); 
     return false; 
    }); 
}); 
</script> 

這個代碼通過AJAX發送值到另一個頁面

頁ajaxquastion3.php

<?php 
ob_start(); 
session_start(); 
require ("../include/db.class.php"); 
require ("../include/config.php"); 
require ("../include/function.php"); 

if($_SESSION['id'] != ''){ 
    $sql_user = "SELECT * FROM `users` WHERE id=:id"; 
    $data_user[id] = $_SESSION['id']; 
    $result_user = $pdo->pdoGetRow($sql_user, $data_user); 
    $user_id = $result_user['id']; 
    $user_paid = $result_user['paid']; 
    $user_full_name = $result_user['first_name']." ".$result_user['middle_name']." ".$result_user['last_name']; 
} else { 
    header('Location: login.php'); 
} 

$start_time=$_POST['start_time']; 
$training_id=$_POST['training_id']; 
$questions_id=$_POST['questions_id']; 
$question_text=$_POST['question_text']; 

$db['db_host']="localhost"; 
$db['db_user']="root"; 
$db['db_pass']=""; 
$db['db_name']="zadli"; 

foreach ($db as $key => $value){ 
    define(strtoupper($key), $value); 
} 

$con=mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); 

if($con){ 
    mysqli_query($con,'SET NAMES "utf8";'); 
    // echo "<h1>we are connected</h1>"; 
} 
else { 
    die("eroor conection".mysqli_error($con)); 
} 
?> 

<div class="form-group"> 
    <table border="0"> 
     <tr> 
      <td colspan="2">Succedd !!!</td> 
     </tr> 
     <tr> 
      <td><strong>First Name:</strong> </td> 
      <td><?php echo $training_id ?></td> 
     </tr> 
     <tr> 
      <td><strong>Last Name:</strong> </td> 
      <td><?php echo $questions_id ?></td> 
     </tr> 
     <tr> 
      <td><strong>Last Name:</strong> </td> 
      <td><?php echo $x ?></td> 
     </tr> 
    </table> 
    <? 
    $queryq = "SELECT * FROM `training_questions` WHERE id=$questions_id"; 
    $query_chek= mysqli_query($con, $queryq); 
    while ($row = mysqli_fetch_assoc($query_chek)) { 
     $test=$row['id']; 
     echo '<h4>'.$row['question_text'].'</h4>'; 
     ?> 
     <input name="questions_id" type="hidden" id="questions_id" value="<?= $test ?>"> 
     <input name="training_id" type="hidden" id="training_id" value="<?= $training_id ?>"> 

     <div class="radio"> 
      <input name="option" type="radio" class="styled" id="option1" value="1"> 
      <label for="option1"> 
       <strong>أ -</strong> 
       <?= $row['option1'] ?> 
      </label> 
     </div> 
     <div class="radio"> 
      <input name="option" type="radio" class="styled" id="option2" value="2"> 
      <label for="option2"> 
       <strong>ب -</strong> 
       <?= $row['option2'] ?> 
      </label> 
     </div> 
     <div class="radio"> 
      <input name="option" type="radio" class="styled" id="option3" value="3"> 
      <label for="option3"> 
       <strong>ج -</strong> 
       <?= $row['option3'] ?> 
      </label> 
     </div> 
     <div class="radio"> 
      <input name="option" type="radio" class="styled" id="option4" value="4"> 
      <label for="option4"> 
       <strong>د -</strong> 
       <?= $row['option4'] ?> 
      </label> 
     </div> 
    <? } ?> 
</div> 

我的問題是,我們我提交表單的問題出現在DB的最後一個問題,任何問題我提交的只是最後一個問題是出現

+1

** ajaxquestions.php ** - '$ queryq =「SELECT * FROM \'training_questions \'WHERE id = $ questions_id 「;'是引用'$ questions_id',它沒有被設置,因此這個查詢將總是返回第一條記錄。另外,像這樣直接傳遞數據給SQL執行是很危險的。您可能想要查看準備好的語句以進行更安全的查詢。 –

+0

我忘了一些代碼,請立即看到並幫助我 –

+0

試試這個。不要用名稱在表單內設置這些''元素 - 嘗試如下所示:https://jsfiddle.net/9rsv2dow/。實質上,你可以包裝它,並在你的ajax請求中發送值'datatopost'。你的問題是你的所有輸入字段都有相同的名字,所以它如何能夠區分它們 - 但是你想用一個一致的名字來提交數據。我的小提琴鏈接向您展示瞭如何修復您的第一塊代碼。 –

回答

0

你創建你所有的<input name="questions_id"<input name="btn-save"元素在同一<form>

因此,當您提交表單,最後一個元素與name="questions_id"將被處理的價值...

所以您的解決方案(最快之一)的一個基本上是帶給您<form>元素也在你的循環和CRE吃不同<forms>

但我也有一些問題,你的邏輯:

1 - 當你存儲$qustio$row['id']你爲什麼再次存儲$i$row['id']?爲什麼不使用$qustio用於相同的目的?

2 - 首先,你有這個疑問:$query = "SELECT * FROM training_questions WHERE category_id=$cat_id ";,然後在循環以後你再有相同的查詢$queryt = "SELECT * FROM training_questions WHERE id=$i ORDER BY id LIMIT 1";這是因爲LIMIT 1只會返回記錄和你正在使用另一個循環此查詢你完全不需要它在第一個地方。所以,我也將刪除這些代碼多餘的線條,其結果將是:

3-我認爲$cat_id一樣$_GET['cat']所以我將取代$_GET['cat']在代碼中$cat_id。如果我的假設是錯誤的,那麼請您在此行替換回:<input name="training_id" type="hidden" id="training_id" value="<?= $_GET['cat'] ?>">

4-因爲id應在document獨特的,你必須在你的循環不同的元素將與相同id生成它們的不同副本,我更換idclass,所以我可以引用他們的jQuery

<ul class="nav nav-list primary push-bottom"> 
    <? 
    $db['db_host']="localhost"; 
    $db['db_user']="root"; 
    $db['db_pass']=""; 
    $db['db_name']="zadli"; 
    foreach ($db as $key => $value){ 
     define(strtoupper($key), $value); 
    } 

    $con=mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
    if($con){ 
     mysqli_query($con,'SET NAMES "utf8";'); 
     // echo "<h1>we are connected</h1>"; 
    } 
    else { 
     die("eroor conection".mysqli_error($con)); 
    } 

    $query = "SELECT * FROM `training_questions` WHERE category_id=$cat_id "; 
    $query_quize= mysqli_query($con, $query); 

    while ($row = mysqli_fetch_assoc($query_quize)) { 
     $qustio=$row['id']; 
     ?> 
     <li> 
      <?php echo $qustio;?> 
      <form> 
       <input name="start_time" type="hidden" class="start_time" value="<?= time() ?>"> 
       <input name="training_id" type="hidden" class="training_id" value="<?= $cat_id ?>"> 
       <input name="btn-save" type="submit" class="btn-save4" value="<?=$qustio ?>"> 
       <input name="questions_id" type="hidden" class="questions_id" value="<?= $qustio ?>"> 
       <? 
       $txt_clean = strip_tags($row['question_text']); 
       $final_txt = cutText($txt_clean, 90); 
       echo $final_txt.'...'; 
       ?> 
      </form> 
     </li> 
    <? } ?> 
</ul> 

,然後在jQuery的,你可以參考各種形式的元素是這樣的:$(this).find()

我不知道這行是什麼$('#reg-form').attr('id', 'reg-form2');但是因爲我沒有發現任何與它相關的代碼,我只是刪除它,如果你需要這一行,我認爲你必須找到另一種方式來使用它,如使用class而不是的id因爲id的,我之前

提到我也沒有發現與此id在你的代碼元素的獨特之處:#quas但我假設你有一個像本ID的<div>元素...

如果此元素再次位於您的loop中,則必須使用class而不是id,但如果您有o只需在您的代碼中使用它的一個副本,然後使用id即可。因爲我假設你只有它的一個副本,在你的代碼,我會離開它,因爲它是

所以你的jQuery將是這樣的:

<script type="text/javascript"> 
$(document).ready(function(){ 
    //using $.ajax() function 

    $("form").submit(function(event) { 
     var op1 = $(this).find('.btn-save4'); 
     var data = $(this).serialize(); 
     $.ajax({ 
      type: 'POST', 
      url: 'ajaxquastion3.php', 
      data: data, 
      success: function (data) { 
       $(this).find('.btn-save').hide(); 
       $(this).find('.btn-save2').show(); 

       $("#quas").fadeOut(500).hide(function(){ 
        $("#quas").fadeIn(500).show(function(){ 
         $("#quas").html(data); 
        }); 
       }); 
      } 
     }); 
     event.preventDefault(); 
    }); 
}); 
</script> 

,最後你ajaxquastion3.php文件

首先,您在代碼中同時使用了PDOmysqli!這是爲什麼?如果你使用它們連接到同一個數據庫,最好使用它。

然後在你的循環中,您有$test=$row['id'];這又是沒有必要的,你可以使用$row['id']代替$test

而且你有這四個<div class="radio">,你可以避開他們,並使用for loop填充它們

所以,你的ajaxquastion3.php文件將是這樣的:

<?php 
ob_start(); 
session_start(); 
require ("../include/db.class.php"); 
require ("../include/config.php"); 
require ("../include/function.php"); 

if($_SESSION['id'] != ''){ 
    $sql_user = "SELECT * FROM `users` WHERE id=:id"; 
    $data_user[id] = $_SESSION['id']; 
    $result_user = $pdo->pdoGetRow($sql_user, $data_user); 
    $user_id = $result_user['id']; 
    $user_paid = $result_user['paid']; 
    $user_full_name = $result_user['first_name']." ".$result_user['middle_name']." ".$result_user['last_name']; 
} else { 
    header('Location: login.php'); 
} 

$start_time=$_POST['start_time']; 
$training_id=$_POST['training_id']; 
$questions_id=$_POST['questions_id']; 
$question_text=$_POST['question_text']; 

$db['db_host']="localhost"; 
$db['db_user']="root"; 
$db['db_pass']=""; 
$db['db_name']="zadli"; 

foreach ($db as $key => $value){ 
    define(strtoupper($key), $value); 
} 

$con=mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); 

if($con){ 
    mysqli_query($con,'SET NAMES "utf8";'); 
    // echo "<h1>we are connected</h1>"; 
} 
else { 
    die("eroor conection".mysqli_error($con)); 
} 
?> 

<div class="form-group"> 
<table border="0"> 
    <tr> 
     <td colspan="2">Succedd !!!</td> 
    </tr> 
    <tr> 
     <td><strong>First Name:</strong> </td> 
     <td><?php echo $training_id ?></td> 
    </tr> 
    <tr> 
     <td><strong>Last Name:</strong> </td> 
     <td><?php echo $questions_id ?></td> 
    </tr> 
    <tr> 
     <td><strong>Last Name:</strong> </td> 
     <td><?php echo $x ?></td> 
    </tr> 
</table> 
<? 
$queryq = "SELECT * FROM `training_questions` WHERE id=$questions_id"; 
$query_chek= mysqli_query($con, $queryq); 
$arrLEtter = ['أ', 'ب', 'ج', 'د']; 

while ($row = mysqli_fetch_assoc($query_chek)) { 
    echo '<h4>'.$row['question_text'].'</h4>'; 
    ?> 
    <input name="questions_id" type="hidden" id="questions_id" value="<?= $row['id'] ?>"> 
    <input name="training_id" type="hidden" id="training_id" value="<?= $training_id ?>"> 
    <?php 
    for($iCnt = 1; $iCnt <= 4; $iCnt++){ 
     ?> 
     <div class="radio"> 
      <input name="option" type="radio" class="styled" id="option<?=$iCnt?>" value="<?=$iCnt?>"> 
      <label for="option<?=$iCnt?>"> 
       <strong><?=$arrLEtter[$iCnt -1]?> -</strong> 
       <?= $row['option'.$iCnt] ?> 
      </label> 
     </div> 
    <? } ?> 
<? } ?> 
</div> 

有在你的代碼中的一些遺漏變量或代碼段,我認爲你已經刪除,以儘量減少你的例子。所以我認爲這個代碼應該工作,如果你包括那些缺少的部分...

+0

我會托盤並回給你 –

+0

thx這是工作感謝很多 –

+0

@ Eng-AbdallahJomaa :)不客氣。如果這個答案幫助你解決你的問題,請[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)答案,並給它一個加票。 .. – EhsanT

相關問題