我正在尝试编写一个简单的登录脚本。即,通过 POST 操作接受表单内容。检查数据库中是否有匹配的记录。从该行中提取其他信息,例如全名
。
我的代码是;
if ( !isset($_POST['loginsubmit']) ) {
//Show login form
?>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<p>
Account ID:
<input name="AccountID" type="text" />
</p>
<p>
Username:
<input name="userEmail" type="text" />
</p>
<p>Password:
<input name="userPassword" type="password" />
<p>
<input name="loginsubmit" type="submit" value="Submit" />
</p>
</form>
<?php
}
else {
//Form has been submitted, check for logon details
$sql = "SELECT * FROM users WHERE 'accountID'=". $_POST['AccountID']. " AND 'userEmail'=". $_POST['userEmail'] . " AND 'userPassword'=". $_POST['userPassword']. " LIMIT 1";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
if ($count == 1){
echo"Correct Username/Password";
}
else {
echo "Wrong Username or Password";
}
}
我有两个问题。首先使用上面的代码,我不断收到以下错误。
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in ...
其次,如何从数据库中获取其他详细信息字段。我认为
$result=mysql_query($sql);
包含 MySQL 行的数组,所以我可以做类似的事情吗?
echo $result['fullName'];
最佳答案
首先清理字段以防止 SQL 注入(inject)。
$sanitize_fields = array('AccountID','userEmail','userPassword');
foreach( $sanitize_fields as $k => $v )
{
if( isset( $_POST[ $v ] ) )
$_POST[ $v ] = mysql_real_escape_string( $_POST[ $v ] );
}
然后在查询中引用字符串字段。最初您的查询有错误。这就是为什么你得到 false 的 bool 值。
$sql = "SELECT * FROM users WHERE accountID='". $_POST['AccountID']. "' AND userEmail='". $_POST['userEmail'] . "' AND userPassword='". $_POST['userPassword']. "' LIMIT 1";
我建议您在运行查询后执行以下操作,查看 MySQL 生成的错误(如果有)。
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
MySQL 扩展正在逐步淘汰,并且有更新的更好的扩展,例如 MySQLi 和 PDO,看看这些。
关于php - 简单的登录脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10586943/