1

私は19の異なるドロップダウンリストを持つフォームに取り組んでいます。各リストには、同じ39のオプションがあります。ユーザーが1つ以上のリストでオプションを選択し、他のリストを無視できるようにしたいと思います。理想的には、クエリは、データベースの対応する列で選択されたすべてのオプションに一致するMySQLデータベースからの行を返します。

元:

Phoneme 1: AA <--- choice in a dropdown list of 39 items

Phoneme 2: <--- choice in a dropdown list of 39 items

Phoneme 3: CH <--- choice in a dropdown list of 39 items

Phoneme 4: <--- choice in a dropdown list of 39 items

送信を押すと、データベース内で、最初の位置に音素AAがあり、3番目の位置に音素CHがあるすべての単語を受け取ります。しかし、私は彼らが選択していないオプションを無視する方法を理解できないようです。この例では、音素2と4を空白のままにしました。クエリで、選択したものだけを自動的に検索するようにするにはどうすればよいですか?

よろしくお願いします。私が使用しているコードは以下のとおりです。現在、データベースには130,000を超える単語が含まれており、それぞれに独自の音声構成がありますが、結果は得られません。

<?php

include 'db_connect.php';

//submitted form variable definitions
$phon1=$_POST['phon1'];
$phon2=$_POST['phon2'];
$phon3=$_POST['phon3'];
$phon4=$_POST['phon4'];
$phon5=$_POST['phon5'];
$phon6=$_POST['phon6'];
$phon7=$_POST['phon7'];
$phon8=$_POST['phon8'];
$phon9=$_POST['phon9'];
$phon10=$_POST['phon10'];
$phon11=$_POST['phon11'];
$phon12=$_POST['phon12'];
$phon13=$_POST['phon13'];
$phon14=$_POST['phon14'];
$phon15=$_POST['phon15'];
$phon16=$_POST['phon16'];
$phon17=$_POST['phon17'];
$phon18=$_POST['phon18'];
$phon19=$_POST['phon19'];

//-query  the database table

$sql = '';
if ($phon1!=0) {
    $sql .= ' AND phon1 LIKE ' . $phon1;
}

if ($phon2!=0) {
    $sql .= ' AND phon2 LIKE ' . $phon2;
}

if ($phon3!=0) {
    $sql .= ' AND phon3 LIKE ' . $phon3;
}

if ($phon4!=0) {
    $sql .= ' AND phon4 LIKE ' . $phon4;
}

if ($phon5!=0) {
    $sql .= ' AND phon5 LIKE ' . $phon5;
}

if ($phon6!=0) {
    $sql .= ' AND phon6 LIKE ' . $phon6;
}

if ($phon7!=0) {
    $sql .= ' AND phon7 LIKE ' . $phon7;
}

if ($phon8!=0) {
    $sql .= ' AND phon8 LIKE ' . $phon8;
}

if ($phon9!=0) {
    $sql .= ' AND phon9 LIKE ' . $phon9;
}

if ($phon10!=0) {
    $sql .= ' AND phon10 LIKE ' . $phon10;
}

if ($phon11!=0) {
    $sql .= ' AND phon11 LIKE ' . $phon11;
}

if ($phon12!=0) {
    $sql .= ' AND phon12 LIKE ' . $phon12;
}

if ($phon13!=0) {
    $sql .= ' AND phon13 LIKE ' . $phon13;
}

if ($phon14!=0) {
    $sql .= ' AND phon14 LIKE ' . $phon14;
}

if ($phon15!=0) {
    $sql .= ' AND phon15 LIKE ' . $phon15;
}

if ($phon16!=0) {
    $sql .= ' AND phon16 LIKE ' . $phon16;
}

if ($phon17!=0) {
    $sql .= ' AND phon17 LIKE ' . $phon17;
}

if ($phon18!=0) {
    $sql .= ' AND phon18 LIKE ' . $phon18;
}

if ($phon19!=0) {
    $sql .= ' AND phon19 LIKE ' . $phon19;
}


//-run  the query against the mysql query function 
$result = mysql_query('SELECT * FROM bigdic WHERE 1=1' . $sql . 'LIMIT 0,100');
$num = mysql_numrows($result);

mysql_close();
?>

<b>Search Results:</b>
<table border="1" cellspacing="2" cellpadding="2">
    <tr>
        <th>Word</th>
        <th>Ph1</th>
        <th>Ph2</th>
        <th>Ph3</th>
        <th>Ph4</th>
        <th>Ph5</th>
        <th>Ph6</th>
        <th>Ph7</th>
        <th>Ph8</th>
        <th>Ph9</th>
        <th>Ph10</th>
        <th>Ph11</th>
        <th>Ph12</th>
        <th>Ph13</th>
        <th>Ph14</th>
        <th>Ph15</th>
        <th>Ph16</th>
        <th>Ph17</th>
        <th>Ph18</th>
        <th>Ph19</th>
    </tr>

<?
//setting up the loop
$i=0;
while($i<$num) {

    $word=mysql_result($result,$i,"word");
    $ph1=mysql_result($result,$i,"ph1");
    $ph2=mysql_result($result,$i,"ph2");
    $ph3=mysql_result($result,$i,"ph3");
    $ph4=mysql_result($result,$i,"ph4");
    $ph5=mysql_result($result,$i,"ph5");
    $ph6=mysql_result($result,$i,"ph6");
    $ph7=mysql_result($result,$i,"ph7");
    $ph8=mysql_result($result,$i,"ph8");
    $ph9=mysql_result($result,$i,"ph9");
    $ph10=mysql_result($result,$i,"ph10");
    $ph11=mysql_result($result,$i,"ph11");
    $ph12=mysql_result($result,$i,"ph12");
    $ph13=mysql_result($result,$i,"ph13");
    $ph14=mysql_result($result,$i,"ph14");
    $ph15=mysql_result($result,$i,"ph15");
    $ph16=mysql_result($result,$i,"ph16");
    $ph17=mysql_result($result,$i,"ph17");
    $ph18=mysql_result($result,$i,"ph18");
    $ph19=mysql_result($result,$i,"ph19");
?>

    <tr>
    <td><B><? echo $word; ?></B></td>
    <td><? echo $ph1; ?></td>
    <td><? echo $ph2; ?></td>
    <td><? echo $ph3; ?></td>
    <td><? echo $ph4; ?></td>
    <td><? echo $ph5; ?></td>
    <td><? echo $ph6; ?></td>
    <td><? echo $ph7; ?></td>
    <td><? echo $ph8; ?></td>
    <td><? echo $ph9; ?></td>
    <td><? echo $ph10; ?></td>
    <td><? echo $ph11; ?></td>
    <td><? echo $ph12; ?></td>
    <td><? echo $ph13; ?></td>
    <td><? echo $ph14; ?></td>
    <td><? echo $ph15; ?></td>
    <td><? echo $ph16; ?></td>
    <td><? echo $ph17; ?></td>
    <td><? echo $ph18; ?></td>
    <td><? echo $ph19; ?></td>
    </tr> 

<?
    $i++;
}

echo "</table>";

?>

<b><? echo $num; ?></b> records returned.`

HTMLフォーム:

<form method="post" action="search2.php?go" id="searchform2">
    Phoneme 01: <select name="phon1">
        <option value="0" selected></option>
        <option value="AA">AA</option>
        <option value="AE">AE</option>
        <option value="AH">AH</option>
        <option value="AO">AO</option>
        <option value="AW">AW</option>
        <option value="AY">AY</option>
        <option value="B">B</option>
        <option value="CH">CH</option>
        <option value="D">D</option>
        <option value="DH">DH</option>
        <option value="EH">EH</option>
        <option value="ER">ER</option>
        <option value="EY">EY</option>
        <option value="F">F</option>
        <option value="G">G</option>
        <option value="HH">HH</option>
        <option value="IH">IH</option>
        <option value="IY">IY</option>
        <option value="JH">JH</option>
        <option value="K">K</option>
        <option value="L">L</option>
        <option value="M">M</option>
        <option value="N">N</option>
        <option value="NG">NG</option>
        <option value="OW">OW</option>
        <option value="OY">OY</option>
        <option value="P">P</option>
        <option value="R">R</option>
        <option value="S">S</option>
        <option value="SH">SH</option>
        <option value="T">T</option>
        <option value="TH">TH</option>
        <option value="UH">UH</option>
        <option value="UW">UW</option>
        <option value="V">V</option>
        <option value="W">W</option>
        <option value="Y">Y</option>
        <option value="Z">Z</option>
        <option value="ZH">ZH</option>
    </select><br \>

    Phoneme 02: <select name="phon2">
        <option value="0" selected></option>
        <option value="AA">AA</option>
        <option value="AE">AE</option>
        <option value="AH">AH</option>
        <option value="AO">AO</option>
        <option value="AW">AW</option>
        <option value="AY">AY</option>
        <option value="B">B</option>
        <option value="CH">CH</option>
        <option value="D">D</option>
        <option value="DH">DH</option>
        <option value="EH">EH</option>
        <option value="ER">ER</option>
        <option value="EY">EY</option>
        <option value="F">F</option>
        <option value="G">G</option>
        <option value="HH">HH</option>
        <option value="IH">IH</option>
        <option value="IY">IY</option>
        <option value="JH">JH</option>
        <option value="K">K</option>
        <option value="L">L</option>
        <option value="M">M</option>
        <option value="N">N</option>
        <option value="NG">NG</option>
        <option value="OW">OW</option>
        <option value="OY">OY</option>
        <option value="P">P</option>
        <option value="R">R</option>
        <option value="S">S</option>
        <option value="SH">SH</option>
        <option value="T">T</option>
        <option value="TH">TH</option>
        <option value="UH">UH</option>
        <option value="UW">UW</option>
        <option value="V">V</option>
        <option value="W">W</option>
        <option value="Y">Y</option>
        <option value="Z">Z</option>
        <option value="ZH">ZH</option>
    </select><br \>

    Phoneme 03: <select name="phon3">
        <option value="0" selected></option>
        <option value="AA">AA</option>
        <option value="AE">AE</option>
        <option value="AH">AH</option>
        <option value="AO">AO</option>
        <option value="AW">AW</option>
        <option value="AY">AY</option>
        <option value="B">B</option>
        <option value="CH">CH</option>
        <option value="D">D</option>
        <option value="DH">DH</option>
        <option value="EH">EH</option>
        <option value="ER">ER</option>
        <option value="EY">EY</option>
        <option value="F">F</option>
        <option value="G">G</option>
        <option value="HH">HH</option>
        <option value="IH">IH</option>
        <option value="IY">IY</option>
        <option value="JH">JH</option>
        <option value="K">K</option>
        <option value="L">L</option>
        <option value="M">M</option>
        <option value="N">N</option>
        <option value="NG">NG</option>
        <option value="OW">OW</option>
        <option value="OY">OY</option>
        <option value="P">P</option>
        <option value="R">R</option>
        <option value="S">S</option>
        <option value="SH">SH</option>
        <option value="T">T</option>
        <option value="TH">TH</option>
        <option value="UH">UH</option>
        <option value="UW">UW</option>
        <option value="V">V</option>
        <option value="W">W</option>
        <option value="Y">Y</option>
        <option value="Z">Z</option>
        <option value="ZH">ZH</option>
    </select><br \>    

    <input type="submit" name="submit" value="Search">
</form>
4

1 に答える 1

2

問題は、ドロップダウンのデフォルト値と、投稿された配列の値のテストに起因します。$_POST配列の各エントリを個別にテストする代わりに、ループを使用してコードを大幅に短縮することもできます。

define('PHONEME_COUNT'、19);

$sql = '';
for ($i = 0; $i < PHONEME_COUNT; $i++){
     $opt = 'phon'.$i;
    if (isset($_POST[$opt]) && $_POST[$opt]!='--') {
        $sql .= ' AND `'.$opt.'` LIKE ' .mysql_real_escape_string($_POST[$opt]);
}

同様に、htmlの部分で、ドロップダウンタグのデフォルト値を変更し、ループを使用してビルドします。

 <?php for($i = 0; $i < PHONEME_COUNT; $I++): ?>
Phoneme <?php echo $i; ?> : <select name="phon<?php echo $i;?>">
    <option value="--" selected></option>
   <!-- options -->
   </select>


 <?php endfor; ?>
于 2013-03-24T11:31:59.660 に答える