Php 不访问数据库

标签 php mysql database

我有一个名为 form1.php 的表单文件

<?PHP
//form.php
session_start();
?>
<!DOCTYPE HTML>
<html>
<head>
        <title>form</title>
</head>

<body>
        <?PHP if (isset ($_SESSION["notfound"])) { ?> 
                <h2 style="text-align:center">Wrong user name or password</h2>
        <?PHP unset($_SESSION["notfound"]);}
         if (isset ($_SESSION["empty"])) {?>
                <h2 style="text-align:center">Empty</h2>
        <?PHP unset($_SESSION["empty"]); }?>

    <form name="signin" action="http://localhost/M1.php" method="post">
    <table>
        <tr>
            <td>
            <label>
            Username<input type="text" name="name" size="32"/>
            </label>
            </td>
            <td>
            <label>
            Password <input type="password" name="pass" size="32"/>
            </label>
            </td>
            <td>
            <input type="submit" value="Login" />
            </td>
        </tr>
    </table>
    </form>

和控制文件M1.php

<?php
$name=$_POST["name"];
$pass=$_POST["pass"];
if((!empty($name)) && (!empty($pass)))
{
    session_start();
    if($conection=mysql_connect("localhost","","")===false)
        die("not connect to data base");

    if(mysql_select_db('login',$conection) ===false)
        die("data base not found");


    $sql =sprintf("SELECT `password` FROM `signin` WHERE `username`= '%s' ",mysql_real_escape_string($name));

    $dbpass=mysql_query($sql);

    if ($dbpass==$pass) 
    {
        $_SESSION["authenticated"]=true;
        header("Location: http://localhost/home.php");
        exit;
    }
     else   //if ($dbpass===false)
    {
        $_SESSION["notfound"]=true;
        header("Location: http://localhost/form1.php");
        exit;
    }
}
else
{
    $_SESSION["empty"]=true;
    header("Location: http://localhost/form1.php");
    exit;
}
?>

*我正在使用 xampp 来运行它们 我有包含表登录的数据库日志记录 当我用我保存在登录表中的相同用户名和密码填写表单并单击提交时,将它返回到 form1.php 上, session 为“notfoun” 当我提交空表单时,它会在不设置空 session 的情况下返回我 *

最佳答案

您不是从数据库中获取数据,而是根据 execute query = $pass 设置条件,这将始终为 false,因此更改为

$dbpass=mysql_query($sql);
$result = mysql_fetch_array($dbpass);
$passw = $result['password'];

if ($passw==$pass) 
{
  //logged

作为旁注,我想说几件事。首先我注意到你清理了你的输入,这是一个很好的做法,但你真的应该切换到准备好的声明 PDOmysqli这样您就可以避免 mysql injection 的任何风险,也是因为 mysql_* 函数已被弃用。第二次在数据库中以纯文本形式保存密码是一个非常糟糕的做法,你应该真正加密它并在数据库中保存密码的哈希值,关于这个有一篇很好的帖子 here .此外,我认为 session_start(); 应该放在文件的顶部才能正常工作。

关于Php 不访问数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22249441/

相关文章:

php - 如何找到使用最多 CPU 的 PHP 代码行

java - 在 Java Web 应用程序中获取 DataSource 资源

mysql - 将日期分类为 "yesterday"、 "last week"等

java - 将数据库表映射到类中

mysql - 从多个线程访问大型数据库表

php - MySQL 行到四列

php - 如何使用 laravel 框架在 PHP 中访问通过 Wordpress 创建的数据库

MySQL 查询(客户 ID 和第一次、第二次和第三次购买的日期)

database - 如何在H2中存储和转换IP地址?

php - MySQL-如何选择未在另一个表中选择的行