2011-10-13 4 views
0

D'accord, donc je l'ai récupéré avec succès des lignes de ma db où je champs:Problèmes de mise à jour mySQL DB

ref,fname,lname,event1,event2,event3. 
ref is the ID (autonumber). 

Donc, dans mon fichier php index je récupère les données de mon db et stocker dans une table avec correspond le en-têtes et ensuite les 100 noms environ j'ai. Pour les événements 1, 2 et 3, j'ai des cases à cocher. Maintenant, j'ai essayé pendant des heures de capturer les cases cochées et de mettre à jour les colonnes d'enregistrement db pour event1 et/ou event2 et/ou event3. Je pense que mon erreur quand je nommerai les cases à cocher, j'ai appelé pour chaque ligne:

La case à cocher event1 I nommé event1[]
La case à cocher event2 Je l'ai appelé event2[]
La case à cocher event3 j'ai nommé event3[]

.. .et cela a été répété 100 fois. Quand je soumets la forme, je l'ai écrit dans le fichier post_submit.php les éléments suivants:

$event1[] = $_POST['event1']; 
$event2[] = $_POST['event2']; 
$event3[] = $_POST['event3']; 

Ce qui est apparemment faux que cela ne fonctionne pas. Que se passe-t-il lorsque je coche certaines cases puis que je soumets le formulaire, c'est toujours le premier couple d'enregistrements de ma base qui est mis à jour, si je coche la case LAST pour event1, et que je vais dans ma base de données était seulement le champ event1 pour le premier enregistrement qui a été mis à jour. Je fais quelque chose de mal ici, et je suppose que c'est quelque chose à voir avec les informations que j'ai fournies ci-dessus. Quelqu'un peut-il m'aider s'il vous plaît. Aussi, pour la valeur checkbox j'ai "1" donc l'idée est de mettre à jour les champs event1,2,3 avec un 1 s'il a été coché.

Merci

+0

Désolé pour le Markdown bizarre de formatage est doin ma tête! – DSF

Répondre

2

Si je comprends bien, vous avez une table d'environ 100 lignes avec:

id, first name, last name, event 1, event 2, event 3 

et événement 1-3 ne sont que des cases à cocher dans le champ de la table. Si vous n'avez que event1 [] avec la valeur 1 ou 0 (cochée ou décochée) et que vous publiez ce formulaire, l'écran de soumission n'aura qu'un tableau de 0 et 1. Il ne garde pas de trace de quelle ligne il vient. Conseil: donnez à votre événement1-3 [] la valeur de l'ID. De cette façon, votre tableau d'événements contiendra les identifiants dont l'événement a besoin d'être mis à jour.

Donc si vous avez id = 3, ont alors la case à cocher:

<input type='checkbox' name='event1[]' value='3'> 
1

Si je suis ce que vous essayez de faire ici, je pense que vous essayez de collecter un tableau des cases cochées. Considérez ce qui suit:

<input type="checkbox" name="events[]" value="1" /> 
<input type="checkbox" name="events[]" value="2" /> 
<input type="checkbox" name="events[]" value="3" /> 
<input type="checkbox" name="events[]" value="4" /> 
<input type="checkbox" name="events[]" value="5" /> 

Si je vérifie 1,2 et 5, le résultat de print_r($_POST['events']); sera quelque chose comme ceci:

Array (
    0 => 1 
    1 => 2 
    2 => 5 
) 

donc ce que vous voulez faire est de donner toutes vos cases le même attribut name= et différents attributs value=, correspondant aux identifiants d'événement que vous souhaitez obtenir de l'utilisateur. Ensuite, les valeurs du tableau soumis correspondront aux options sélectionnées.

0

$event1[] = ... va ajouter une valeur au tableau $event1. Un tableau est créé si $event1 n'en contient pas déjà un. Je pense que c'est le coeur de votre problème. L'idée de nommer une entrée de formulaire 'event []' (ou n'importe quel autre nom entre crochets) est que PHP va l'interpréter comme un tableau. De cette façon, vous pouvez avoir toute une série d'entrées dans une seule valeur (tableau). Cela n'a pas de sens si vous les nommez différemment. Je pense qu'il est préférable de le faire, mais vous ne devez pas utiliser les crochets.

0

Votre code HTML pour chaque ligne peut ressembler à ceci:

echo '<input type="checkbox" name="event1[' . $row['ref'] .']" value="1" />'; 

Cela met l'ID de la ligne dans le tableau lorsqu'il est soumis à la page que vous souhaitez ensuite récupérer de la demande comme celui-ci :

$event1 = $_POST['event1']; 

maintenant, vous pouvez faire une boucle à travers le réseau event1 $, ce qui aura des clés correspondant aux ID qui avaient leurs cases cochées.