2010-12-14 6 views
1

Je travaille sur un script qui a essentiellement des fonctionnalités de "tell-a-friend", mais j'essaie de trouver la meilleure façon de capturer et de traiter les données.Comment traiter les données d'un ami?

Par exemple:

  1. -je afficher 5 paires de champs demandant nom et e-mail, chaque paire étant $ FRIEND_NAME1/$ friend_email1, $ FRIEND_NAME2/$ friend_email2, etc, ce qui vous permet d'envoyer des courriels 5 amis à la fois? Est-ce que j'affiche une paire et utilise JavaScript pour permettre à l'utilisateur d'ajouter plus d'amis en utilisant la convention de nommage des variables comme # 1? Est-ce que je les affiche comme suggéré dans # 1 ou # 2, mais ensuite soumettre un tableau par exemple. $ friend_email []/$ nom_amateur [], etc.

Quelle est la meilleure façon de capturer les données?

Et puis, quelle est la meilleure façon de traiter les données?

Si vous obtenez un tableau, comme dans # 3, faites-vous alors une boucle sur chaque $ nom_amis $ _POST? Le stockez-vous dans un autre tableau? Comment vous assurez-vous que la bonne combinaison nom/courriel reste ensemble, si par exemple, l'utilisateur n'a pas ajouté un "nom" pour le troisième ami?

Comment la plupart des gens le font-ils afin qu'ils puissent rester flexibles pendant la capture et précis pendant le traitement? Je suis vraiment à la recherche de logique ici, bien que l'exemple de code soit très apprécié.

L'une des choses que je suis suivi est de savoir qui fait référence à qui. Par exemple, si A fait référence à B et B achète quelque chose, A en bénéficiera. Donc, la précision et la sécurité sont très importantes pour moi.

Merci, Ryan

+0

Tout comme une mise à jour: Finalement, je ne suis pas allé avec la réponse choisie. Il résout parfaitement le problème dans cette question, mais je voulais aussi pouvoir cloner plus tard les champs de nom et d'email afin que les utilisateurs puissent choisir d'ajouter plus d'amis en cliquant sur un lien. En utilisant la méthode # 3 dans ma question initiale, cela rend le clonage très facile. Vous pouvez lire le reste ici: http://stackoverflow.com/questions/4495771/cloning-with-jquery – NightHawk

Répondre

1

Je recommande le tableau. Vous pouvez faire javascript ou autre, mais assurez-vous que la fin du traitement peut voir combien de références il y a. Pour vous assurer que l'e-mail correct et le nom restent ensemble, essayez quelque chose comme

<input type="text" name="friend_name[0]" /> 
<input type="text" name="friend_email[0]" /> 
<input type="text" name="friend_name[1]" /> 
<input type="text" name="friend_email[1]" /> 

et ainsi de suite. De là, votre script PHP va simplement correspondre aux indices de tableau dans la variable $ _POST.Par exemple, si ce formulaire a été soumis (comme ci-dessus) avec des données arbitraires, il formate comme celui-ci (ce qui est le print_r ($ _ POST); données)

Array 
(
    [friend_name] => Array 
     (
      [0] => test_name 
      [1] => test_name2 
     ) 

    [friend_email] => Array 
     (
      [0] => [email protected] 
      [1] => [email protected] 
     ) 

) 

Une idée sur une boucle à travers ceux-ci (si vous javascript implémenté avec un potentiel pour un nombre "infini" de références) serait d'utiliser count(); fonction. La mise en œuvre ressemblerait à quelque chose comme ceci:

for($i=0;$i<count($_POST['friend_name']);++$i) 
{ 
    if($_POST['friend_email'][$i] == NULL) continue; // Ignore NULL e-mails 
    // Process data blah 
} 

Ou, si ces noms où sont entrés hors service, fonction foreach() de PHP est très agréable et peut accomplir la même chose (probablement plus efficace pour ce type d'erreur de vérification)

foreach($_POST['friend_name'] as $key => $val) 
{ 
    if($_POST['friend_email'][$key] == NULL) continue; // Ignore NULL e-mails 
    // Process $val and $_POST['friend_email'][$key] 
} 

Espérons que cela aide! Bonne chance!

Dennis M.

+0

Très utile! Merci! – NightHawk

1

Ce sont des questions UI, et la réponse est tout ce que l'interface utilisateur que vous pensez fonctionne le mieux pour votre site. Vous pourriez avoir un design où un nombre fixe de champs correspond mieux, ou vous pourriez avoir un démographique où le bouton "ajouter un autre champ" est trop confus. Dans tous les cas, le code qui traite le formulaire n'a pas à être lié à la façon dont vous présentez l'interface utilisateur. Pour vous assurer que vos champs restent associés si vous les nommez en tant que tableau, spécifiez les index vous-même plutôt que d'utiliser des crochets ouverts, et vous n'aurez pas ce problème.

<input type="text" name="name[0]" value="First Friend's Name" /> 
<input type="text" name="email[0]" value="First Friend's E-mail" /> 

<input type="text" name="name[1]" value="Second Friend's Name" /> 
<input type="text" name="email[1]" value="Second Friend's E-mail" /> 

Puis dans votre code,

foreach ($_POST['email'] as $index => $value) { 
    $name = $POST['name'][$index]; 
    $email = $_POST['email'][$index]; 
} 

Dans la boucle, $name et $email seront du même ensemble de champs sous la forme, mais ils peuvent encore être vide.

Questions connexes