2016-04-11 7 views
1

Ich habe drei Arrays und möchte sie in die Datenbank schreiben. Das Problem, das ich habe, ist, wann immer die Werte in die bestimmte Spalte geschrieben werden, der Rest der Spalte bleibt leer. DieMit foreach in die Datenbank schreiben

$name_array = array(3) { [0]"Name1" [1]=>"Name2" [2]=> "Name3" } 
$roll_array = array(3) { [0]=>"1" [1]=>"2" [2]=>"3" } 
$att_array = array(3) { [0]=>"Present" [1]=>"Present" [2]=>"absent" } 

Ich habe drei Spalten in DB „NAME“ „ROLL“ „attendance“ ich alle Array-Daten in die Datenbank zur gleichen Zeit gespeichert werden sollen. so sollte es wie dieses hier

NAME  ROLL  ATTENDANCE 
Name1  1   present 
Name2  2   present 
Name3  3   absent 

zu sehen ist der Code, den ich versucht, aber es nur jeweils Werte in die Spalte hinzufügen und lässt die andere Spalte leer. Die ersten drei Zeilen haben also nur ROLLNO und die nächsten drei Zeilen haben nur NAME und die letzten drei Zeilen haben nur ANTENDANCE.

$name_values = array(); 
$roll_values = array(); 
$att_values = array(); 


foreach ($name_array as $key => $name_values) { 

    $name_values = mysqli_real_escape_string($connection,$name_values); 
    $sql= "INSERT INTO `aclass12` (Name) VALUES ('$name_values')"; 
    mysqli_query($connection,$sql); 

} 

foreach ($roll_array as $key => $roll_values) { 
    $roll_values = mysqli_real_escape_string($connection,$roll_values); 
    $sql= "INSERT INTO `aclass12` (RollNo) VALUES ('$roll_values')"; 
} 

foreach ($att_array as $key => $att_values) { 
    $att_values = mysqli_real_escape_string($connection,$att_values); 
    $sql= "INSERT INTO `aclass12` (attendance) VALUES ('$att_values')"; 
} 

Ich weiß, das ist nicht der richtige Weg zu tun. und was ist der Weg dies zu tun?

+1

Ordnen Sie Ihre Arrays so an, dass jede foreach eine Datenzeile enthält (Name, Rolle, Anwesenheit), und fügen Sie dann alle drei Werte in eine Abfrage ein. – JimL

Antwort

0
foreach($name_array as $n_k=>$name) { 
    $roll = (isset($roll_array[$n_k])) ? $roll_array[$n_k] : ''; 
    $att = (isset($att_array[$n_k])) ? $att_array[$n_k] : ''; 
    $name = mysqli_real_escape_string($connection,$name); 
    $roll = mysqli_real_escape_string($connection,$roll); 
    $att = mysqli_real_escape_string($connection,$att); 
    $sql= "INSERT INTO `aclass12` (Name, RollNo, attendance) VALUES ('$name','$roll','$att')"; 
    mysqli_query($connection,$sql); 
} 
+0

Bitte korrigieren Sie die Anweisung einfügen –

+0

ich denke, es funktioniert jetzt – Eugene

+0

Ja jetzt ist es richtig –

0

Verwenden Sie nur eine foreach und greifen Sie dort auf die Elemente der Arrays zu. Wie folgt:

Es wird auch empfohlen, vorbereitete Anweisungen zu verwenden, da sie SQL-Njection-Angriffe verhindern. Weitere Informationen here.

0

Probieren Sie es diese Möglichkeiten

for($i = 0; $i < count($name_array);$i++) { 
    $name_values = mysqli_real_escape_string($connection,$name_array[$i]); 
    $roll_values = mysqli_real_escape_string($connection,$roll_array[$i]); 
    $att_values = mysqli_real_escape_string($connection,$att_array[$i]); 
    $sql= "INSERT INTO `aclass12` (Name, RollNo, attendance) VALUES ('$name_values', '$roll_values','$att_values')"; 
} 

Andere Option ist mit foreach mehrdimensionalen Arrays zu verwenden.

3

Verwenden Sie einfach ein Array als Master und den Schlüssel dieses Arrays, um auf die anderen 2 Array-Daten zuzugreifen.

Dann legen Sie alle Daten in einem einzigen INSERT

Es ist auch eine gute Idee zu überprüfen, dass die INSERT arbeitete tatsächlich, so habe ich ein wenig Fehlerprüfung

foreach ($name_array as $key => $value) { 

    $name = mysqli_real_escape_string($connection,$value); 
    $roll = mysqli_real_escape_string($connection,$roll_values[$key]); 
    $att = mysqli_real_escape_string($connection,$att_array[$key]); 

    $sql = "INSERT INTO `aclass12` 
        (Name, RollNo, attendance) 
      VALUES ('$value', '$roll', '$att')"; 

    $res = mysqli_query($connection,$sql); 
    if ($res === FALSE) { 
     echo mysqli_error(); 
     exit; 
    } 

} 
0

ich es glaube wäre am besten zu verwenden, da mysql query es injizieren und einfach alles vorher verketten. Das ist etwas in der Art:

$query = "INSERT INTO tbl_name (col1, col2, col3) VALUES "; 

for ($i = 0; $i < count($name_array); $i++) { 
    $name = mysqli_real_escape_string($conn, $name_array[$i]); 
    $roll = mysqli_real_escape_string($conn, $roll_array[$i]); 
    $att = mysqli_real_escape_string($conn, $att_array[$i]); 
    $query .= "('{$name}', '{$roll}', '{$att}'),";  
} 

$query = trim($query, ','); 
$query = $query . ';'; 
mysqli_query($connection,$sql); 

Fügen Sie einige Schadenskontrolle dort (überprüfen Sie auf Fehler) und das ist es.

Verwandte Themen