运行php文件什么都不返回

时间:2014-05-07 18:16:38

标签: php html browser

我知道这与this question.重复,但我收到了同样的错误。我搜索过类似的问题,例如:PHP not working on HTML filePHP script not working in HTML fileCannot 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();
        }
 }

?>
有人可以帮我解决一下吗?

由于

2 个答案:

答案 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相提并论,但这只是个人偏好。