我用它来比较输入的密码和确认密码。无论如何,它都会创造用户。为什么这样?
这是数据库代码 -
$connect = @mysql_connect ($host, $username, $password) or die ('error');
$select = @mysql_select_db($db_name, $connect) or die('check');
$username=stripslashes(trim($_POST['username']));
$select_record="select * from users where username=' ".$username."' ";
$select_query=mysql_query($select_record) or die (mysql_error());
if(mysql_num_rows($select_query)==0)
{
$fullname = stripslashes(trim($_POST['fullname']));
$email = stripslashes(trim($_POST['email']));
$website = stripslashes(trim($_POST['website']));
$username = stripslashes(trim($_POST['username']));
$password = stripslashes(trim($_POST['password']));
$add_new="insert into users (fullname,email,website,username,password) values ('$fullname','$email','$website','$username','$password')";
$add_query=mysql_query($add_new) or die(mysql_error());
if($add_query)
{
echo "Awesome! You are now a member";
}
}
else
echo "Please try again";
?>
以上连接,我有我的数据库用户名和密码。
修改,这是我目前的代码 -
<div id="form"><form action="registersuccess.php" method="post">
Full Name<br />
<input type="text" name="fullname"/>
<br /><br />
Website<br />
<input type="text" name="site"/><br /><br />
Email<br />
<input type="text" name="email"/><br /><br />
Username<br />
<input type="text" maxlength="255" name="username"/><br />
<br />
Password<br />
<input type="password" name="password"/><br />
<br />
Confirm Password<br />
<input type="password" name="confirmpass"/><br />
<br />
<p class="submit"><input type="submit" value="Create my Account"/></p>
</form>
<?php
$pass = $_POST['password'];
$cpass = $_POST['confirmpass'];
$cmp = strcmp($pass, $cpass);
if ($cmp != 0)
{
echo "check password";
}
else
{
return true;
}
?>
答案 0 :(得分:10)
这里有许多明显的语法。您似乎甚至没有看到任何通知/警告(关于未定义的变量,未定义的常量等),因此您最好编辑php.ini
以启用错误报告(至少为E_NOTICE
或所以),或者在脚本的开头添加:
error_reporting(E_ALL);
这将使语法“错误”(意味着它们不是实际的解析错误,但仍然是键入错误,这些错误被PHP识别为其他东西)更容易捕获,因为PHP会打印告诉它的消息如果您的代码有任何可疑之处,以及哪些文件/行。
现在解决代码的实际问题。
您需要将strcmp()
的结果分配给变量,然后检查该变量。此外,您可以将if条件更改为$cmp != 0
,因为您正在测试任何类型的不等式,即您正在测试is not 0
。
$cmp = strcmp($pass, $cpass);
if ($cmp != 0)
...
实际上,通过这样做,您可以完全绕过必须使用临时变量,并将函数调用的结果传递给条件语句:
if (strcmp($pass, $cpass) != 0)
或直接比较字符串而不是比较strcmp()
结果:
if ($pass != $cpass)
此外,正如其他人指出的那样,您的POST
值分配错误,它们应该是相反的方式,否则您将覆盖$_POST
的值。您也可以删除数组键的括号( )
,因为它们根本不需要:
$pass = $_POST['password'];
$cpass = $_POST['confirmpass'];
答案 1 :(得分:3)
如果你想使用strcmp
,你需要以某种方式处理它的返回值,或者将它临时存储在一个变量中,例如:
$cmpResult = strcmp($pass, $cpass);
if ($cmpResult > 0 || $cmpResult < 0) {
// …
}
或者您直接使用返回的值并将其与0
进行比较:
if (strcmp($pass, $cpass) !== 0) {
echo "password check";
}
但您也可以直接比较变量值:
if ($pass !== $cpass) {
echo "password check";
}
答案 2 :(得分:1)
Password<br />
<input type="password" name="password"/><br />
<br />
Confirm Password<br />
<input type="password" name="confirmpass"/><br />
<br />
<?php
$pass = $_POST['password']; // previously you assigned undefined variable to $_POST element. Also no need for () when accessing array element
$cpass = $_POST[('confirmpass')];
$compare = strcmp($pass, $cpass); //previously function return value wasn't assigned to any variable
if ($compare !== 0) //some optimization
{
echo "password check";
}
else
{
return true;
}
?>
答案 3 :(得分:1)
$_POST[('password')] = $pass;
$_POST[('confirmpass')] = $cpass;
不应该是其他方式吗?
$pass = $_POST['password'];
$cpass= $_POST['confirmpass'];
答案 4 :(得分:0)
您是否在表格中查看同一页面?如果是,则未设置$_POST
,因此$pass = $cpass = ''
答案 5 :(得分:0)
我可以看到的一些问题:
您需要从$_POST
数组中获取值而不为其赋值。
在访问数组元素时,您实际上不需要括号(尽管它的不是使用它的错误。),因此要获取数组'foo'
中的键$arr
的值,您可以使用$arr['foo']
。
所以你需要:
$pass = $_POST['password'];
$cpass = $_POST['confirmpass'];
接下来,使用strcmp
函数比较两个字符串,如果两个字符串相等则返回0
,如果不同则返回非零。所以你可以这样做:
if( strcmp($pass, $cpass) !== 0) {
// passwords differ
}
答案 6 :(得分:0)
如果您实际将值分配给已发布的数据而不是相反,则可能会有所帮助。在提出这些问题之前,请花些时间学习基础知识。
即。 $ pass = $ _POST ['pass'];等