【问题标题】:Seach.php is not working and not showing any resultsSearch.php 不工作,不显示任何结果
【发布时间】:2012-04-25 23:07:15
【问题描述】:

我试图弄清楚如何使我的 search.php 脚本与 mySQL 一起工作。我无法显示信息。不确定问题出在哪里。

第 1 页:

<form action="search_result.php" method="GET">
    <input type="text" name="reg" />
    <input type="submit" value="Search" />
</form>

第 2 页:

<?php
$host="localhost";
$username="XXXXXXXXXXX";
$password="XXXXXXXXXXX";
$db_name="XXXXXXXXXXXX";
$tbl_name="reg_add";
mysql_connect("$host", "$username", "$password") or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


$record = $_POST['record']; // if coming from e.g. a form
$result=mysql_query(" SELECT * FROM reg_add WHERE reg='" . mysql_real_escape_string($record) . "'");


$row = mysql_fetch_assoc($result);
$first_name = $row['first_name'];
$last_name = $row['last_name'];
$reg = $row['reg'];
?>

<input  name="reg" value="<? echo "$record" ?>">

<input  name="first_name" value="<? echo "$first_name" ?>">

<input  name="last_name" value="<? echo "$last_name" ?>">

【问题讨论】:

  • $record 在查询中使用时似乎没有设置。检查$result,如果它的错误调用mysql_error(),看看发生了什么错误。
  • 确保所有 XXXXXXXXXXXX 与实际值匹配
  • 我发现的第一个问题是您正在使用(即将弃用)mysql_* functions。使用 mysqli_* 或 PDO。

标签: php mysql forms search input


【解决方案1】:

你的表单是 GET 方法,在你的 PHP 中你使用这个:

$record = $_POST['record']; // if coming from e.g. a form

如果您的表单具有 GET 方法,您将如何获取 POST['record']?

我猜你应该或将你的表单更改为:

method="POST" 

或将你的 $record 在 php 中更改为:

$record = $_GET['record'];

试试这个版本:

你形成:

    <form action="search_result.php" method="POST">
    <input type="text" name="reg" id="reg" />
    <input type="submit" name="Submit" id="Submit" value="Search" />
</form>

搜索结果.php:

<?php

$host       ="localhost";
$username   ="XXXXXXXXXXX";
$password   ="XXXXXXXXXXX";
$db_name    ="XXXXXXXXXXXX";
$tbl_name   ="reg_add";

/* Connect to MySQL database */
mysql_connect("$host", "$username", "$password") or die("Error connecting to database");
mysql_select_db("$db_name")or die("Error selecting database");

$error = '';

if (isset($_POST['Submit'])) {


    if (!empty($_POST['reg'])) {

        $record = $_POST['reg']; // if coming from e.g. a form

        $query = mysql_query("SELECT * FROM reg_add WHERE reg='" . mysql_real_escape_string($record) . "'");
        $result = mysql_num_rows($query);

        if ($result != 0) {

            $row = mysql_fetch_array($query);

            $first_name = $row['first_name'];
            $last_name = $row['last_name'];
            $reg = $row['reg'];

        } else {

            $error = 'No result have been found!';

        }

    } else {

        $error = 'You have not entered the search field, <a href="javascript:history.back(1)">Go back</a>.';

    }
}

if (!empty($error)) { echo $error; } 
?>


<input  name="reg" value="<? echo $record; ?>">

<input  name="first_name" value="<? echo $first_name; ?>">

<input  name="last_name" value="<? echo $last_name; ?>">

【讨论】:

    【解决方案2】:
    mysql_connect("$host", "$username", "$password") 
    

    不是你的问题,但不需要在变量周围加引号:

    mysql_connect($host, $username, $password);
    mysql_select_db($db_name);
    

    你应该在某处设置变量$record

    $record = $_POST['record']; // if coming from e.g. a form
    $result=mysql_query(" SELECT * FROM reg_add WHERE reg='" . mysql_real_escape_string($record) . "'");
    

    这是错误的:

    $first_name=mysql_result($result,"first_name");
    $last_name=mysql_result($result,"last_name");
    $reg=mysql_result($result,"reg"); 
    

    应该是:

    $row = mysql_fetch_assoc($result);
    $first_name = $row['first_name'];
    $last_name = $row['last_name'];
    $reg = $row['reg'];
    

    另外:你不应该再使用mysql_* functions。使用 mysqli_* 或 PDO。

    请记住,如果出现问题,您可以查看mysql_error() 以查看执行查询时是否有任何错误。

    【讨论】:

    • 感谢您的帮助。我更新了上面的脚本,但仍然找不到结果。
    • @Paul 顺便说一句,我确实同意 PDO 在任何情况下都是更好的 API 选择,但在我看来,宣称准备好的语句是所有逃避问题的解决方案是错误的.特别是考虑到默认情况下 PDO 使用转义函数模拟准备好的语句,该函数直到最近才知道字符集(我认为 5.3.6 中添加了字符集支持,您必须在 DSN 中明确指定它)。另一方面,real_escape_string 字符集感知,如果你设置正确的话。
    • 我用您的更正更新了我的问题。我仍然无法得到结果。我觉得我很接近。
    【解决方案3】:

    mysql_result() 的语法错误。根据manual,应该是

    字符串 mysql_result ( 资源 $result , int $row [, mixed $field = 0 ] )

    所以正确的使用方式是这样的

    mysql_result($result, 1, "first_name");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      相关资源
      最近更新 更多