【问题标题】:Why isn't this form returning results?为什么此表单不返回结果?
【发布时间】:2013-10-07 14:06:10
【问题描述】:

我刚刚开始尝试学习 PHP 和 MYSQL,并且一直在学习一些创建网页搜索引擎的教程,但是遇到了一个问题,即当我提交表单时没有返回结果,我不知道到问题所在或尝试解决问题的位置,所以它认为值得一试将我的问题发布在这里。希望有人能帮助我,在此先感谢。

PHP

<?php   

    mysql_connect("localhost","root","123")or die("Could not connect to Db");
    mysql_select_db("members") or die("Could not find db");

if(isset($_POST['submit'])){
    $searchq = $_POST['submit'];
    $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
    $query = mysql_query("Select * FROM memberlist WHERE Fname LIKE '%$searchq%' OR Lname LIKE '%$searchq%'  ") or die(mysql_error());
    $count = mysql_num_rows($query);


 if($count == 0){
    $output = "No results were found, sorry.";
}

else{
    while($row = mysql_fetch_array($query)){
        $firstname = $row['Fname'];
        $lastname = $row['Lname'];
        $output .= "<div>".$firstname." ".$firstname."</div>";
    }
}
}

?>

HTML

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Search</title>
</head>
<body>

<form action="index.php" method="post">
<input type="text" name="searchfname" placeholder="Enter first name">
<input type="text" name="searchlname" placeholder="Enter last name">
<input type="submit" name="submit" value="Submit">
</form>

<?php print($output);?>

</body>
</html>

【问题讨论】:

  • (1) mysql_* 函数已弃用,不应使用。查找使用更新的 PDO 或 mysqli 函数的教程,否则您将迷失在 PHP 的未来版本中。 PDO 和 mysqli 也将允许您使用参数,这将防止 SQL 注入。 (2) 它在哪里断裂?它是说“没有找到结果”还是只输出你的其他结果?如果它说没有找到结果,请尝试回显您的查询并将其直接放入 mysql 客户端。
  • @Jack:以上列表是在同一个文件中还是在不同的文件中?

标签: php mysql database html forms


【解决方案1】:

您可以使用$_POST['submit'] 来检查表单是否已提交,但它并不包含所有表单值。 您可以通过各自的名称访问单独的表单值。

所以使用$_POST['searchfname'] 作为第一个文本框中的值,使用$_POST['searchlname'] 作为第二个文本框中的值。

您的代码应该更像这样;

$searchqf = $_POST['searchfname'];
$searchql = $_POST['searchlname'];
$searchqfreplace = preg_replace("#[^0-9a-z]#i","",$searchqf);
$searchqlreplace = preg_replace("#[^0-9a-z]#i","",$searchql);
$query = mysql_query("Select * FROM memberlist WHERE Fname LIKE '%$searchqf%' OR Lname LIKE '%$searchql%'  ") or die(mysql_error());
$count = mysql_num_rows($query);

请注意,这种组合查询的方式对于SQL injection 来说非常不安全且易受攻击。

您还需要一种解决问题的方法。您可能想查看echoprint_r

【讨论】:

  • 感谢您的出色回答,但似乎我还有更多问题。 pastebin.com/UadVCPEY
  • 检查您的大写字母。您在代码中使用 Fname,而真正的列名是 FName。所以把它改成$row['FName']。这也是非常基本的 PHP/MySQL 知识。您可能会从实验中学到更多,并遵循一些好的教程。
  • 没问题,如果对您有帮助,请不要忘记关闭此问题并将其中一个答案标记为您的问题的解决方案!
  • 再次感谢,但在我关闭 q 之前,你知道为什么我需要在查询数据库之前输入这两个字段吗?例如,如果我输入“john”,没有任何反应,但如果我输入“john wilkinson” - 只有 john wilkinson” 会出现 - 应该如此。
  • 因为如果你只输入一个,它可能会产生一个无效的查询。您应该检查$_POST['searchlname'] 是否包含一个值,以及它是否包含在您的查询中。否则,将查询的 OR 部分全部省略。
【解决方案2】:

您已将 $searchq 变量分配给您的提交按钮。 改变这一行

$searchq = $_POST['submit'];

$searchq = $_POST['searchfname'];

$searchq = $_POST['searchlname'];

或两者兼有:

$searchq = $_POST['searchfname'].$_POST['searchlname'];

【讨论】:

    【解决方案3】:

    你不能使用 $searchq = $_POST['submit'];因为没有发布名称为 submit 的值

    您必须使用以下任何一种......

    $searchq = $_POST['searchfname'];

    $searchq = $_POST['searchlname'];

    【讨论】:

      【解决方案4】:

      在您的代码中,您正在搜索“提交”值而不是表单中的值。

      $searchq = $_POST['submit']; 替换为:

      $searchq = $_POST['searchfname'];
      $searchq2 = $_POST['searchlname'];
      

      和查询:

      Select * FROM memberlist WHERE Fname LIKE '%$searchq%' OR Lname LIKE '%$searchq2%'   
      

      【讨论】:

        【解决方案5】:

        首先,

        使用searchfnamesearchlname 或两者搜索。

        其次,这样修改 在$count = mysql_num_rows($query);之后,

        if($count == 0){
            $output = "No results were found, sorry.";
        }
        else{
            $output = '';
            while($row = mysql_fetch_array($query)){
                $firstname = $row['Fname'];
                $lastname = $row['Lname'];
                $output .= "<div>".$firstname." ".$firstname."</div>";
            }
        

        第三,在Second page(where database is fetched) 中使用print $output 而不是在First page(Page with FORM) 中。

        如果要在首页显示结果,请使用 jQuery/Ajax 函数

        【讨论】:

        • 在同一页面上获取数据库。
        猜你喜欢
        • 2019-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        相关资源
        最近更新 更多