2017-01-30 110 views
2

,所以我得到這個錯誤:插入foreach循環

注意:未初始化字符串偏移

我要插入的單選按鈕的檢查單選按鈕設置在每一行的值我的桌子。

這意味着我的每一行我有這個問題ll單選按鈕設置ll評論。

調查表。

<?php 
$link=Mysqli_connect($host,$login,$pass,$dbname); 
$un = 0; 
$msgerror = "Veuillez remplir tous les champs ";  
if(isset($_POST["bouton10"])) { 
    $id = $_REQUEST["Picolo4"]; 
    $Nom = $_REQUEST["Picolo1"]; 
    $Prenom = $_REQUEST["Picolo2"]; 
    $Email = $_REQUEST["Picolo3"]; 

    if ($id !="" && $Nom !="" && $Prenom !="" && $Email !="") { 
     $recherche= "SELECT Ref,Question,Choix,Commentara FROM questionnaire WHERE Qref ='$id'"; 
     mysqli_query($link,$recherche); 
     $result= mysqli_query($link,$recherche); 
     $num_results = $result->num_rows; 

     while ($row = mysqli_fetch_assoc($result)) { 
      $Ref =$row["Ref"]; 
      $Question =$row["Question"]; 
      $un++; 

      echo" <tr bgcolor=\"white\"> 
       <td>$Question position: $un </td> 
       <td> 
        <input type=\"radio\" name =\"$un\" id =\"un\" value = \"3\"> 
        <input type=\"radio\" name =\"$un\" id =\"un\" value = \"2\"> 
        <input type=\"radio\" name =\"$un\" id =\"un\" value = \"1\"> 
        <input type=\"radio\" name =\"$un\" id =\"un\" value = \"0\"> 
        <input type=\"radio\" name =\"$un\" id =\"un\" value = \"0\"> 
       </td> 
       <td width = \"60\"> <textarea> </textarea> </td> 
      </tr>        
      </div> 
      </div>"; 
     } 
    } else { 
     echo "<script type='text/javascript'>alert('$msgerror')</script>"; 
    } 
} 
//The part with the problem // 
$un = 1; 
if (isset($_POST["bouton11"])) { 
    $i= 0 ; 
    while(isset($_POST[$un])) { 
     //Line 71 // 
     $choix = $_POST["$un"][$i]; 
     $enregistrer = "INSERT INTO questionnaire(Choix) VALUES('$choix') "; 
     $un++; 
     $i++; 
     mysqli_query($link, $enregistrer); 
    } 
} 
?> 
+0

這很可能是因爲'$ _REQUEST [x]'值不存在,請嘗試類似'$ id =!empty($ _ REQUEST [「Picolo4」])? $ _REQUEST [「Picolo4」]:「」;'**但是**請清理您的輸入並使用準備好的語句。你的代碼非常容易受到SQL注入的影響。 – Peon

+0

仍然得到相同的錯誤 –

+0

什麼是完整的錯誤?它應該告訴你這是什麼線,因此,你可以檢查你想要讀的索引,那還沒有。即,'$ choix = $ _POST [「$ un」] [$ i]'也看起來可疑 – Peon

回答

1

$_POST["$un"]可能

3,2,1,0或0

然後你想訪問$_POST["$un"][$i]$i是incresing數。當您嘗試將字符串視爲數組時 - [$i]將訪問它的字符,但您的字符串只有1個字符,並且您的循環持續運行,每個$_POST鍵存在的時間明顯多於1次。

例如:

$string = "abcd"; 
echo $string[0]; // a 
echo $string[1]; // b 
echo $string[5]; // Notice: Uninitialized string offset: 5 in .. 

所以,你需要修改你的循環。 而不是使用:

foreach ($_POST as $val){ 

嘗試使用:

while(isset($_POST[$un])){ 
    //your code here 
    $un++; //don't forget to increase $un 
} 

更新1:

可以放心嘗試治療$ _ POST [$取消]作爲一個數組沒有理由因此更換這樣的:

$choix = $_POST["$un"][$i]; 

有:

$choix = $_POST["$un"]; 
+0

好的,讓我解釋一下我自己,如果你在調查中有一個問題或許多問題,我會做一個調查,它會自動生成一個單選按鈕和一個評論文本區。目的是在您向調查添加問題但不生成代碼時,無需每次更改代碼。這意味着我有一個問題,然後==>生成單選按鈕集然後==>生成文本區域。所以這就是爲什麼我在同一時間使用單選按鈕設置的變量不會與其他單選按鈕設置發生衝突。 –

+0

嘗試按照我的答案更新並修改你的循環。 –

+0

注意:未初始化的字符串偏移量:1在C:\ wamp \ www \ Foredeck \ foredeckaffiche_client.php在71行。所以我需要爲每個單選按鈕集的每個值做一個字符串? –