PHP / MySQL新手问题。
我有一个数据库,我已经导入我的本地phpmyadmin。但是我似乎无法从我的php应用程序访问它。连接字符串似乎正确,当我尝试验证用户凭据以访问数据库信息时,没有问题。
然而,对每个人进行身份验证,并知道我何时输入虚假凭据。它仍然不会从数据库中提取任何其他信息。
例如,一旦用户登录,他们应该看到类似“Hello username”之类的东西。此时我看到“Hello”没有用户名。我可能会缺少什么想法?
答案 0 :(得分:0)
好的,这是代码......
数据库连接:
<?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: 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