2016-08-09 33 views
2

Ich bin auf das folgende Problem fest. Ich habe zwei PHP-Dateien: Eine, die eine Liste von Schülern mit einem Kombinationsfeld anzeigt, um jeden Schüler entweder als 'Präsentieren' oder 'Abwesend' zu markieren und einen anderen, der diese Postings erhält und die Werte in eine MySql-Tabelle einfügt. Ich habe ein Problem beim Posten der Werte des Arrays attendance_status[], was zu einem Fehler führt: "Array to string conversion". Ich weiß, dass es etwas Grundlegendes sein könnte, dass ich vermisse, aber keinen Weg finde. Das sind meine zwei Dateien (ich weiß, dass es veraltet und wird entsprechend aktualisieren):Mehrere einfügen in MySQL-Tabelle von PHP-Tabelle

index.php

?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 


require "config.php"; 
$con = mysql_connect (DBSERVER, DBUSER, DBPASS); 
mysql_select_db (DBNAME, $con); 


?> 


<h1 align="center"><font color="black"><b>ATTENDANCE FOR GRADE1</font></b></h1> 
<table id="attendance" border="1" cellspacing="1" cellpadding="1" > 
<tr > 
<th>id</th> 
<th>name</th> 
<th>surname</th> 
<th>attendance</th> 

</tr> 
<?php 

    $query = ("SELECT * FROM `b10_18591250_JC`.`STUDENT`"); 
    $result = mysql_query($query); 

while($row = mysql_fetch_array($result)) 

{ 


    echo "<form action=insertattend.php method=POST>"; 
    echo "<tr>"; 
    echo "<td>" . "<input name=stid type=number value=" .$row['ID']." </td>"; 
    echo "<td>" . "<input name=stname type=text value=" .$row['NAME']." </td>"; 
    echo "<td>" . "<input name=stsurname type=text value=" .$row['SURNAME']." </td>"; 

echo "<td>"; 
echo "<select name=attendance_status[] id=attendance_status>"; 
echo "<option value=1>Present</option>"; 
echo "<option value=0>Absent</option>"; 
echo "</select>"; 
echo "</td>"; 
echo "</tr>"; 

} 

    echo"<input type=submit value=Submit>"; 
?> 
</table> 

</form> 

Posting auf dieser Seite genannt insertattend.php

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

require "config.php"; 
$con = mysql_connect (DBSERVER, DBUSER, DBPASS); 
mysql_select_db (DBNAME, $con); 

$stid = $_POST["stid"]; 
$attendance_status = $_POST["attendance_status"]; 


mysql_query("INSERT INTO ATTENDANCE (ID, STUDENT_ID, ATTENDANCE) VALUES 
(NULL, '$stid', '$attendance_status')") or die (mysql_error()); 

?> 
+0

attendance_status ist Array Sie versuchen, es direkt –

+0

speichern Seriously? mysql_ *? – Gogol

Antwort

3

Du schreibst Themen ein Array von Anwesenheitsstatus und du solltest das wiederholen.

<?php 
while($row = mysql_fetch_array($result)) 

{ 


    echo "<form action=insertattend.php method=POST>"; 
    echo "<tr>"; 
    echo "<td>" . "<input name=stid[] type=number value=" .$row['ID']." </td>"; 
    echo "<td>" . "<input name=stname type=text value=" .$row['NAME']." </td>"; 
    echo "<td>" . "<input name=stsurname type=text value=" .$row['SURNAME']." </td>"; 

echo "<td>"; 
echo "<select name=attendance_status[] id=attendance_status>"; 
echo "<option value=1>Present</option>"; 
echo "<option value=0>Absent</option>"; 
echo "</select>"; 
echo "</td>"; 
echo "</tr>"; 

} 
?> 

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

require "config.php"; 
$con = mysql_connect (DBSERVER, DBUSER, DBPASS); 
mysql_select_db (DBNAME, $con); 

$stid = $_POST["stid"]; 
$attendance_status = $_POST["attendance_status"]; 

for($i=0;$i<count($attendance_status);$i++){ 
    mysql_query("INSERT INTO ATTENDANCE (ID, STUDENT_ID, ATTENDANCE) VALUES 
    (NULL, $stid[$i], $attendance_status[$i])") or die (mysql_error()); 
} 

?> 
+0

Das Ausführen einer INSERT-Anweisung innerhalb einer Schleife ist keine gute Methode, um die Leistung zu beeinträchtigen und das System zu verlangsamen. stattdessen können Sie Abfrage in einer Schleife generieren und außerhalb der Schleife einfügen, siehe hier - http://StackOverflow.com/questions/18459515/is-there-an-alternate-to-using-a-for-loop-to-insert -Multiple-Abfragen –

0

Sie können das Problem lösen, indem Sie für jedes Ergebnis eine Variable deklarieren. Zum Beispiel $ id = $ row ['ID'] und sie fügen diesen Wert in die Zeichenfolge ein, die Sie haben.

1

Sie benötigen eine Schleife zu Ihrem Array.

<?php 
    error_reporting(E_ALL); 
    ini_set('display_errors', 1); 

    require "config.php"; 
    $con = mysql_connect (DBSERVER, DBUSER, DBPASS); 
    mysql_select_db (DBNAME, $con); 

    $stid = $_POST["stid"]; 
    $attendance_status = $_POST["attendance_status"]; 
    $size = sizeof($attendance_status); 
    for ($i = 0 ; $i < $size ; $i++){ 
     $value = $attendance_status[$i]; 
     mysql_query("INSERT INTO ATTENDANCE (ID, STUDENT_ID, ATTENDANCE) VALUES 
     (NULL, '$stid', '$value')") or die (mysql_error()); 
    } 

    ?> 
0

Wie die anderen sagten. Sie versuchen, ein Array von Daten in einem Arbeitsschritt zu speichern. Ich habe Ihre Dateien leicht umstrukturiert und die Eingabe von stid in Array geändert.

Was insertattend.php tut:

  • die SQL-INSERT-Abfrage-Header
  • Schleifen für jeden StudentID schafft, bekommt den Schlüssel und den Wert von jedem StudentID
  • concats die Werte in den Header
  • und trimmt den letzten Doppelpunkt auf dem letzten Concat

danach erhalten Sie eine SQL-Zeichenfolge wie

INSERT INTO ATTENDANCE (ID, STUDENT_ID, ATTENDANCE) VALUES 
    (NULL, '1', '0'), 
    (NULL, '2', '1'), 
    ... 
    (NULL, '26', '1') 

Wich Sie mit mysql_query ausführen kann().

But be aware!

You are using unescaped input from the post and therefore vulnerable for sql injections!

Read this for further information:

SQL Injections

How can I prevent SQL injection in PHP?


<?php // index.php 
    error_reporting(E_ALL); 
    ini_set('display_errors', 1); 

    require "config.php"; 
    $con = mysql_connect(DBSERVER, DBUSER, DBPASS); 
    mysql_select_db(DBNAME, $con); 
    $query = ("SELECT * FROM `b10_18591250_JC`.`STUDENT`"); 
    $result = mysql_query($query); 
?> 

<h1 align="center"><font color="black"><b>ATTENDANCE FOR GRADE1</font></b></h1> 
<form action=insertattend.php method=POST> 
    <table id="attendance" border="1" cellspacing="1" cellpadding="1"> 
     <tr> 
      <th>id</th> 
      <th>name</th> 
      <th>surname</th> 
      <th>attendance</th> 
     </tr> 

     <?php while ($row = mysql_fetch_array($result)): ?> 
      <tr> 
       <td><input name=stid[] type=number value="<?= $row['ID'] ?>"</td> 
       <td><input name=stname type=text value="<?= $row['NAME'] ?>"</td> 
       <td><input name=stsurname type=text value="<?= $row['SURNAME'] ?>"</td> 
       <td> 
        <select name=attendance_status[] id=attendance_status> 
         <option value=1>Present</option> 
         <option value=0>Absent</option> 
        </select> 
       </td> 
      </tr> 
     <?php endwhile; ?> 

    </table> 
    <input type=submit value=Submit> 
</form> 

<?php // insertattend.php 
    error_reporting(E_ALL); 
    ini_set('display_errors', 1); 

    require "config.php"; 
    $con = mysql_connect(DBSERVER, DBUSER, DBPASS); 
    mysql_select_db(DBNAME, $con); 

    $ids = $_POST["stid"]; 
    $status = $_POST["attendance_status"]; 

    $sql = "INSERT INTO ATTENDANCE (ID, STUDENT_ID, ATTENDANCE) VALUES"; 

    foreach ($ids as $key => $value) { 
     $sql .= "(NULL, '$value', '$status[$key]'),"; 
    } 

    $sql = rtrim($sql, ','); 

    mysql_query($sql) or die (mysql_error()); 
?>