首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php不访问数据库

问Php不访问数据库
EN

Stack Overflow用户
提问于 2014-03-07 11:55:55
回答 3查看 102关注 0票数 2

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

代码语言:javascript
复制
<?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>

和controll文件M1.php

代码语言:javascript
复制
<?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来运行它们,我有数据库日志,当我用我保存在signin表中的相同用户名和密码填写表单时,它包含一个表号,然后单击submit,在form1.php上用会话'notfoun‘返回我,当我提交空表单时,它不需要设置空会话就返回我*

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-07 12:16:06

现在是使用PDO或mysqli的好时机,而不是使用最新PHP中不推荐的mysql。

在传递db连接值时,我觉得您遗漏了用户名和密码,这将帮助您连接数据库。

稍后,mysql_query("SELECT_QUERY");返回结果对象,其值应由mysql_fetch_assoc()读取,后者将db行返回到关联数组形式。

最后,您的代码应该是,

代码语言:javascript
复制
$sql =sprintf("SELECT `password` FROM `signin` WHERE `username`= '%s' ",mysql_real_escape_string($name));

$result = mysql_query($sql);
$dbpass = mysql_fetch_assoc($result);
$dbpass = $dbpass['password'];
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;
}
票数 0
EN

Stack Overflow用户

发布于 2014-03-07 12:03:44

您不是从数据库中获取数据,而是根据execute query = $pass创建一个条件,该条件将始终为false,因此请更改为

代码语言:javascript
复制
$dbpass=mysql_query($sql);
$result = mysql_fetch_array($dbpass);
$passw = $result['password'];

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

顺便提一句,我要说几句话。首先,我注意到您对输入进行了净化,这是一个很好的实践,但是您确实应该使用PDO或mysqli切换到准备好的状态,这样就可以避免mysql injection的任何风险,这也是因为mysql_*函数被废弃了。第二,在数据库中用纯文本保存密码是非常糟糕的做法,您确实应该对其进行加密,并将密码的散列保存在数据库中,在数据库中有关于here的anice帖子。此外,我认为session_start();应该放在文件的顶部,这样才能正常工作。

票数 1
EN

Stack Overflow用户

发布于 2014-03-07 12:04:48

你犯了什么错误?

不管怎样,你是如何通过数据库连接的?我看到您已经将用户名和密码作为空字符串。您应该尝试输入现有用户的用户/传递:

mysql_connect语法:

代码语言:javascript
复制
mysql_connect(host,username,password,newlink,clientflag)

示例:

代码语言:javascript
复制
mysql_connect("localhost","root","") 

或

代码语言:javascript
复制
mysql_connect("localhost","root","password")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22249441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档