2010-05-14 1 views
1

Laissez-moi commencer par dire que je suis nouveau sur PHP, mais je suis ici pour apprendre et j'apprécierais vraiment votre aide.Récupérer plusieurs lignes à partir d'un formulaire créé en boucle ... Stuck

J'utilise le code suivant pour extraire des données et créer un formulaire. Cela crée jusqu'à 40 lignes qu'un utilisateur doit remplir. Chaque ligne contient les mêmes informations: Description, Quantité et Fréquence. Le reste de l'information nécessaire est généré par la base de données. (Voir les champs cachés)

<?php 
$row = 0; 
do { 
$optid = $row_options['option_id']; 
echo "<tr>\n\t<td>" . htmlentities($row_options['option']) . "</td>\n"; 
echo "\t<td>" . "<input name='description' type='text' size='40' maxlength='120'/>" . "</td>\n"; 
echo "\t<td>" . "<input name='option_id' type='hidden' value='$optid' />$<input name='amount' type='text' size='10' maxlength='7'/>" . "</td>\n"; 
echo "\t<td>" . "<select name='assisted_frequency'> 
      <option value='Monthly'>Monthly</option> 
    <option value='Weekly'>Weekly</option> 
    <option value='Daily'>Daily</option> 
    <option value='Hourly'>Hourly</option> 
    <option value='One-Time'>One-Time</option> 
      </select>" . "</td>\n</tr>\n"; 

$array[$row] = array(
$arraydesc[$row] = $_POST['description'], 
$arrayamto[$row] = $_POST['amount'], 
$arrayoptid[$row] = $optid, 
$arrayfreq[$row] = $_POST['frequency'], 
); 
$row ++; 
} while ($row_options = mysql_fetch_assoc($options)); 
$counter = $row - 1; 
?> 

Je rencontre des problèmes lors de la récupération des informations entrées par l'utilisateur. Mon intention est de faire une boucle sur chaque ligne après que l'utilisateur a entré ses informations, puis télécharger le mélange de mes informations de base de données et les informations de l'utilisateur dans une autre base de données. Par exemple, l'utilisateur verrait, bien plus jolie:

form1 

Option 1: description [input box]  amount [input box]  frequency [option box] 
Option 2: description [input box]  amount [input box]  frequency [option box] 
Option 3: description [input box]  amount [input box]  frequency [option box] 
Option 4: description [input box]  amount [input box]  frequency [option box] 

submit 

Après avoir soumis le formulaire ci-dessus, j'utilise une requête similaire à ce qui suit pour entrer les données dans la base de données:

for($row=0; $row<=$counter; $row++){ 
$insertSQL2 = sprintf("INSERT INTO table (option_id, amount, description, frequency) VALUES (%s, %s, %s, %s)", 
GetSQLValueString($arrayoptid[$row], "int"), 
GetSQLValueString($arrayamto[$row], "int"), 
GetSQLValueString($arraydesc[$row], "text"), 
GetSQLValueString($arrayfreq[$row], "text")); 

// code to submit query 
} 

I J'ai essayé, foreach, tableaux (ce qui ressemble à tout ce que je sais) pour poster chaque ligne (rangée par rangée) dans la base de données. Je reçois soit la dernière ligne de données, soit pas de données du tout. Je m'inquiète aussi que la technique [$ row] ajoute des caractères à mes données.

Quelle est la meilleure façon de récupérer chaque ligne des entrées de l'utilisateur, puis télécharger ces données (rangée par rangée) dans la base de données? En outre, j'apprécierais vraiment vos suggestions pour améliorer ma technique de codage et l'approche que je prends.

Répondre

1

Vous avez essayé cela?

<input name="description[]" type="text" ... /> 
<input name="option_id[]" type="text" ... /> 
<select name="assisted_frequency[]">...</select> 

puis

$expectNumRows = ...; 
function is_good_subm_data($name, $num) { 
    return (array_key_exists($name, $_POST) && 
     is_array($_POST[$name]) && count($_POST[$name]) == $num); 
} 
if (!is_good_subm_data('description', $expectNumRows) || 
    !is_good_subm_data('option_id', $expectNumRows) || 
    !is_good_subm_data('assisted_frequency', $expectNumRows)) { 
    //error handling 
} 

for ($i = 0; $i < $expectNumRows; $i++) { 
    //read $_POST['description'][$i] etc. 
} 

Très basique (pas de validation) fichier PHP:

<?php 
if ($_SERVER['REQUEST_METHOD'] == "GET") { 
?> 
<form method="post"> 
Description 1: <input name="description[]" type="text" /><br /> 
Option Id 1: <input name="option_id[]" type="text" /><br /> 
<br /> 
Description 2: <input name="description[]" type="text" /><br /> 
Option Id 2: <input name="option_id[]" type="text" /><br /> 
<input type="submit" /> 
</form> 
<?php } else { 
    $expectNumRows = 2; 
    for ($i = 0; $i < $expectNumRows; $i++) { 
     echo "description $i:" . 
      htmlentities($_POST["description"][$i]) . "<br />"; 
     echo "option id $i:" . 
      htmlentities($_POST["option_id"][$i]) . "<br />"; 
     echo "<br />"; 
    } 
} 
+0

Salut Artefacto. Merci pour la suggestion. Cependant, je n'arrive pas à faire fonctionner ça. Pourriez-vous expliquer ce qui se passe dans la fonction? Cela m'aiderait à clarifier ce que fait le code. En outre, comme il s'agit d'insérer de nouvelles lignes dans la base de données, y a-t-il d'autres étapes à coder? (La base de données existe, et quand je l'ai couru pour 1 ligne, elle est réussie). Le problème est que le code met à jour toutes les lignes du formulaire dans la base de données. Merci, Hangston – hangston

+0

La fonction est juste pour la validation. Il vérifie le bon nombre de valeurs ont été soumises. J'ai mis à jour le POST avec un exemple de fichier PHP que vous pouvez utiliser. – Artefacto

+0

Merci juste m'a aidé .. –

Questions connexes