1

私は2つのフォームをコーディングしました。最初のフォームは、送信時に 2 番目のフォームにフィールドを追加することです。2 番目のフォームは、そのフォームのフィールドに従ってクエリを生成します。コードはこちら

<?php
$i=0;
print '<form action="search.php" method="post" ><input name="ad_field_button" type="submit" value="Add Field" /></form>';
print '<form action="results1.php" method="post" style="width:550px">';
print '<table border="0"><tr><td>';
print 'Field Name <select name="field_list'.$i.'" size="1"><option selected="selected">Select...</option>
      <option id="Id" name="id'.$i.'">Id</option>
      <option id="Name"  name="name'.$i.'">Name</option>
      <option id="Nick Name" name="nickname'.$i.'">Nick Name</option>
      <option id="Pet" name="pet'.$i.'">Pet</option>
      <option id="Disease" name="disease'.$i.'">Disease Associated</option>
</select></td>';
print '<td>Operator <select name="operator_list'.$i.'" size="1"><option selected="selected">Select...</option>
      <option id="Equal" name="equal'.$i.'">=</option>
      <option id="Gthan" name="gthan'.$i.'">></option>
      <option id="Lthan"  name="lthan'.$i.'"><</option>
      <option id="Like" name="like'.$i.'">LIKE</option>
</select></td>';
print ' <td>Query <input name="ad_search_query'.$i.'" type="text" /></td>';
print ' <td>Condition <select name="cond_list'.$i.'" size="1"><option selected="selected">Select...</option>
      <option id="And" name="and'.$i.'">AND</option>
      <option id="Or" name="or'.$i.'">OR</option>
</select></td></tr>';
if(isset($_POST["ad_field_button"]))
{
$i++;
print '<tr><td>';
print 'Field Name <select name="field_list'.$i.'" size="1"><option selected="selected">Select...</option>
      <option id="Id" name="id'.$i.'">Id</option>
      <option id="Name"  name="name'.$i.'">Name</option>
      <option id="Nick Name" name="nickname'.$i.'">Nick Name</option>
      <option id="Pet" name="pet'.$i.'">Pet</option>
      <option id="Disease" name="disease'.$i.'">Disease Associated</option>
</select></td>';
print ' <td>Operator <select name="operator_list'.$i.'" size="1"><option selected="selected">Select...</option>
      <option id="Equal" name="equal'.$i.'">=</option>
      <option id="Gthan" name="gthan'.$i.'">></option>
      <option id="Lthan"  name="lthan'.$i.'"><</option>
      <option id="Like" name="like'.$i.'">LIKE</option>
</select></td>';
print ' <td>Query <input name="ad_search_query'.$i.'" type="text" /></td>';
print ' <td>Condition <select name="cond_list'.$i.'" size="1"><option selected="selected">Select...</option>
      <option id="And" name="and'.$i.'">AND</option>
      <option id="Or" name="or'.$i.'">OR</option>
</select></td>';
}
print '</table>';
print ' <input name="ad_s_button" type="submit" value="Search" />';
print '</form>';
?>

これは、両方のフォームを操作するための私のコードです。しかし、最初の形式は一度だけ機能します。1 つのフィールドを追加するだけで、合計フィールドが 2 つになります。クリックして 3 番目のフィールドを追加しても機能しません。その問題と解決策は何ですか?

4

3 に答える 3

1

IDを再利用しているため、一度しか機能していないと思います。

IDは一意である必要があります。

于 2013-03-14T10:51:35.323 に答える
1

あなたがしていることは以下の通りです、

最初のフォームが投稿され、次に投稿された値が設定されます ( if(isset($_POST["ad_field_button"])))。

フォームを再度投稿すると、その性質上、古い値はなくなります。

あなたができること。

  1. ボタンを介してページが読み込まれるたびに値を使用sessionおよび保存します。SESSIONclick
  2. mysqlテーブルにデータを追加し、ページの読み込み時にテーブルからデータを取得して表示するために使用します。
  3. client-side language(つまり、jQuery、javascript)を利用できます

セッション例

<?php session_start(); ?>

<form action="" method="post">
    //fields goes here
    <?php
        if(FORM IS POSTED)
        {
            if(isset($_SESSION['counter']) && $_SESSION['counter'] != "")
            {
                $_SESSION['counter'] = $_SESSION['counter'] + 1;
            }
            else
            {
                $_SESSION['counter'] = 1;
            }
        }

        for($i=0;$i <= $_SESSION['counter'];$i++)
        {
            //repeat fields here
        }
    ?>

</form>
于 2013-03-14T10:52:11.947 に答える
1

あなたの解決策は、新しい行リクエストで現在の行数を渡すことです:

<?php
$i=0;
$maxid = isset($_POST['max_id'])?$_POST['max_id']+1:0;
print '<form action="search.php" method="post" ><input type="hidden" name="max_id" value="' . $maxid . '" /><input name="ad_field_button" type="submit" value="Add Field" /></form>';
print '<form action="results1.php" method="post" style="width:550px">';
print '<table border="0">';
for($i=0;$i<=$maxid;$i++){
    print '<tr><td>';
    print 'Field Name <select name="field_list['.$i.']" size="1"><option selected="selected">Select...</option>
          <option id="Id" value="id">Id</option>
          <option id="Name" value="name">Name</option>
          <option id="Nick Name" value="nickname">Nick Name</option>
          <option id="Pet" value="pet">Pet</option>
          <option id="Disease" value="disease">Disease Associated</option>
    </select></td>';
    print '<td>Operator <select name="operator_list['.$i.']" size="1"><option selected="selected">Select...</option>
          <option id="Equal" value="equal">=</option>
          <option id="Gthan" value="gthan">></option>
          <option id="Lthan"  value="lthan"><</option>
          <option id="Like" value="like">LIKE</option>
    </select></td>';
    print ' <td>Query <input name="ad_search_query['.$i.']" type="text" /></td>';
    print ' <td>Condition <select name="cond_list['.$i.']" size="1"><option selected="selected">Select...</option>
          <option id="And" value="and">AND</option>
          <option id="Or" value="or">OR</option>
    </select></td></tr>';
}
print '</table>';
print ' <input name="ad_s_button" type="submit" value="Search" />';
print '</form>';
?>

<option>また、タグはname属性を持つことができないことに注意してください。値があります。要素の値を取得することで、値にアクセスします<select>

于 2013-03-14T11:10:45.267 に答える