为了账号安全,请及时绑定邮箱和手机立即绑定

PHP Update查询正在执行,但凭据未更新

PHP Update查询正在执行,但凭据未更新

PHP
繁华开满天机 2021-04-26 13:50:13
我的网站上有一个表单标签,该表单标签指向带电子邮件和/或/没有描述的PHP页面。基于该代码生成查询,该查询需要更新这些凭证。该部分代码有效并且已经过测试。问题在于数据库未更新电子邮件凭证,但是如果我将其更新为描述,它将这样做。该代码有3个检查项,如果用户仅放置他的电子邮件,是否仅放置他的描述或两者都放置。基于此,代码的工作方式如下:<?phpsession_start();include_once 'connection.php';$id = $_SESSION['user_id'];if(isset($_POST['emailChange']) || isset($_POST['descChange'])){       $desc = $_POST['descChange'];       $email = $_POST['emailChange'];       if(empty($email)){           $query = "UPDATE users SET description = :descr WHERE user_id= :id ;";           $stmt = $conn->prepare($query);           $stmt->bindParam(":descr", $desc);       } else if(empty($desc)){           $query = "UPDATE users SET user_email= :email WHERE user_id= :id ;";           $stmt = $conn->prepare($query);           $stmt->bindParam(":email", $email);       } else{           $query = "UPDATE users SET description = :descr AND user_email = :email WHERE user_id= :id;";           $stmt = $conn->prepare($query);           $stmt->bindParam(":email", $email);           $stmt->bindParam(":descr", $desc);       }       if(!filter_var($email, FILTER_VALIDATE_EMAIL)){           header("Location: ../profile.php?error=invalidEmail");           exit();       }           $stmt->bindParam(":id", $id);           $stmt->execute();   }表单本身看起来像这样: <form action="assets/upload.php" method="POST">     <input type="text" name="emailChange" class="inputs" id="changeEmail" placeholder = "Enter your new E-mail">     <input type="text" name="descChange" class="inputs" id="changeDesc" placeholder="Enter your description">     <button type="submit" id="btnconfirmCreds" name="changeCreds">Confirm Changes</button> </form>数据库中的名称如下所示:[user_id][user_username][user_email][user_password][role_id][user_image][description][num_of_posts
查看完整描述

2 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

有关逻辑的一些注意事项:


if(isset($_POST['emailChange']) || isset($_POST['descChange']))

{

    $desc = $_POST['descChange'];

    $email = $_POST['emailChange'];

    ...

首先,检查是否至少存在一个参数,然后再访问两个参数。您可能会争辩说,该表单总是同时发送,但永远不要相信用户输入:操作数据是如此简单!


要么将您更改if(...)为:


if( isset($_POST['emailChange']) && isset($_POST['descChange']) )

以下是具有相同语义的较短形式:


if( isset( $_POST['emailChange'], $_POST['descChange'] ) )

其他方法是更改其他2行,例如:


    $desc  = isset($_POST['descChange'])  ? $_POST['descChange']  : '';

    $email = isset($_POST['emailChange']) ? $_POST['emailChange'] : '';


查看完整回答
反对 回复 2021-05-07
  • 2 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信