PHP / MySQL数据库问题

时间:2010-03-28 18:45:23

标签: php mysql

PHP / MySQL新手问题。

我有一个数据库,我已经导入我的本地phpmyadmin。但是我似乎无法从我的php应用程序访问它。连接字符串似乎正确,当我尝试验证用户凭据以访问数据库信息时,没有问题。

然而,对每个人进行身份验证,并知道我何时输入虚假凭据。它仍然不会从数据库中提取任何其他信息。

例如,一旦用户登录,他们应该看到类似“Hello username”之类的东西。此时我看到“Hello”没有用户名。我可能会缺少什么想法?

2 个答案:

答案 0 :(得分:0)

很抱歉所有来回的家伙。这是问题所在。我有一个PHP应用程序和mysql数据库连接(或至少我希望如此......)。我的页面标题中有一个表单供用户登录。我可以登录,但我似乎无法从数据库中提取任何信息。如果我尝试使用伪造凭证登录,则会收到“登录不正确”消息。但是,当我登录时,除了那些凭据之外,它似乎无法从数据库中提取任何其他内容。

好的,这是代码......

数据库连接:

<?php
session_start();

# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_test = "localhost";
$database_test = "girlpower";
$username_test = "root";
$password_test = "password";
$test = mysql_pconnect($hostname_test, $username_test, $password_test) or trigger_error(mysql_error(),E_USER_ERROR);

mysql_select_db($database_test, $test);
?>

这是登录代码:

<?php
require_once("includes/db.php");

$userEmail = trim($_POST['userEmail']);
$password = trim($_POST['password']);
$userlogin = trim($_POST['userlogin']);

//print_r($_POST);

if ($userlogin != ""  &&  $userEmail != "" && password != ""  )
{
    $sql = sprintf("Select * from girlpower where email = '%s' and pwd = '%s'", $userEmail, $password );

    //echo $sql;

    $res = mysql_query($sql);

    if( mysql_num_rows( $res ) == 0 )
    {
        //TODO:
        //redirect..

        header("Location: " . $_SERVER['HTTP_REFERER']  . "?fail=1" );

    }
    else
    {
        $row = mysql_fetch_assoc( $res );
        $_SESSION['recordId'] = $row['recordId'];
        $_SESSION['firstName'] = $row['firstName'];

        //echo "success...";
        header("Location: " . $_SERVER['HTTP_REFERER'] );

        //print_r($_SERVER);

    }

    //print($_SESSION);

}
else
{
        header("Location: " . $_SERVER['HTTP_REFERER']  . "?fail=1" );

}

这里的标题代码(这就是形式生活的地方)

<?php

    $fail = false;
    if( $_GET['fail']  != "")
    {
        $fail = true;
    }


        if( $_SESSION['recordId'] != "" )
    {
        //get the 1st name
        $firstName = $_SESSION['firstName'];
    }

       ?>

<div id="header">
< SHOULD BE LINK "index.php"></a>

<div id="ulogin">
  <fieldset id="userlogin">
        <?php if( $firstName == ""){ ?>
        <form name="loginForm" action="dologin.php" method="post" >
    <label for="logemail">Members Login: &nbsp;Email</label> <input type="text"
         name="userEmail" id="logemail" size="15" />
        <label for="logpwd">Password</label> <input type="password" name="password"
                id="logpwd" size="15" />
                <input type="submit" name="userlogin" id="login" value="Login" />

                <?php if ($fail == true ) {?>
               <span class="error">Incorrect Login</span>
                <?php }?>

          </form>
   </fieldset>

           <?php
        }
    else{
    ?>


<div id="welcome">Welcome <?= htmlentities( $firstName ) ?> | <SHOULD BE LINK ="seemsgs.php?receiver_id="<?=  $_SESSION["recordId"]?> > See Messages</> |<SHOULD BE LINK ="member.php">Update Profile</> |  <SHOULD BE LINK ="dologout.php">Logout</a> </div><?php }?>
</div>

答案 1 :(得分:0)

我注意到你正在使用root用户(虽然我不确定这是否仅仅是为了发布目的而添加的。)根据您使用的托管环境,这可能是也可能不是问题 - 一些共享主机强制您可以为MySQL中的数据库分配用户。

从查询应该执行的事物看起来并且至少返回多行。在结果数组上尝试过print_r吗?如果是这样,你可以发布输出吗?

如果您成功地从数据库中获取结果,我在您发布的代码中的任何地方都没有看到回应成功消息的条件。您可能希望针对您分配的$ _SESSION超全局密钥(recordID和firstName)检查isset(),如果尚未执行此操作,则返回成功消息。

只是一个想法 - 我注意到你正在使用sprintf格式化你的查询 - 它可能对你想要完成的东西有点过于强大,但使用PDO来获取参数化的sql查询是一个不错的方法在可用的地方完成工作。 Introduction to PHP 5 PDO