0

我正在尝试使用 $PHP_SELF 从表单中收集值并在同一页面上返回结果。该页面本身就是一个 PHP 页面,如果这很重要的话。

我似乎看不到我明显有的错误。我正在使用的错误处理程序告诉我错误在第 22 行(带有 $searchTerm = trim($name); 的行),但我怀疑它可能在 php 命令的下方,尽管我已经尝试过注释掉东西和剥离东西和减少东西等的各种组合,我从来没有得到页面,在初始加载时,没有给我第 22 行的错误,这是查询部分的开始这页纸。如果我将表单放在查询中的所有 php 之前,我可以看到表单,但我仍然有错误。如果我把表格放在查询下面,我看不到表格。

奇怪的部分是表格完美地工作。而且,点击提交按钮后,我没有显示错误,只有正确的结果。我想错误可能在于我如何封闭(或不封闭)它的查询处理部分,但在这一点上,我看不到它。我把这个网站上的几个问题和我通过谷歌搜索找到的教程放在一起。所以我对命令是正确的感到很舒服,我只是不明白为什么我会显示错误。

这是代码的最新版本,它与我所做的其他尝试完全相同的错误。PHP 的整个部分,从 $searchterm 到 mysqli 是否应该用括号括起来?我正在使用对初始 if 语句上方的 conn 文件的调用。这是两个功能完全正确的页面的组合 - 我在表单操作中使用了另一个页面的名称 search.php。不知何故,将它们结合起来会让事情变得非常、非常错误。

if(isset($_POST['submit'])) 
{ 
$name = $_POST['name'];
echo "User has entered this name : <b> $name </b>"; 
}

//capture search term and remove spaces at both ends, if there are any
$searchTerm = trim($name);

//connect to database
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die('Error connecting to MySQL server.');

//MYSQL search statement
$query = "SELECT CompanyName FROM Companies WHERE CompanyName LIKE '%$searchTerm%'";

$results = mysqli_query($dbc, $query);

//Check whether there were matching records in the table by counting the number of results returned
if(mysqli_num_rows($results) >= 1) 

    while($row = mysqli_fetch_array($results))
    {
        echo '<div class="query">' . $row['CompanyName'] . '</div>';
    } else
        echo "No match found for " . $searchTerm;

 mysqli_close($dbc); 
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
   <input type="text" name="name"><br>
   <input type="submit" name="submit" value="Submit Form"><br>
</form>
4

1 回答 1

0

该错误很可能是由于您if(isset($_POST['submit']))过早关闭而引起的。$name仅在表单 post 上设置$name = $_POST['name'];,因此在初始页面加载时,调用时未设置$searchTerm = trim($name);。尝试将右括号}if(isset($_POST['submit']))移到 after ,mysqli_close($dbc);这样您的所有 php 代码在表单发布之前不会运行。

if(isset($_POST['submit'])) 
{ 
$name = $_POST['name'];
echo "User has entered this name : <b> $name </b>"; 
// remove closing bracket from here

//capture search term and remove spaces at both ends, if there are any
$searchTerm = trim($name);

//connect to database
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die('Error connecting to MySQL server.');

//MYSQL search statement
$searchTerm = mysqli_real_escape_string($searchTerm); // Escape user data to prevent SQL Injection
$query = "SELECT CompanyName FROM Companies WHERE CompanyName LIKE '%$searchTerm%'";

$results = mysqli_query($dbc, $query);

//Check whether there were matching records in the table by counting the number of results returned
if(mysqli_num_rows($results) >= 1) 

    while($row = mysqli_fetch_array($results))
    {
        echo '<div class="query">' . $row['CompanyName'] . '</div>';
    } else
        echo "No match found for " . $searchTerm;

 mysqli_close($dbc); 
}  // move closing bracket to here
?>
于 2013-04-07T06:13:34.917 回答