试图了解如何在登录的php中处理表单。看起来很笨拙,希望有更好的方法。
我们说用户登录是用户ID和密码。 如果他们输入表格上的信息,我跳转到下一页:
<?php
if (isset($_POST["id"])) {
$con=mysqli_connect("localhost","user","pw","db");
$codeFile = $_POST["filename"];
$id = $_POST["id"];
$fname = $_POST["fname"];
$lname = $_POST["lname"];
$res = mysqli_query($con, "SELECT COUNT(*) from users where id='$id' and fname='$fname' and lname='$lname'");
$row = mysqli_fetch_array($res);
$count = $row[1];
if ($count == 1) {
header("submit.php");
die();
}
$res = $con->query('INSERT INTO log values ($id, now(), $codeFile)');
}
?>
上面的代码理论上应该只跳转到submit.php,如果只有一行回来,因为有匹配的用户。它似乎不起作用。
如果这样做,我想做一个插入。当然最好做一个组合语句并根据插入的行数(1或0)进行测试
$ res = $ con&gt;查询(&#39; INSERT INTO日志值($ id,now(),$ codeFile)&#39;);
有没有办法将它组合成一个查询,如果成功则返回true?
答案 0 :(得分:1)
我建议您使用SELECT *
或实际列本身而不是COUNT(*)
例如:SELECT id,fname,lname from table
然而,我建议你这样做:
而不是:
$row = mysqli_fetch_array($res); $count = $row[1];
做的:
$count = mysqli_num_rows($res); if($count==1){...}
例如,添加mysqli_real_escape_string()
以增加安全性(在下面的脚注下更多)
旁注:我的印象是,如果查询不符合条件,您希望将用户重定向到submit.php
,如果符合要求,则执行{{1} }。
如果是这样,我修改了方法。另外,使用INSERT
不正确。
正确的方法是header("submit.php");
传递给代码之前的另一件事。
此行应使用值和双引号周围的引号将其换行:
header("Location: http://www.example.com");
如:
$res = $con->query('INSERT INTO log values ($id, now(), $codeFile)');
注意:尝试并使用实际列插入,这样会更好。
另外,$res = $con->query("INSERT INTO log values ('$id', now(), '$codeFile')");
将不会执行,因为没有设置条件。删除$res
或添加
$res =
代码:
if($res){
echo "DB insertion was successful.";
}
<强>脚注:强>
您目前的代码向SQL injection开放。使用prepared statements或PDO
<强>密码强>
我注意到您可能以纯文本格式存储密码。不建议这样做。
使用以下其中一项:
其他链接:
答案 1 :(得分:0)
您可以使用mysqli-&gt;受影响的行:
http://us1.php.net/manual/en/mysqli.affected-rows.php
你可以在你的查询中使用LIMIT只返回一个结果,虽然如果你回来一个登录查询是不好的做法,反正应该只有一个。
为什么你的代码不起作用,很难说,它取决于你的数据库返回的内容。 您需要调试$ count并查看实际出现的内容,然后从那里开始工作。
Finalyl,据我所知,不可能在同一行上运行两个查询,你需要两个表的两个插件。(表日志和表值)