php搜索功能不起作用

Posted

技术标签:

【中文标题】php搜索功能不起作用【英文标题】:php search function does not work 【发布时间】:2017-03-20 12:06:25 【问题描述】:

我正在尝试执行“按名称搜索用户按钮”来搜索用户的数据库,但显示“结果错误”无法获取用户详细信息。不知道哪个部位有问题。请帮我。每一个帮助将不胜感激。这是我的代码。

ma​​nageruser.php

<?php 
include("include/config.php");

   $name = "";
   $username = "";
   $password = "";
   $ic = "";
   $contact = "";
   $email = "";
   $nationality = "";
   $program = "";
   $firstintake = "";

   function getPosts()
   
       $posts = array();
       $posts[0] = $_POST['name'];
       $posts[1] = $_POST['username'];
       $posts[2] = $_POST['password'];
       $posts[3] = $_POST['ic'];
       $posts[4] = $_POST['contact'];
       $posts[5] = $_POST['email'];
       $posts[6] = $_POST['nationality'];
       $posts[7] = $_POST['program'];
       $posts[8] = $_POST['firstintake'];
       return $posts;
   

// Search
   if(isset($_POST['search']))
   
       $data = getPosts();

       $search_Query = "SELECT * FROM user WHERE u_name = $data[0]";

       $search_Result = mysqli_query($link, $search_Query);

       if($search_Result)
       
          if(mysqli_num_rows($search_Result))
          
            while($row = mysqli_fetch_array($search_Result))
            
                $name = $row['u_name'];
                $username = $row['u_unm'];
                $password = $row['u_pwd'];
                $ic = $row['u_ic'];
                $contact = $row['u_contact'];
                $email = $row['u_email'];
                $nationality = $row['u_national'];
                $program = $row['u_program'];
                $firstintake = $row['u_fintake'];
            
          
          else
          
            echo "No Data For This Name";
          
       
       else
       
        echo "Result Error";
       
   

?>

<fieldset>
<legend>Manage User</legend>
<form name="ManForm" method="post" action="manageuser.php">
<table>
    <tr>
        <td>Name:</td>
        <td><input id="name" name="name" type="text" class="input" pattern="[A-Z\s]+" 
        title="Please enter capital letters" value="<?php echo $name; ?>">
        <span>(Full name) *must capital letters</span></td>
    </tr>

    <tr>
        <td>Username:</td>
        <td><input id="username" name="username" type="text" class="input" value="<?php echo $username; ?>"></td>
    </tr>

    <tr>
        <td>Password:</td>
        <td><input id="password" name="password" type="password" class="input" value="<?php echo $password; ?>"></td>
    </tr>

    <tr>
        <td>Identity card /Passport number:</td>
        <td><input id="ic" name="ic" type="text" class="input" value="<?php echo $ic; ?>"></td>
    </tr>

    <tr>
        <td>Contact number:</td>
        <td><input id="contact" name="contact" type="text" class="input" value="<?php echo $contact; ?>"></td>
    </tr>

    <tr>
        <td>Email:</td>
        <td><input id="email" name="email" type="text" class="input" value="<?php echo $email; ?>"></td>
    </tr>

    <tr>
        <td>Nationality:</td>
        <td><input id="nationality" name="nationality" type="text" class="input" value="<?php echo $nationality; ?>"></td>
    </tr>

    <tr>
        <td>Program:</td>
        <td><input id="program" name="program" type="text" class="input" value="<?php echo $program; ?>"></td>
    </tr>

    <tr>
        <td>First intake:</td>
        <td><input id="firstintake" name="firstintake" type="text" class="input" value="<?php echo $firstintake; ?>"></td>
    </tr>
</table>

    <div>
        <input type="submit" name="search" value="  Search User By Name">
        <input type="submit" name="update" value="  Update User Details">
        <input type="submit" name="delete" value="  Delete User ">
    </div>

</form>
</fieldset>

config.php

<?php

    $link= mysqli_connect("localhost","root","","course_registration_system");

?>

【问题讨论】:

显然您的查询失败了。这就是为什么它进入结果错误的else块。 尝试u_name = '$data[1]' 而不是u_name = $data[0] 您的字符串周围没有引号,因此您的查询失败。 您不知道哪里出了问题,因为您没有检查代码中的错误。永远不要假设代码总是能完美运行。使用mysqli_error() 从数据库中获取详细的错误消息。 你也可以echo $search_Query看看你得到了什么然后粘贴到你的mysql fiddle中。 【参考方案1】:

这里的问题是您以错误的方式运行查询。 要运行您的查询,您应该使用prepared statement

了解仅在变量周围添加引号是不够的非常重要,并且最终会导致无数问题,从语法错误到 SQL 注入。另一方面,由于准备好的语句的本质,它是一种防弹解决方案,它不可能通过数据变量引入任何问题。

因此,对于您运行的每个查询,如果至少要使用一个变量,则必须用占位符替换它,然后准备查询,然后执行它,分别传递变量。

首先,您必须更改查询,添加占位符来代替变量。说你的查询会变成这样

"SELECT * FROM user WHERE u_name = ?"

然后你必须准备它,绑定变量并执行

所以你应该这样做

$stmt = $link->prepare("SELECT * FROM user WHERE u_name = ?");
$stmt->bind_param("s", $data[0]);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_array())

【讨论】:

【参考方案2】:

在查询中使用引号括住您的搜索字符串或试试这个 -

$search_Query = "SELECT * FROM user WHERE u_name = '" .$data[0]."'";

【讨论】:

为什么这会“正常工作”?代码转储并不能提供好的答案。您应该解释如何以及为什么这可以解决他们的问题。你应该阅读,“How do I write a good answer?"

以上是关于php搜索功能不起作用的主要内容,如果未能解决你的问题,请参考以下文章

laravel 中的搜索功能不起作用

PHP、MySQL 验证故障和搜索不起作用?

使用动态数据时,搜索和分页功能在 DataTable 中不起作用

完整功能中的ajax调用后刷新jquery mobile listview不起作用

为啥使用 jQuery 和 PHP 的多项选择自动完成功能不起作用?

为啥php邮件功能在xampp中不起作用