PHP/mySQLi更新用户存在的值

PHP/mySQLi更新用户存在的值,php,sql,mysqli,Php,Sql,Mysqli,我们会直截了当的 我有一个简单的表格(其中两个)依赖于之前填写的表格 这些表格的目的是签署、发送至db、验证电子邮件。用户验证其电子邮件后,其权限将更改为能够查看下一个表单 这些表单工作得很好,除了最后一点之外,所有的功能都很好 当存在现有用户时,我很难将值应用到db表中 我想做的只是让它为该用户更新密钥,其中用户会话IDAPI密钥=$API和表单首字母在花名册表中为空。如果是,则将插入到 这是我清理过的东西。(最初是为填写表格的第一阶段编写的,试图调整以适应表格的后半部分) if(空($\u

我们会直截了当的

我有一个简单的表格(其中两个)依赖于之前填写的表格

这些表格的目的是签署、发送至db、验证电子邮件。用户验证其电子邮件后,其权限将更改为能够查看下一个表单

这些表单工作得很好,除了最后一点之外,所有的功能都很好

当存在现有用户时,我很难将值应用到db表中

我想做的只是让它为该用户更新
密钥
,其中用户会话ID
API
密钥
=$API
表单首字母
花名册
表中为空。如果是,则将
插入到

这是我清理过的东西。(最初是为填写表格的第一阶段编写的,试图调整以适应表格的后半部分)

if(空($\u POST['initials']){$error[]='您必须在下面的每个框中输入您的首字母。;}
else{$initials=$_POST['initials'];}
$API=$\会话['API'];
if(空($error)){
$query\u verify\u form=“从花名册中选择*,其中API='$API';
$result\u verify\u form=mysqli\u query($dbc,$query\u verify\u form);
如果(!$result\u verify\u form){
回显“发生数据库错误”;
}
如果(mysqli_num_rows($result_verify_form)==0){
$form_icaauth=md5(uniqid(rand(),true));
错误报告(E_全部);
$query\u insert\u user=“更新‘花名册’
( 
`全名','form\u ica\u缩写','form\u icaauth','form\u ica\u ip`
) 
价值(
“$fullname”、“$initials”、“$form_icaauth”、“$DOCSIGNEDBYIP”
)
";
$result\u insert\u user=mysqli\u query($dbc,$query\u insert\u user);
if(!$result\u insert\u user){
回显“查询失败”;
}
if(mysqli_受影响的_行($dbc)==1){
...
回声“
…”; } 否则{ 回声“…”; } } 否则{ 回声“…”; } } 否则{ 回声'; foreach($key=>$value时的错误){ 回显“
  • ”.$values.“
  • ”; } 回声'; } mysqli_close($dbc)//关闭数据库连接 }
    如果我将
    If(mysqli_num_rows($result\u verify\u form)==0){
    更改为
    ==1
    ,它将通过创建新记录将值发布到表中,而不会按指定更新现有的用户字段。但是,通过这样做,它将避免我构造的错误


    我对PHP有点了解……但由于这一点很难处理,我能够让它与以下内容一起工作

    if (empty($error)) { 
          $query_verify_form = "SELECT * FROM roster WHERE API='$API'  AND form_ica_initials IS NULL";
          $result_verify_form = mysqli_query($dbc, $query_verify_form);
    
        if (mysqli_num_rows($result_verify_form) == 1) { 
                  $form_icaauth = md5(uniqid(rand(), true));
                  error_reporting(E_ALL);
                  $query_insert_user = "UPDATE roster SET fullname='$fullname', form_ica_initials='$initials', API='$API', form_icaauth='$form_icaauth', form_ica_ip='$DOCSIGNEDBYIP'";
    
             $result_insert_user = mysqli_query($dbc, $query_insert_user);
        if (!$result_insert_user) {
            echo '<center><div class="error">Query Failed </div></center>';
            }
    
    if(空($error)){
    $query\u verify\u form=“从花名册中选择*,其中API='$API'和form\u ica\u缩写为空”;
    $result\u verify\u form=mysqli\u query($dbc,$query\u verify\u form);
    如果(mysqli_num_rows($result_verify_form)==1){
    $form_icaauth=md5(uniqid(rand(),true));
    错误报告(E_全部);
    $query_insert_user=“更新花名册集全名='$fullname',form_ica_initials='$initials',API='$API',form_icaauth='$form_icaauth',form_ica_ip='$DOCSIGNEDBYIP';
    $result\u insert\u user=mysqli\u query($dbc,$query\u insert\u user);
    if(!$result\u insert\u user){
    回显“查询失败”;
    }
    
    首先,我必须将if(mysqli_num_rows($result\u verify\u form)==1)
    0
    更改为
    1
    以返回Yes,我们找到了该记录


    然后,我不得不将
    插入到…值中
    更改为
    更新…集
    。我还添加了
    和表单的首字母缩写为空
    ,以验证用户尚未填写此表单。如果他们填写了,我们会提示消息检查他们的电子邮件。如果他们没有,我们会运行
    更新

    我不是f完全理解您的确切问题,但听起来您想要的问题可以使用另一个查询构造(如果您使用的是MySQL?)来解决。您可以在重复键更新时执行插入到表中的操作,该操作仅在主(或复合)键键不存在,否则它将更新匹配行:我理解您的建议,这是有意义的,但是这仍然不能真正解决我的
    if(mysqli\u num\u rows($results\u verify\u form)==0)
    你有什么建议吗?@JeremyHarris有两件事。首先,这里缺少一个引号
    echo'
    如果它是你的代码的一部分,请修改你的问题,因为它会突出显示堆栈的语法。其次,你说“更新现有用户字段”,但我没有看到
    更新表
    ,我只看到
    插入到
    @LeviZoeschI中。我相信这个查询很有效,是我的if语句给我造成了巨大的破坏@Fred ii-
    if (empty($error)) { 
          $query_verify_form = "SELECT * FROM roster WHERE API='$API'  AND form_ica_initials IS NULL";
          $result_verify_form = mysqli_query($dbc, $query_verify_form);
    
        if (mysqli_num_rows($result_verify_form) == 1) { 
                  $form_icaauth = md5(uniqid(rand(), true));
                  error_reporting(E_ALL);
                  $query_insert_user = "UPDATE roster SET fullname='$fullname', form_ica_initials='$initials', API='$API', form_icaauth='$form_icaauth', form_ica_ip='$DOCSIGNEDBYIP'";
    
             $result_insert_user = mysqli_query($dbc, $query_insert_user);
        if (!$result_insert_user) {
            echo '<center><div class="error">Query Failed </div></center>';
            }