2013-06-30 3 views
0

Ceci est ma première tentative de publication de plusieurs enregistrements pour une colonne de table unique et aurait besoin d'aide.Créer un tableau à partir du formulaire et mettre à jour mysql

D'abord, comment puis-je publier ces enregistrements dans un tableau?

<?php 
    <form action="set_order.php" method="POST"> 
    <table> 
    <tr> 
    $query = mysql_query("SELECT * FROM table ORDER BY order"); 
    while ($result = mysql_fetch_assoc($query)) { 
?> 
     <td><?php echo $result['order']; ?></td> //show current order 
     <td><input type="text" name="order[]" value="<?php echo $result['order']; ?>" /></td> //input new order 
     <td><input type="hidden" name="id[]" value="<?php echo $result['id']; ?>" /></td> //send related id 
    </tr> 
    <tr> 
     <td colspan ="2"><input type="submit" value="save" /> 
    </tr> 
    </table> 
    </form> 

La deuxième question est de savoir comment insérer un tableau dans une table.

table 

id | order 
1 | 3 
2 | 4 
3 | 2 
4 | 1 

Je trouve ceci: Post array from form to update mysql table

<?php 
foreach ($_POST['id'] as $id) { 
$order = $_POST['order']; // here is the problem 
echo $id . ',' . $order . '<br />'; 
} 
?> 

Mais je ne peux pas obtenir le résultat à l'aide d'ECHO.

je reçois:

1, Array 
2, Array 
3, Array 
4, Array 

Si je peux faire qui fonctionne, je pense que je peux réussir à mettre à jour la table en conséquence avec FOREACH.

Répondre

2

Les deux $ _POST ['id'] et $ _POST ['order'] sont des tableaux, c'est une bonne idée d'itérer sur les ID, mais vous devez récupérer l'élément correspondant de $ _POST ['order'] à chaque itération.

Comme les deux tableaux sont remplis simultanément lorsque la requête HTTP est au serveur, les éléments correspondants doivent partager les mêmes clés, ce qui devrait fonctionner:

<?php 
foreach ($_POST['id'] as $key=>$id) { 
    $order = $_POST['order'][$key]; 
    echo $id . ',' . $order . '<br />'; 
} 
?> 
0

En php, vous ne pouvez pas imprimer directement un tableau. Vous devez donc utiliser une boucle foreach en boucle à travers les éléments un par un et les écho:

foreach ($order as $orderElem) 
    echo $orderElem; 

Dans votre code, vous êtes déjà en boucle à travers le réseau identifiant, mais vous avez oublié le tableau de commande. Vous devrez donc utiliser ce morceau de code dans votre boucle foreach déjà existante.

+0

Merci. Mais comment puis-je avoir deux boucles travaillant ensemble? Quelque chose comme: foreach (($ _POST ['id'] as $ id) ET ($ _POST ['commander'] comme $ order)) { faire quelque chose} –

+0

Non, ce serait plus comme foreach ($ list1 comme elem1) { foreach ($ list2 comme elem2) { do_something_with_elem1_and_elem2(); } } – Joren

Questions connexes