2008-10-08 9 views
3

J'affiche des données dans une table html, w/une liste déroulante avec une liste de lieux. Chaque bénévole se verra attribuer un lieu. J'envisage de pouvoir passer par la table html et d'assigner un lieu à chaque volontaire. La liste déroulante contient tous les lieux possibles auxquels ils peuvent être affectés.Entrer plusieurs variables dans la table, en affectant à chaque enregistrement approprié

<select> 
<option value="1">Setup</option> 
<option value="2">Check in</option> 
etc... 
</select> 

Puis, une fois que je suis fait assignant à chaque bénévole, je veux frapper soumettre et affectera la valeur appropriée pour chaque volontaire.

Comment pourrais-je faire cela, je sais comment faire, mais seulement un à la fois.

+0

Ainsi, serait-il correct de dire que vous avez des lieux en tant que titres de colonne, et chaque rangée de votre table est associée à un bénévole particulier, et a une liste déroulante? –

+0

Non, il y a un rang pour chaque bénévole, avec son identifiant, son nom, son adresse e-mail et son lieu de rendez-vous, et il sera tiré dans la liste déroulante du site d'une table des lieux. , donc quand vous attribuez un lieu à un volontaire, il va stocker l'identifiant du lieu dans le lieu de la colonie de bénévoles tbl – Brad

Répondre

3

Modifier le nom de chaque sélectionner, d'une manière il comprend un id bénévole:

<select name="venues[1]"> 
<option value="1">Setup</option> 
etc... 
</select> 

<select name="venues[2]"> 
<option value="1">Setup</option> 
etc... 
</select> 

<select name="venues[3]"> 
<option value="1">Setup</option> 
etc... 
</select> 

Après soumettre, il y aura une table dans $ _POST lieux nommés et indices: 1, 2, 3 (beeing id de volontaire) et les valeurs étant la valeur choisie pour chaque volontaire.

Maintenant, vous pouvez itérer sur la matrice $_POST['venues'] et enregistrer chaque valeur:

foreach ($_POST['venues'] as $volunteer_id => $venue) { 
    save_venue_for_volunteer($volunteer_id, $venue); 
} 
+0

Comment cela aide-t-il à les sauver? –

+0

Maintenant, vous pouvez parcourir le tableau $ _POST ['lieux'] et enregistrer chaque valeur: foreach ($ _POST ['lieux'] comme $ volunteer_id => $ lieu) { save_venue_for_volunteer ($ volunteer_id, $ lieu); } –

0

Je ne peux pas penser à aucun moyen. Vous pouvez mettre plusieurs instructions SQL dans 1 requête MySQL:

UPDATE volunteer SET venue = 1 WHERE id = 2; 
UPDATE volunteer SET venue = 2 WHERE id = 3; 
... 

Je souhaite qu'il y ait une certaine façon, mais je pense que le où sera trop différent dans chaque requête pour en faire un.

1

Voici un exemple très approximative de la façon dont vous pouvez gérer cela. Note: vos tables MySQL (en supposant MySQL) doivent être d'un type supportant les transactions (InnoDB, MyISAM non).

<?php 

if (isset($_POST['venuChoice'])) 
{ 
    // Create a transaction 
    mysql_query('BEGIN'); 

    $failure = false; 

    // Loop over the selections 
    foreach ($_POST['venuChoice'] as $employeeId => $venueId) 
    { 
     $sql = sprintf(
       'UPDATE table SET columns=%d WHERE id=%d' 
      , intval(mysql_real_escape_string($venueId)) 
      , intval(mysql_real_escape_string($employeeId)) 
     ); 
     if (! @mysql_query($sql)) 
     { 
      $failure = true; 
      break; 
     } 
    } 

    // Close out the transaction 
    if ($failure) 
    { 
     mysql_query('ROLLBACK'); 
     // Display and error or something 
    } else { 
     mysql_query('COMMIT'); 
    // Success! 
    } 
} 

?> 

<form> 
    <select name="venueChoice[1]"> 
     <option value="1">Setup</option> 
     <option value="2">Check in</option> 
    </select> 
    <select name="venueChoice[2]"> 
     <option value="1">Setup</option> 
     <option value="2">Check in</option> 
    </select> 
    <select name="venueChoice[3]"> 
     <option value="1">Setup</option> 
     <option value="2">Check in</option> 
    </select> 

</form> 

Vous pouvez également modifier cela pour garder une trace de choix du lieu actuel de chaque employé, le comparer aux données POST, et seulement exécuter des requêtes de mise à jour pour ceux qui ont été réellement changé.

0
foreach ($_POST['venues'] as $volunteer_id => $venue) { 
    save_venue_for_volunteer($volunteer_id, $venue); 
} 

function save_venue_for_volunteer($volunteer_id, $venue) { 
    $result = mysql_query("UPDATE volunteers_2009 SET venue_id='$venue' WHERE id='$volunteer_id'") 
    or die(mysql_error()); 
} 

La table dans laquelle elle sera sauvegardée est volunteers_2009, donc c'est comme ça qu'elle devrait être.

Questions connexes