2017-01-30 5 views
2

So bekomme ich diesen Fehler:Insert foreach Schleife

Hinweis: Uninitialized String Offset

ich den Wert der geprüften Optionsfeld des Optionsfelds in jeder Zeile gesetzt eingefügt werden soll von meinem Tisch.

Das bedeutet in jeder Zeile meines Tisches habe ich diese Frage ll Radio Button Set ll Kommentar.

Ein Umfrageformular.

<?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

Es ist am wahrscheinlichsten, weil der '$ _REQUEST [x]' Wert nicht existiert, versuchen Sie etwas wie '$ id =! Leer ($ _ REQUEST [" Picolo4 "])? $ _REQUEST ["Picolo4"]: ""; '** ABER ** bitte bereinigen Sie Ihre Eingaben und verwenden Sie vorbereitete Anweisungen. Ihr Code ist sehr anfällig für SQL-Injektionen. – Peon

+0

Erhalten Sie immer noch den gleichen Fehler –

+0

Was ist der vollständige Fehler? Es sollte Ihnen zeigen, welche Zeile das betrifft, also können Sie überprüfen, welchen Index Sie lesen möchten, der noch nicht da ist. Dh, '$ choix = $ _POST [" $ un "] [$ i]' sieht auch verdächtig – Peon

Antwort

1

$_POST["$un"] könnte

3,2,1,0 oder 0.

und dann $_POST["$un"][$i] während $i eine incresing Nummer für den Zugriff auf Sie versuchen. Wenn Sie versuchen, eine Zeichenfolge als ein Array zu behandeln - die [$i] würde auf ihre Zeichen zugreifen, aber Ihre Zeichenfolge hat nur 1 Zeichen und Ihre Schleife läuft weiter für jeden Schlüssel $_POST existiert, die mehr als 1 Mal offensichtlich ist.

Zum Beispiel:

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

So müssen Sie Ihre Schleife ändern. Anstelle der Verwendung von:

foreach ($_POST as $val){ 

Versuchen zu verwenden:

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

Update 1:

Es gibt keinen Grund, $ _POST [$ un] als ein Array bei dem Versuch, so ersetzen zu behandeln dies:

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

mit:

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

Ok, lassen Sie mich erklären, ich mache eine Umfrage, die automatisch eine Radio-Button-Set und einen Kommentar Textbereich generieren, wenn Sie eine Frage oder viele Fragen in der Umfrage haben. Der Zweck besteht darin, den Code nicht jedes Mal ändern zu müssen, wenn Sie der Umfrage eine Frage hinzufügen, diese jedoch generieren. Das bedeutet, ich habe eine Frage, dann ==> Radio Button Set generieren dann ==> Textbereich generieren. Deshalb benutze ich zur gleichen Zeit eine Variable für Radio-Button-Set, um keinen Konflikt zwischen anderen Radio-Button-Set zu bekommen. –

+0

Versuchen Sie, dem Update meiner Antwort zu folgen und Ihre Schleife zu ändern. –

+0

Hinweis: Nicht initialisierte Zeichenfolge Offset: 1 in C: \ Wamp \ www \ Foredeck \ Foredeckaffiche_client.php Zeile 71. Also muss ich eine Zeichenfolge für jeden Wert von Radio-Button-Set tun? –