我知道这与this question.重复,但我收到了同样的错误。我搜索过类似的问题,例如:PHP not working on HTML file,PHP script not working in HTML file,Cannot run a simple PHP file on the server等等,但找不到任何解决方案。
我创建了一个非常简单的登录html文件,然后我编写了php脚本来在单独的php文件中执行登录操作。 (与html文件在同一个文件夹中)。我的问题是,当我在浏览器中键入localhost / filename.php时,它什么都没有给我回复。 (我的意思是没有任何错误消息的空html页面)。此外,当我在我的html登录表单中按下登录按钮时,它要求我保存文件,而我希望运行php文件。
我检查了错误日志,这是错误:
脚本'/var/www/connectivity.php'未找到或无法统计[周三 2014年5月7日17:51:28] [通知]抓住了SIGTERM,关闭了[Wed May 07 17:51:29 2014] [通知] Apache / 2.2.22(Ubuntu) 配置了Suhosin-Patch的PHP / 5.3.10-1ubuntu3.11 - 恢复 正常运营[Wed May 07 19:25:34 2014] [错误] [客户 127.0.0.1] PHP警告:mysql_connect():/var/www/connectivity.php中的用户'root'@'localhost'(使用密码:NO)拒绝访问 第7行
这是php脚本:
<?php
$host="localhost";
$user="root";
$pass="xxxxx";
$db="test";
$con=mysql_connect($host,$user,$pass) or die("Failed to connect to MySQL: " . mysql_error());
$db=mysql_select_db($db,$con) or die("Failed to connect to MySQL: " . mysql_error());
if(isset($_POST['userId'])){
$userId = $_POST['userId'];
$password = $_POST['password'];
$sql = "SELECT * FROM User where userId = '$userId' AND password = '$password'" or die(mysql_error());
$res = mysql_fetch_array($sql) or die(mysql_error());
if(mysql_num_rows($res) > 0) {
echo "SUCCESSFULLY LOGIN TO USER PROFILE PAGE...";
exit();
}
else
{
echo "SORRY... YOU ENTERD WRONG ID AND PASSWORD... PLEASE RETRY...";
exit();
}
}
?>
有人可以帮我解决一下吗?
由于
答案 0 :(得分:2)
你的mysql_query()在哪里?
我认为您应该添加mysql_query()
并重试。
$sql = "SELECT * FROM User where userId = '$userId' AND password = '$password'";
$query=mysql_query($sql) or die(mysql_error()); **// You didn't add this line**
$res = mysql_fetch_array($query) or die(mysql_error());
你的所有其他代码都在这里..................跳你的问题是固定的
答案 1 :(得分:1)
上面提到的代码存在一些问题。屏幕上没有显示任何内容的第一个问题很可能是由于PHP抛出错误和崩溃,或者您没有在POST数据的HTTP标头中设置userId。要确保将POST数据发送到服务器,可以检查Web浏览器的开发人员工具,或者在PHP脚本的顶部使用以下代码。
<?php
echo '<pre>';
print_r($_POST);
echo '</pre>';
?>
至于PHP错误,我注意到的第一个错误是您无法使用函数mysql_query($sql)
并直接将SQL变量插入mysql_fetch_array()
。这不是正确的方法。
$sql = "SELECT * FROM User where userId = '$userId' AND password = '$password'";
$res = mysql_query($sql);
if(!$res) {
// Failed to perform SQL Query
echo 'Mysql Query Failed';
exit();
}
$row = mysql_fetch_array($res);
if(mysql_num_rows($res) > 0) {
echo "SUCCESSFULLY LOGIN TO USER PROFILE PAGE...";
exit();
}else {
echo "SORRY... YOU ENTERED WRONG ID AND PASSWORD... PLEASE RETRY...";
exit();
}
另一个PHP问题是你没有检查$_POST['password']
是否已设置,你检查了userId
。通过更改一行代码,这是一个简单的修复。
if(isset($_POST['userId'])) {
// Changes To
if(isset($_POST['userId'],$_POST['password'])) {
我的下一个注意事项是您应该遵循的安全功能。第一个主要问题是在将变量插入SQL变量之前缺少解析变量。切勿插入用户可以直接修改到查询中的变量。如果您坚持使用mysql_
函数,则需要首先对所传递的所有变量运行命令mysql_real_escape_string()
。
$userId = mysql_real_escape_string($userId);
$password = mysql_real_escape_string($password);
$sql = "SELECT * FROM User where userId = '$userId' AND password = '$password'";
下一个安全问题是您没有加密密码。 Alwasy为每个用户使用独特的盐加密密码。当用户更改密码时,盐也应该改变。
$ salt = generate_salt(); //你需要创建这个功能。生成大量随机字符。 $ password = hash(&#39; sha512&#39;,$ password。$ salt);
使用上述方法,您不希望在生成密码变量之前使用mysql_real_escape_string()
。如果您在散列密码之前使用它,则由于密码可能不匹配,用户很可能将来无法登录。
您的代码中的下一个致命缺陷是您正在使用现在不受支持和弃用的mysql_
函数。正如您可以从PHP网站上的所有mysql_
函数的引用中看到的那样。
自PHP 5.5.0起,此扩展程序已弃用,并将在中删除 未来。相反,应该使用MySQLi或PDO_MySQL扩展。
我强烈建议将PDO与MySQLi相提并论,但这只是个人偏好。