2011-01-22 10 views
0

言語と会社に対してlinklink textを保存する必要があるフォームを処理するには、より良い方法がありますか?複数のフォームフィールドを処理する方が良い

以下の例は機能しますが、難しい作業だと思います。

リンクとリンクテキストフィールドのキーに言語と会社のIDをグループ化し、その他の情報をPHPとDBに渡す方法として、テキストフィールドを追加しました。

$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']."' 
     "; 
    } 
    } 
} 

そしてHTML

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

1ページに表示された複数の言語や企業が存在する場合があります。

+0

補足として、これらの入力を確実に消毒してください!あなたのSQLステートメントは私がうんざりさせています。 http://php.net/manual/en/function.mysql-real-escape-string.phpを使用するか、またはプリペアドステートメントを使用してください。 – nategood

+0

@nategoodありがとう、コードの簡素化のために私はポストキーと値から自分のクリーニングを削除しました。 –

答えて

3

something[]をフィールド名として使用します。そうすれば、PHPは$_POST['something'](または$ _GET、$ _REQUEST - 明らかに)の配列を作成します。この配列は、醜い部分文字列比較なしで使用できます。

フィールド名(name="something[42]")に配列インデックスを指定することもできます。一緒に属している複数のフィールドがある場合、これは良い考えです。とにかく注文は正しいと思われるので(foreach($_POST['field1'] as $idx => $val)_POST['field2'][$idx]を使用してください)、索引がHTMLコードにも含まれていると、コードを読んでいる人にとって安全であるか、少なくとも直感的です。

+0

ありがとう、html配列は最良のアプローチのように見えますが、詳細と同じレベルの言語と会社を持つように配列を整形するためのループがたくさんあるようです。ありがとう –

関連する問題