sql >> Databasteknik >  >> RDS >> Mysql

infoga flera fält med hjälp av varje slinga

Du gör en foreach på $_POST snarare än på namn-/åldersarrayerna. Du bör göra foreach på namn eller åldersgrupp så här:

if (
   !empty($_POST['name']) && !empty($_POST['age']) &&
   is_array($_POST['name']) && is_array($_POST['age']) &&
   count($_POST['name']) === count($_POST['age'])
) {
    $name_array = $_POST['name'];
    $age_array = $_POST['age'];
    for ($i = 0; $i < count($name_array); $i++) {

        $name = mysql_real_escape_string($name_array[$i]);
        $age = mysql_real_escape_string($age_array[$i]);

        mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')");
    } 
}

Jag skulle också notera att du för närvarande är mottaglig för SQL-injektion så jag lade till steget att undkomma dina strängar för namn/ålder.

Jag skulle också starkt föreslå att helt enkelt göra en enstaka bulkinfogning i DB istället för en insättning av varje post individuellt (jag lämnar det upp till dig att implementera). Detta tillvägagångssätt är nästan alltid att föredra ur prestationssynpunkt.

Slutligen borde du VERKLIGEN inte använda mysql_* fungerar när de är utfasade. Överväg att byta till mysqli eller PDO.



  1. Hur man får en sista post med ett visst id i codeigniter

  2. Förhindrar Knex.js sql-injektion?

  3. Gruppera flera valda uttalanden när du anropar Oracle från ADO.NET

  4. Mysql 5.6 huvudvärk på Mac OSX