2012-11-20 158 views
-1

可能重复:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”PHP登录连接错误

我想使用的mysqli连接到MySQL服务器和PHP.Here是我的代码1的index.html 2- db.php中和3- logedin.php

enter code here 
<form id="myForm" action="PHP/logedin.php" method="POST"> 
<div class="single-field"> 
<label for="eMail">Email:<span class="Star"> *</span></label> 
<input name="eMail" type="text"></input> 
</div> 
<div class="single-field"> 
<label for="psword">Password:</label> 
<input name="psword" type="text"></input> 
</div> 
<button type="button" name="" value="" class="css3button">Login</button> 
</form> 

和db.php中

<?php 
$DB_NAME = 'tblTest'; 
$DB_HOST = 'localhost'; 
$DB_USER = 'root'; 
$DB_PASS = ''; 
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); 
if ($mysqli->connect_errno) 
{ 
echo "Failed to connect to MySQL:" . $mysqli->connect_error; 
exit(); 
} 
?> 

终于logedin.php是:

<?php 
include_once('db.php'); 
$eMail = mysql_real_escape_string($_POST["eMail"]); 
$passWord = mysql_real_escape_string(md5($_POST["psword"])); 
$query = "SELECT count(*) FROM users WHERE (email ='$eMail' AND pass ='$passWord')"; 
if($query>0) { 
echo "Yes Your Area Welcome."; 
} 
else{ 
echo "No Your Area Not Welcome!."; 
} 
$mysqli->close(); 
?> 

我有表叫用户,我有两列电子邮件,并通过有,但我得到这个消息在运行代码之后: 注意:未定义的索引:第3行的C:\ wamp \ www \ tt \ PHP \ logedin.php中的电子邮件 注意:第4行的C:\ wamp \ www \ tt \ PHP \ logedin.php中的未定义索引:psword 你请让我知道我在做什么错了?

回答

1

他们是只是注意到这些变量没有被发现将这些函数应用于它们,这是因为请求是alr伊迪空的,应该去当你的要求,但是你可以通过变量

<?php 
include_once('db.php'); 
$eMail = mysql_real_escape_string(@$_POST["eMail"]); 
$passWord = mysql_real_escape_string(md5(@$_POST["psword"])); 
$query = "SELECT count(*) FROM users WHERE (email ='$eMail' AND pass ='$passWord')"; 
if($query>0) { 
echo "Yes Your Area Welcome."; 
} 
else{ 
echo "No Your Area Not Welcome!."; 
} 
$mysqli->close(); 
?> 

或通过添加这种顶部

ini_set('display_errors', 'Off'); 
隐藏所有通知/错误之前增加一个 @隐藏这些通知
+1

这并不真正解决缺少表单变量的实际问题,它只是隐藏了事实。 )错误;它应该覆盖/包装消息生成表达式,而不是目标变量 – mario

+0

由于Mario的说法,抑制应该在'mysql_real_escape'上,而不是在变量上 – Ohgodwhy

+0

谢谢Osa我真的很感谢你的时间和完美暗示 – user1760110

1

使用三元的尝试:

$eMail = (!empty($_POST['eMail'])) ? mysql_real_escape_string($_POST['eMail']) : null; 
$passWord = (!empty($_POST['psword'])) ? mysql_real_escape_string(md5($_POST['psword'])): null; 

警告都不见了,应该在条件语句使用像

if(NULL !== $eMail) // eMail present 

您还可以调试您的帖子变量:

echo '<pre>', print_r($_POST, TRUE), '</pre>'; exit(); 
+0

现在他只是空的变量,没有任何关于它的说明。 – mario

+0

@mario相反,如果变量为空,那么该变量设置为null,这就是为什么我们检查'if(NULL)...'我错过了什么吗? – Ohgodwhy

+0

当然,您可以通过这种方式输出自定义错误消息。但这并不能真正解释表单输入的缺失。 – mario