为什么我的搜索php代码无法正常工作?

时间:2017-06-26 21:04:32

标签: php

我遇到了一个问题,我的PHP代码似乎不起作用,我一遍又一遍地看着它,我无法弄明白。我正在开展一个项目,要求我允许我的产品(网站)的潜在用户通过类型搜索活动,例如喜剧或现场乐队等。这应该允许用户查看他们输入的所有类型的事件都会出现。

到目前为止,我已创建此代码:

<?php

//$output= NULL;

if(isset($_POST['submit'])){
    //connect db
    require_once('connect.php');
    $search = $_POST['search'];

    //query db
    $result = $mysqli->query("SELECT * FROM resit1617_events WHERE type = 
'$search'");

if($result->num_rows > 0){
    while($rows = $result->fetch_assoc())
    {
        $event = $rows['name'];
        $type = $rows['type'];
        $description = $rows['description'];
        $day = $rows['day'];
        $month = $rows['month'];
        $year = $rows['year'];
        $recommendations = $rows['recommendations'];
        $age = $rows['min_age'];

        $output ="Event: $event, Type: $type, Date: $day/$month/$year, Minimum Age: $age, Recommendations: $recommendations, Description: 
$description<br />";
        }
    }else{
        $output = "No Results";
    }
}
?>

然后我将包含php的HTML代码用于回显输出值,但代码似乎不起作用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>The Welders Arms</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
    <div id="topbar">
        <p><img src="img/logo.png" alt="logo"></p>
    </div>
    <div id="wrapper">
        <form method="POST" action="search.php">
            <label id="searchheading">Search Events in The Welders Arms</label>
            <br>
            <input type="text" placeholder="Search by type of event e.g. live band, comedy etc.." id="type" name="search">
            <input type="submit" id="searchbutton" value="Search">
            <br>
        </form>
<?php echo $output; ?>
    </div>
</body>

</html>

如果有人知道为什么它不起作用的解决方案,请告诉我,因为这会阻碍我继续我的项目。

谢谢!

PS。所有代码都在一个名为search.php

的文件中

2 个答案:

答案 0 :(得分:1)

一个简单的解决方案是改变你的初始if:

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

为:

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['search'])){

哪个测试表单是否使用正确的方法提交,还测试搜索字段是否存在。

您还应该考虑使用prepared statements或至少手动转义字符串来保护自己免受mysql注入攻击:

$search = $mysqli->real_escape_string($_POST['search']);

答案 1 :(得分:0)

您没有像name="submit"这样的名为提交的属性,因为在您的php脚本中,您设置了isset($_POST['submit']来抓住您尝试提交的帖子。