2011-01-22 4 views
0

Existe-t-il une meilleure façon de traiter un formulaire dans lequel je dois enregistrer un link et link text par rapport à une langue et une entreprise?Meilleure façon de traiter plusieurs champs de formulaire

L'exemple ci-dessous fonctionne, mais je pense que c'est un travail difficile.

J'ai ajouté la langue et l'identifiant de la société à la clé des champs de lien et de texte de lien pour les regrouper et passer les autres informations à PHP et dans la base de données.

$newlinks = array(); 
foreach($_POST as $post_key => $post_value) { 
    if (substr($post_key, 0, 7) == 'newlink') { 
    $posted_link = explode('_', $post_key); 
    $newlinks[$posted_link[1]][$posted_link[2]][$posted_link[0]] = $post_value; 
    $newlinks[$posted_link[1]][$posted_link[2]]['language_id'] = $posted_link[1]; 
    $newlinks[$posted_link[1]][$posted_link[2]]['company_id'] = $posted_link[2]; 

    } 
} 

foreach($newlinks as $newlinklang) { 
    foreach($newlinklang as $newlink) { 
    if ($newlink['newlink'] != '' && $newlink['newlinkname'] != '') { 
     $sql = " 
     INSERT 
      INTO 
     ".$db_prefix."catalogue_links (
      link, 
      link_name, 
      language_id, 
      company_id 
     ) VALUES (
      '".$newlink['newlink']."', 
      '".$newlink['newlinkname']."', 
      '".$newlink['language_id']."', 
      '".$newlink['company_id']."' 
     "; 
    } 
    } 
} 

Et le code HTML

<input type="text" name="newlink_1_1" value="" /> 
<input type="text" name="newlinkname_1_1" value="" /> 

Il peut y avoir plusieurs langues et les entreprises affichées sur une page.

+0

En note, assurez-vous de désinfecter ces entrées! Votre déclaration SQL me fait grincer des dents. Utilisez http://php.net/manual/en/function.mysql-real-escape-string.php ou utilisez des instructions préparées. – nategood

+0

Merci @nategood, en simplifiant le code pour SO j'ai supprimé mon nettoyage de la clé de poste et des valeurs. –

Répondre

3

Utilisez something[] comme nom de zone. Alors PHP va créer un tableau dans $_POST['something'] (ou $ _GET, et $ _REQUEST - évidemment) que vous pouvez utiliser sans comparaisons de sous-chaînes laides.

Vous pouvez également spécifier des index de tableau dans le nom du champ (name="something[42]"). Cela peut être une bonne idée si vous avez plusieurs champs qui appartiennent ensemble. Alors que la commande est censée être correcte de toute façon (vous pouvez donc foreach($_POST['field1'] as $idx => $val) et utiliser _POST['field2'][$idx]) il pourrait être plus sûr ou au moins plus intuitif pour quelqu'un qui lit le code si les index sont également dans le code HTML.

+0

Merci, les tableaux html ressemblent à la meilleure approche, mais il semblerait qu'il y aura beaucoup de bouclage pour formater les tableaux pour avoir la langue et la compagnie au même niveau que les détails. Merci –

Questions connexes