在PHP中创建搜索表单

13

我当前正在尝试完成一个项目,规格要求使用搜索表单来搜索包装数据库。该数据库有许多变量,包括大小、名称、类型和肉类。我需要创建一个搜索表单,用户可以使用多种不同的搜索方式(例如搜索长度为50厘米的盖托)。

我已经花了一整天的时间尝试创建一些PHP代码,以在我创建的测试数据库中搜索信息。我遇到了许多不同的错误,包括mysql_fetch_array错误、布尔错误,现在最新的错误是我的表似乎不存在。虽然我可以输入数据(在html和php页面上可以输入数据),但我不知道是什么原因导致这种情况,我已经重新开始过几次了。

有人能给我一些想法或提示,告诉我目前应该做些什么吗?这只是我在正式网站SQL数据库之前进行的一些小测试。

数据库创建:

 <body>
  <?php
     $con = mysql_connect("localhost", "root", "");
      if (!$con)
     {
      die('Could not connect: ' . mysql_error());
     }
      if (mysql_query("CREATE DATABASE db_test", $con))
     {
  echo "Database created";
     }
      else
    {
  echo "Error creating database: " . mysql_error();
    }


  mysql_select_db("db_test", $con);
  $sql = "CREATE TABLE Liam
   ( 
  Code varchar (30),
  Description varchar (30),
  Category varchar (30),
  CutSize varchar (30),
   )";

 mysql_query($sql, $con);
     mysql_close($con);
 ?> 
   </body>

HTML搜索表单页面:

<body>

      <form action="form.php" method="post">
        Search: <input type="text" name="term" /><br />
      <input type="submit" name="submit" value="Submit" />
      </form>

</body>

我正在使用的 PHP 代码尝试从数据库中获取信息 (我已经重写了几次这段代码,这段代码还会显示“table.liam不存在”)

  <body>
   <?php
 $con = mysql_connect ("localhost", "root", "");
 mysql_select_db ("db_test", $con);

  if (!$con)
    { 
    die ("Could not connect: " . mysql_error());
    } 
    $sql = mysql_query("SELECT * FROM Liam WHERE Description LIKE '%term%'") or die
        (mysql_error());

       while ($row = mysql_fetch_array($sql)){
    echo 'Primary key: ' .$row['PRIMARYKEY'];
    echo '<br /> Code: ' .$row['Code'];
    echo '<br /> Description: '.$row['Description'];
    echo '<br /> Category: '.$row['Category'];
    echo '<br /> Cut Size: '.$row['CutSize']; 
  }
 
  mysql_close($con)
   ?>
     </body>

3
你没有理解PHP中的术语。使用 $term = $_POST["term"] 来获取一个变量。 - amitchhajer
谢谢,但我仍然收到“table.liam不存在”的错误 :( - LiamHorizon
1
哎呀,我对你的困境感同身受,但是以目前这个问题的形式,在Stack Overflow上获得好的答案会很困难。原因是它不是一个问题,而是一堆问题。为了得到Stack Overflow最擅长提供的好用的帮助,你需要将问题分解成离散的部分(例如,“为什么我会收到表不存在的错误?”),并提出这些问题。 - pjmorse
非常感谢您的建议。很抱歉我只是在Stack Overflow上阅读或回答问题,从未实际提出过问题。我会牢记这一点,感谢。 - LiamHorizon
通常情况下,当您打算在服务器端“写入”数据(INSERT/UPDATE/DELETE)时,应使用 $_POST。当您仅打算在服务器端“读取”数据(SELECT/search)时,应使用 $_GET。(当然,我是指您应该根据这个建议调整表单的 method 属性) - mickmackusa
2个回答

15

试一下这个,让我知道会发生什么。

表单:

<form action="form.php" method="post"> 
Search: <input type="text" name="term" /><br /> 
<input type="submit" value="Submit" /> 
</form> 

Form.php:

$term = mysql_real_escape_string($_REQUEST['term']);    

$sql = "SELECT * FROM liam WHERE Description LIKE '%".$term."%'";
$r_query = mysql_query($sql);

while ($row = mysql_fetch_array($r_query)){ 
echo 'Primary key: ' .$row['PRIMARYKEY']; 
echo '<br /> Code: ' .$row['Code']; 
echo '<br /> Description: '.$row['Description']; 
echo '<br /> Category: '.$row['Category']; 
echo '<br /> Cut Size: '.$row['CutSize'];  
} 

编辑:我进一步清理了它。

最终剪辑(我的测试文件):

<?php
$db_hostname = 'localhost';
$db_username = 'demo';
$db_password = 'demo';
$db_database = 'demo';

// Database Connection String
$con = mysql_connect($db_hostname,$db_username,$db_password);
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db($db_database, $con);
?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
<form action="" method="post">  
Search: <input type="text" name="term" /><br />  
<input type="submit" value="Submit" />  
</form>  
<?php
if (!empty($_REQUEST['term'])) {

$term = mysql_real_escape_string($_REQUEST['term']);     

$sql = "SELECT * FROM liam WHERE Description LIKE '%".$term."%'"; 
$r_query = mysql_query($sql); 

while ($row = mysql_fetch_array($r_query)){  
echo 'Primary key: ' .$row['PRIMARYKEY'];  
echo '<br /> Code: ' .$row['Code'];  
echo '<br /> Description: '.$row['Description'];  
echo '<br /> Category: '.$row['Category'];  
echo '<br /> Cut Size: '.$row['CutSize'];   
}  

}
?>
    </body>
</html>

谢谢你的帮助!但是当我提交搜索时,仍然会出现这个错误:"Table 'db_test.liam' doesn't exist" :( - LiamHorizon
尝试一下我的新编辑。请记住,数据库、表和列名区分大小写。 - rackemup420
1
这是一个为什么这是一个糟糕问题的例子:很难确定一个好答案是什么。@rackemup420解决了一个问题,但揭示了另一个问题。它像老鼠窝一样混乱不堪。分解它。 - pjmorse
我现在可以通过所有错误,我已经检查了PHPMyAdmin并且表格存在,而且我没有通过我创建的表单输入数据,而是直接通过PHPMyAdmin手动输入数据。但是现在当我搜索时,它只显示NULL。 - LiamHorizon
我该如何解决术语问题? - LiamHorizon
显示剩余11条评论

3

你之所以会收到“table liam does not exist”的错误提示,是因为表名是Liam,而不是liam。MySQL表名区分大小写。


谢谢,我之前已经注意到了,但是没有任何改变。 - LiamHorizon
那么也许表确实不存在!请检查phpMyAdmin,我看到你正在使用XAMPP。 - Ghassan Elias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接