【问题标题】:Mysql select query using value from a php dropdown使用 php 下拉列表中的值的 Mysql 选择查询
【发布时间】:2014-09-11 16:08:58
【问题描述】:

我开始使用 php 进行编程,但我有一点疑问。

我正在尝试使用下拉列表中的值搜索数据库。

问题是查询总是使用下拉列表的最后一个值。

有人可以帮我找出错误吗?

为什么研究where子句总是下拉的最后一个值?


代码

<tr><td>Technical:</td><td>

 <select>
    <?php
    $query = "SELECT idTechnical, name FROM technicals";
$result2 = mysql_query($query);
$options=""; 
while($row=mysql_fetch_array($result2)){   
    $id=$row["idTechnical"];   
    $thing=$row["name"]; 
     echo "<OPTION VALUE=$id>$thing</option>";
}
    ?>         
</select>  

<?php
 if (isset($_POST['Next'])) { 


if($_REQUEST['Next']=='Search') {
    {
        $sql="select idTask, descTask, deadline, idTechnical from tasks where idTechnical  = '$id' order by deadline desc";
    $result=mysql_query($sql);
    $count=mysql_num_rows($result);
    } 
}
 }
?>

我从下拉列表中选择任何值,但只使用子句 where :S 中的最后一个值

【问题讨论】:

  • 你的
  • 旁注:你应该引用你的变量echo "&lt;OPTION VALUE=\"$id\"&gt;$thing&lt;/option&gt;";你可能会得到意想不到的结果。
  • echo '&lt;option VALUE="'.$id.'"&gt;'.$thing.'&lt;/option&gt;';
  • $id 无论如何都未在您的搜索脚本中定义。
  • @LauriOrgla 感谢您的回复。你的建议对我有用。

标签: php mysql


【解决方案1】:

这是我要为表单做的事情(假设你有一个正确的表单标签,它的 action 属性指向正确的 PHP 脚本):

<tr>
<td>Technical:</td>
<td>
    <select name="technical">
        <?php
            $query = "SELECT idTechnical, name FROM technicals";
            $result2 = mysql_query($query);
            $options="";
            while($row=mysql_fetch_array($result2)){
                echo '<option value='.$row["idTechnical"].'>
                    '.$row["name"].'
                    </option>';
            }
        ?>
    </select>
</td>

然后在PHP脚本中:

$sql='SELECT
    idTask,
    descTask,
    deadline,
    idTechnical
    FROM tasks
    WHERE idTechnical  = '.$_REQUEST['technical'].'
    ORDER BY deadline DESC';
$result=mysql_query($sql);
$count=mysql_num_rows($result);

这应该为你做。

但请注意:上面的脚本存在安全风险,因为它为 SQL 注入敞开了大门

更好的方法是使用 PDO Prepared 语句,如下所示:

$db = new PDO('mysql:host=CHANGE_THIS_TO_YOUR_HOST_NAME;
    dbname=CHANGE_THIS_TO_YOUR_DATABASE',
    'CHANGE_THIS_TO_YOUR_USERNAME',
    'CHANGE_THIS_TO_YOUR_PASSWORD');

$sql='SELECT
    idTask,
    descTask,
    deadline,
    idTechnical
    FROM tasks
    WHERE idTechnical  = :id
    ORDER BY deadline DESC';
$query = $db->prepare($sql);
$query->bindValue(':id', $_REQUEST['technical']);
$query->execute();
$count = $query->rowCount();

如果您刚开始使用 PHP,我强烈建议您花一些时间来熟悉 PDO 数据库查询。祝你好运,编码愉快!

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多