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