2011-12-23 4 views
-2

J'ai un formulaire PHP avec 3 champs name, date, school. Associé à eux sont jusqu'à 40 college, coursetitle, coursenumber s.Insérer un tableau dans MySQL avec PHP

Je veux que le SQL insert à:

INSERT INTO _some_table_ 
    (name, date, school, college, coursetitle, coursenumber) 
VALUES 
    (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000), 
    (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000), 
    (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000), 
    (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000), 
    (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000), 
    (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000); 

etc., et je ne veux pas d'inclure toutes les lignes où le coursetitle est vide. Je vais avoir du mal avec le tableau!

+0

D'où vient l'info collégiale? Vous voulez ajouter 40 lignes par formulaire 1 soumettre? Cela ressemble à une mauvaise abstraction. – Corubba

+0

Besoin de normaliser vos tables. Avoir une table pour les noms, les collèges, les cours, puis une table qui les relie tous ensemble. Si vous voulez conserver ce que vous avez, pourriez-vous montrer le tableau de données avec lequel vous travaillez? –

+0

Où est le tableau? pouvez-vous montrer votre code PHP? – ManseUK

Répondre

0

Si vous voulez le faire en tant que tableau, vous devez le mélanger avec la session afin que la session contienne vos valeurs de tableau. Ainsi, la requête d'insertion sera à l'intérieur de votre boucle.

Pouvez-vous copier votre code? Ou vous voulez que je code l'exemple? Merci

+0

Pour utiliser un tableau, vous devez utiliser la session? pardon quoi ? – ManseUK

+0

Comment pouvez-vous ajouter votre valeur dans array comme valeur dynamique? J'ai donné la solution et la mélange entre array et session de sorte que lorsque l'utilisateur veut déjà valider les valeurs dans la table de la base de données. Donc, l'utilisateur peut en mesure de valider la base de données. Comme la transaction pour un exemple simple :) J'espère que vous avez obtenu ce que je veux dire –

0

Si vous utilisez mysqli, il pourrait être quelque chose comme ceci:

<?php 
$mysqli = new Mysqli('localhost','root','pass','db'); 

$stmt = $mysqli->prepare('INSERT INTO _some_table(name, date, school, college, coursetitle, coursenumber) VALUES(?, ?, ?, ?, ?, ?)'); 

/** 
* ITERATE VALUES, EACH KEY IN ARRAY CORRESPONDS TO A NEW ROW, THAT HAS TO BE INSERTED. 
*/ 
foreach($values as $arr) { 
    if (!empty($arr['coursetitle'])) { 
     extract($arr); 
     /* 
     * BIND THE VALUES TO BE INSERTED TO THE STATEMENT 
     */ 
     $stmt->bind_param('ssssss', $name, $date, $school, $college, $coursetitle, $coursenumber); 
     $stmt->execute(); // Execute statement 
    } 
} 

$stmt->close(); 
$mysqli->close(); 
?> 

ce ofcourse suppose que vous utilisez un tableau associatif avec des touches qui équivaut à les noms de colonnes.

Vous pouvez en savoir plus sur les instructions préparées here

0

Êtes-vous juste difficultés à obtenir les tableau POST? Lorsque vous écrivez le code HTML, vous pouvez faire quelque chose comme:

<table> 
    <tr> 
     <td>Course: </td><td><input type="text" name="coursetitle[]" value="" /></td> 
    </tr>   
    <tr> 
     <td>Course Number: </td><td><input type="text" name="coursenum[]" value="" /></td> 
    </tr> 
    <tr> 
     <td colspan="3"><h3>Add Another:</h3></td> 
    </tr> 
    <tr> 
     <td>College: </td><td><input type="text" name="college[]" value="" /></td> 
    </tr> 
    <tr> 
     <td>Course: </td><td><input type="text" name="coursetitle[]" value="" /></td> 
    </tr>   
    <tr> 
     <td>Course Number: </td><td><input type="text" name="coursenum[]" value="" /></td> 
    </tr> 
    <tr> 
     <td>College: </td><td><input type="text" name="college[]" value="" /></td> 
    </tr> 
</table> 

Et vous pouvez faire autant de ceux que vous voulez MANIPULEZ avec PHP comme ceci:

$i = 0; 
$complete = 0; 
$query = "INSERT INTO TABLE (name, date, school, college, coursetitle, coursenumber) VALUES "; 
foreach($_POST['coursetitle'] AS $course) { 
    $title = trim($course); 
    if (!empty($title)) { 
     $college = trim($_POST['college'][$i]); 
     $num = trim($_POST['coursenum'][$i]); 
     $query .= "('foo', '" . date("Y-m-d") . "', 'UCLA' '{$college}', '{$title}', '{$num}'),"; 
    $complete++; 
    } 

    $i++; 
} 

$query = substring($query, 0, strlen($query) - 1); // Removes last comma from query 
if ($complete == 0) { 
    echo "No colleges were posted, or none of the course titles were completed."; 
    exit; 
} else { 
    $query .= ";"; 
    mysql_query($query); 
} 

Ou quelque chose comme ça :)

+0

Merci! Je l'ai eu en utilisant foreach/if (vide). –