php - 如果字段留空,则无法执行 PHP SQL 查询

标签 php mysql sql

因此,我正在考虑制作一个用于更新用户详细信息的表单。

if(strlen($pwd) >3){
    echo "password too short";
}else{
    $password=sha1($pwd);
    $sqlUpdate="update user set first_name='$firstname',
                                last_name='$lastname',
                                email='$email',
                                username='$username',
                                password=SHA1('$pwd')
                where user_id='$id'";

if ($upresult = mysqli_query($dbc, $sqlUpdate)){
}

}
}
else{
    $sql="select * from user where user_id=" . $id ;
    $result = mysqli_query($dbc, $sql);

        while ($newarray=mysqli_fetch_array($result)){
            $firstname=$newarray['first_name'];
            $lastname=$newarray['last_name'];
            $email=$newarray['email'];
            $username=$newarray['username'];    
            $password=$newarray['password'];

}
}

这是我目前得到的代码,它运行得很好。但是,我对始终输入密码的要求感到恼火。经过一番谷歌搜索后,最流行的建议解决方案似乎是运行更新查询,其中密码未更新。

if (){
    $sqlUpdate="update user set first_name='$firstname',
                                last_name='$lastname',
                                email='$email',
                                username='$username'
            where user_id='$id'";
}else{
if(strlen($pwd) >3){
    echo "password too short";
}else{
    $password=sha1($pwd);
    $sqlUpdate="update user set first_name='$firstname',
                                last_name='$lastname',
                                email='$email',
                                username='$username',
                                password=SHA1('$pwd')
                where user_id='$id'";

if ($upresult = mysqli_query($dbc, $sqlUpdate)){
}

}
}
}
else{
    $sql="select * from user where user_id=" . $id ;
    $result = mysqli_query($dbc, $sql);

        while ($newarray=mysqli_fetch_array($result)){
            $firstname=$newarray['first_name'];
            $lastname=$newarray['last_name'];
            $email=$newarray['email'];
            $username=$newarray['username'];    
            $password=$newarray['password'];

}
}

您会注意到第二个代码块中的第一个 if 语句是空的。这是因为无论我在密码留空的情况下在其中输入什么来进行更新,都没有任何效果。如果我输入密码,它将正常运行该更新。

if ($pwd == ''){
if ($pwd === ''){
if (empty($pwd)){
if (empty($pwd)==TRUE){

这些是我通过浏览 Google 看到的建议...我真的很困惑。我错过了什么?

...啊,我可以编辑这个。好的。

if(isset($_POST['update'])){
...
$pwd=$_POST['password'];

这就是我获得 $pwd 的方式。

流感和租赁检查很烦人。插入 var_dump($_POST['password']); 后根据要求,其输出为:

string 'jojo13' (length=6)
string '' (length=0)

根据我尝试插入的密码,结果会发生变化。但是,它似乎清楚地知道我将密码留空,并返回字符串“”。

这可能是错误的方法,但出于好奇,我尝试运行

if (strlen($_POST['password']) == 0)

它仍然没有更新数据库。但。在我遇到这样的情况之前,不输入密码会导致出现“密码太短”消息。上面的 if 语句不会再出现“密码太短”消息。

最佳答案

尝试

$has_password = isset($pwd) && !empty($pwd);

if($has_password){...}`

它比 empty() 更强大。

关于php - 如果字段留空,则无法执行 PHP SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229498/

相关文章:

php - 将选定的值分配给变量

php - 如何为我的自定义博客文章创建文件?

php - 如何获得当前时间和 eventTime 之间的时差

mysql - 在 SQL 中使用变量交叉引用两个数据库

sql - 如何在查询中使用 (func()).* 语法避免多个函数求值?

sql - 在 SELECT 子句中的列之间使用相等性检查

php - PHP 中的 mysql_fetch_assoc() 错误

php - 使用获取的数据的 PDO::FETCH_PROPS_LATE 和 __construct() 调用

mysql - 选择一个表中的列总和与另一表中的列总和的差异

mysql - Mysql:将字符集更改为UTF-8