sql >> Database >  >> RDS >> Mysql

voeg meerdere velden in met behulp van foreach-lus

Je doet een foreach op $_POST in plaats van op de naam/leeftijd-arrays. Je zou foreach op naam of leeftijdsgroep als volgt moeten doen:

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')");
    } 
}

Ik merk ook op dat je momenteel vatbaar bent voor SQL-injectie, dus ik heb de stap toegevoegd om je strings voor naam/leeftijd te laten ontsnappen.

Ik zou ook ten zeerste aanbevelen om eenvoudig een enkele bulk-insert in de DB te maken in plaats van een insert van elk record afzonderlijk (ik laat dat aan jou over om te implementeren). Deze benadering verdient bijna altijd de voorkeur vanuit het oogpunt van prestaties.

Ten slotte zou je ECHT geen mysql_* moeten gebruiken functioneert zoals ze zijn verouderd. Overweeg over te stappen op mysqli of PDO.



  1. Prestaties van MYSQL IN

  2. FOUT:niet-beëindigde tekenreeks tussen aanhalingstekens op of nabij

  3. Voeg gegevens slechts één keer toe aan de sqlite-database en lees ze meerdere keren

  4. Converteer het Amerikaanse datumformaat naar ANSI SQL-datumformaat (JJJJ-mm-dd)