【问题标题】:running php file returns nothing运行 php 文件不返回任何内容
【发布时间】:2014-06-24 20:54:24
【问题描述】:

我知道这与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' 未找到或无法统计 [星期三 May 07 17:51:28 2014] [notice] 捕获 SIGTERM,关闭 [Wed May 2014 年 7 月 17 日 51 分 29 秒] [通知] Apache/2.2.22 (Ubuntu) 配置了 Suhosin-Patch 的 PHP/5.3.10-1ubuntu3.11 -- 恢复 正常操作 [2014 年 5 月 7 日星期三 19:25:34] [错误] [客户端 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();
        }
 }

?>

有人可以帮我解决它吗?

谢谢

【问题讨论】:

  • 您的 PHP 输出中有印刷错误。请准确复制/粘贴您收到的错误以及您正在使用的确切源代码,以便社区更准确地诊断您的问题。
  • 试试mysql_fetch_array($db,$sql)也用新的mysqli代替mysql
  • 您似乎没有一些访问权限问题。也不确定为什么要运行 mysql 而不是 mysqli 函数以及为什么要选择数据库。那里实际上有几个数据库吗?我会这样: DEFINE('DB_USER', 'root'); DEFINE('DB_PASSWORD','xxxxx'); DEFINE('DB_HOST', 'localhost'); DEFINE('DB_NAME', 'test'); $con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);但我首先会检查您的服务器设置,尤其是访问设置。还通过 mysqli_real_escape 运行这两个字段并检查两个字段是否不为空。
  • @AR.我按照你说的做了,但是现在当我将浏览器指向 localhost/file.php 时,它返回了一个页面,并显示以下错误:无法连接到 MySQL:

标签: php html browser


【解决方案1】:

你的 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());

您的所有其他代码都在此处..................您的问题已解决

【讨论】:

  • 我做了,没变:(
  • 嘿,我很抱歉听到我的回答没有帮助您。你可以看我的教程,也可以从链接ask.tu2tips.com/2014/05/…下载项目的源代码告诉我它是否有帮助
【解决方案2】:

上面显示的代码存在一些问题。屏幕上没有出现任何内容的第一个问题很可能是由于 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'] isset,你检查 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'";

下一个安全问题是您没有加密密码。始终使用每个用户的唯一盐来加密密码。当用户更改密码时,盐也应该更改。

$salt = generate_salt(); // 你需要创建这个函数。生成大量随机字符。 $password = hash('sha512',$password.$salt);

使用上述方法,您不想在密码变量上使用mysql_real_escape_string(),直到您生成它。如果您确实在对密码进行哈希处理之前使用它,那么由于密码可能不匹配,用户将来很可能无法登录。

您的代码中的下一个致命缺陷是您正在使用 mysql_ 函数,该函数现在不受支持且已弃用。正如您从 PHP 网站上所有 mysql_ 函数的引用中看到的那样。

此扩展自 PHP 5.5.0 起已弃用,并将在 未来。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。

我强烈建议将 PDO 与 MySQLi 相对,但这只是个人喜好。

【讨论】:

  • 感谢大卫的详细解释。我按照您所说的更改了脚本,但是现在当我在浏览器中键入 localhost/filename.php 时,它再次返回几乎空白的页面,只有以下文本:Array ()
  • 这是我检查日志时的新错误消息:[Thu May 08 13:51:30 2014] [error] [client 127.0.0.1] PHP Warning: mysqli_select_db() 需要参数 1是 mysqli,在第 8 行的 /var/www/connectivity.php 中给出的字符串 [Thu May 08 13:51:30 2014] [error] [client 127.0.0.1] PHP 警告:mysqli_error() 只需要 1 个参数,给定的 0在第 8 行的 /var/www/connectivity.php 中
  • 这是第 8 行:$db=mysqli_select_db(DB_NAME,$con) or die("Failed to connect to MySQL:" .mysqli_error());
  • 第 8 行的参数顺序应该是 $con,DB_NAME。请查看php.net/manual/en/mysqli.select-db.php的文档
  • 现在我不再收到错误,但它再次返回一个空页面! :(
猜你喜欢
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多