【问题标题】:PHP doesn't read from MySQL database with POST or GET queries.(blank output)PHP 不会使用 POST 或 GET 查询从 MySQL 数据库中读取。(空白输出)
【发布时间】:2014-12-21 13:54:22
【问题描述】:

我正在尝试使用 PHP 和 MySQL 制作一个基本的登录系统,但它在我的登录表单中不起作用。这是登录表单的代码。:

<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>

<body>
<form method="POST" action="verify.php">
<br/>Username:<input type="text" name="username"/>
<br/>Password:<input type="password" name="password"/>
<br/><button type="submit">Submit</button>
</form>
</body>

</html>

这里是verify.php的代码:

<?php
        $username = $_POST["username"];
        $password = $_POST["password"]; //Not Doing anything with the pass yet
        $con=mysqli_connect("","root","mypassword","logins");
        //now mySQL is connected, lets extract stuff from the database
        $que = mysqli_query($con,"SELECT Pass FROM login WHERE User='" . $username . "'");
        $row = mysqli_fetch_array($que);
        $myvar = $row[0];
        //should echo Test
        echo $myvar;
        echo "If it returned Test, the mySQL works.";
        mysqli_close($con);
?>

当我运行它时,输出完全是空白的。 不过,我可以直接从 MySQL 控制台获取查询:

    mysql> SELECT Pass from login WHERE User='Logern';
    +------+
    | Pass |
    +------+
    | Test |
    +------+
    1 row in set (0.01 sec)
    mysql>

我也可以通过 PHP 使用硬编码的 SQL 查询来访问它:

$que = mysqli_query($con,"SELECT Pass FROM login WHERE User='Logern'");

那么为什么这不起作用?我的网络服务器是一个带有 Debian 和 lighttpd 的 Raspberry Pi。

【问题讨论】:

  • 在查看答案之前,您(以及采用这种方法的任何其他人)应该知道从$_POST 获取普通输入并在 MySQL 查询中使用它会使您的应用程序对 SQL 注入攻击敞开大门: php.net/manual/en/security.database.sql-injection.php
  • 是的,我知道,但是我以后会担心安全性,反正这只是一个私人网络服务器。
  • 好的,那么请确保其他人;另外,您可以通过将$password = $_POST["password"[; 更改为$password = $_POST["password"]; 来修复示例

标签: php mysql query-string


【解决方案1】:

这里有错别字->

$password = $_POST["password"[; //Not Doing anything with the pass yet

显然应该是的

$password = $_POST["password"]; //Not Doing anything with the pass yet

所以,由于这个语法错误,整个代码有点“未编译”,所以你得到的是一个空白页。

【讨论】:

  • ack,这似乎确实是个问题,因为其余的看起来都不错
  • 我修好了,没有改变。
【解决方案2】:

如果您得到空白返回是因为您的 php.ini 文件中的 display_errors 指令已关闭,因为我可以立即在您的脚本中看到两个问题:

$password = $_POST["password"[; 

应该是

$password = $_POST["password"];

以及您连接中的主机:

$con=mysqli_connect("","root","mypassword","logins");

应该是

$con=mysqli_connect("localhost","root","mypassword","logins");

请打开您的 display_errors 指令或转到错误日志查看错误。

【讨论】:

  • 它确实可以在没有主机的情况下使用,但使用硬编码的查询字符串。
  • 好的,它可能正在将空字符串转换为本地主机。但是打开你的错误,这样你就可以在将来看到这种问题。
  • 我开启了display_errors,没有报错。
  • 你开启apache后重启了吗?
  • 不,还没有,我要重启我的 lighttpd(不使用 apache)。
【解决方案3】:

很奇怪,重启lighttpd后,竟然神奇地工作了!稍作修改的代码:

<?php
        $username = $_POST["username"];
        $password = $_POST["password"]; //Not Doing anything with the pass yet
        $con=mysqli_connect("","root","mypassword","logins");
        //now mySQL is connected, lets extract stuff from the database
        $sql = "SELECT Pass FROM login WHERE User='" . $username . "'";
        //$que = mysqli_query($con,"SELECT Pass FROM login WHERE User='" . $username . "';");
        $que = mysqli_query($con,$sql);
        $row = mysqli_fetch_array($que);
        $myvar = $row[0];
        //should echo Test
        echo $myvar;
        echo "If it returned Test, the mySQL works.";
        mysqli_close($con);
?>

【讨论】:

    【解决方案4】:
    $con=mysqli_connect("","root","mypassword","logins");
    

    编辑连接主机。(密码和用户名正确。)

    $con=mysqli_connect("localhost","root","mypassword","logins");
    

    【讨论】:

      【解决方案5】:

      尝试像这样使用:

      你永远不应该在每个页面上使用 connect 语句,并在一个 connection.php 文件中写入连接代码并将其包含在页面上并通过 mysqli 对象访问。

      $con = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error " . mysqli_error($con)); // see if you have any error in connection database.
      
      //consultation: 
      
      $query = "SELECT Pass FROM login WHERE User='" . $username . "'"; 
      // echo $query; // use echo and see what your query looks like
      //execute the query. 
      
      $result = mysqli_query($con, $query); 
      $row = mysqli_fetch_array($result);
      //display information: 
      
       $myvar = $row[0];
              //should echo Test
              echo $myvar;
              echo "If it returned Test, the mySQL works.";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多