2016-02-24 29 views
0

我正在制作一个简单的网络应用程序,其中一个数据库表中有两列,ID和用户。无法使用表单输入上的PHP _POST从MySQL数据库中检索学生信息

在一个文件中,我有一个输入名称的表单。然后,我希望使用_POST从表单接收输入,然后查询数据库以检索该名称(学生)的信息,并与来自其他表的数据结合。

问题是我总是从数据库中得到零结果。但是,如果我修改代码以将学生的ID标记为_POST,那么我会从数据库中获得结果。所以,我不明白为什么它不起作用,如果我使用表单输入名称而不是ID。

这里是我的形式:

echo '<form name="postStudent" action="studentListCourses.php" method="post">'; 

    echo 'Name:<br> 
     <input type="text" name="student">'; 

    echo '<input type="submit" value="save"/>'; 

echo '</form>'; 

,然后在studentListCourses文件我用:

$student = $_POST['student']; 
    // $student = (string)$student; 
    echo $student; 
    echo '<br>'; 

    // Query DB for selected student 
    $Tusers_SQLselect = "SELECT * FROM users WHERE users.User='".$student."';"; 

但我总是从数据库中获取结果为零。如果我在查询更改最后一个子句:

WHERE users.ID='".$student."';"; 

然后我得到的结果回来从我的查询,假设我有效的身份证在我的形式输入。为什么我无法通过在表单中​​输入有效的名称来获得结果?

+0

范你分享taboe structuren? – mark

+0

来吧2 + 2 ....你在网页上输入什么?像'2'这样的数字或像'fred'这样的名字不管你输入什么,它都等同于'ID'而不是'User'列 – RiggsFolly

回答

0

它应该是:

$Tusers_SQLselect = "SELECT * FROM users WHERE users.User='$student'"; 

你不需要Concat的的$student,只需用引号将做。

这将工作提供您的表列是users.User

只是一个提示:请记住,以防止MySQL注入。

+0

感谢你提供有关SQL注入的技巧。 – Roberto

0

这很可能是因为您查询的是没有您期望的数据的列。通过SELECT * FROM users手动选择记录来验证您的数据是否正确。

还要检查数据是否没有垃圾字符。试试这个:

select user,HEX(user) from users where user like '%Abdur%' 

请注意,你的代码容易受到SQL注入的影响。您应该跳过您从$_POST阵列读取的用户输入。

+0

谢谢你的注意事项。另外,我现在正在做手动选择。如果我选择'WHERE users.ID ='104'',那么我得到结果,并且该行中的用户是Abdur。但是,如果我使用WHERE users.User ='Abdur'进行手动选择,那么尽管知道用户列确实有'Abdur',我仍然得到零结果。 – Roberto

+0

这是你的意思吗? '$ student = mysqli_real_escape_string($ conn,$ student);' – Roberto

+0

是的。这应该工作。 –

0

尽管在发布我的新手问题之前至少搜索了一个小时的答案,但我无法找到帮助我的答案。但是,我恢复了再次搜索,我在这里找到了答案对这个职位:

mysql select not woking for varchar field

显然,我已经领先或在我的专栏的数据尾随空格。

再次感谢您在以前的答案中关于SQL注入的注意事项。

相关问题