经过多次修改后,我不明白为什么,希望能得到帮助:
<?php
// Fetch the user row from the query above
$userData = mysqli_fetch_array($query, MYSQL_ASSOC);
$password = $userData["password"];
if(isset($_POST['password2'])){
$p2 = $_POST['password2'];
}
$password2 = sha1($p2);
// Ajax calls this REGISTRATION code to execute
if($password2 == $password){
// GATHER THE POSTED DATA INTO LOCAL VARIABLES
$personname = preg_replace('#[^a-z ]#i', '', $_POST['personname']);
$email = mysqli_real_escape_string($db_conx, $_POST['email']);
$address_line1 = preg_replace('#[^a-z0-9 ]#i', '', $_POST['address_line1']);
$address_line2 = preg_replace('#[^a-z0-9 ]#i', '', $_POST['address_line2']);
$address_city = preg_replace('#[^a-z0-9 ]#i', '', $_POST['address_city']);
$address_state = preg_replace('#[^a-z0-9 ]#i', '', $_POST['address_state']);
$address_zip = preg_replace('#[^a-z0-9 ]#i', '', $_POST['address_zip']);
$address_country = preg_replace('#[^a-z ]#i', '', $_POST['address_country']);
////////电子邮件的重复数据检查
$sql1 = "SELECT email FROM users WHERE id='$id' AND activated='1' LIMIT 1";
if($email =! email){
$sql = "SELECT id FROM users WHERE email='$email' LIMIT 1";
$query = mysqli_query($db_conx, $sql);
$email_check = mysqli_num_rows($query);
if ($email_check > 0){
echo "That email address is already in use in the system";
exit();
}
//////////表单数据错误处理
else if($personname == "" || $email == "" || $password == "" || $address_country == "" || $address_line1 == "" || $address_line2 == "" || $address_city == "" || $address_state == "" || $address_zip == ""){
echo "The form submission is missing values.";
exit();
}
else {
////////结束表单数据错误处理////////开始将数据替换到数据库
//////将用户信息添加到主站点表的数据库表中
$query = "UPDATE users (personname, email, address_line1, address_line2, address_city, address_state, address_zip, address_country)
VALUES('$personname','$email','$address_line1','$address_line2','$address_city','$address_state','$address_zip','$address_country')
WHERE id = '$id'";
if(mysql_query($query)){
echo "updated";
header("location: user.php?id=".$_SESSION["id"]);
} else{ echo "fail";}
}
exit();
}
?>
首先,if($password2 == $password){
没有一个右大括号}
,它可能正好属于$address_country...
之后。然而,你的支撑有点不对劲,exit;
之后的最后一个}
应该和其他几个一起向上移动。以if($email =! email){
为例。
您还将API与需要为if(mysqli_query($db_conx, $query))
和MYSQL_ASSOC
到MYSQLI_ASSOC
的if(mysql_query($query))
混合。这些不同的MySQL函数不会相互混合。此外,请确保您已经启动会话,因为您正在使用会话。
然后这条线if($email =! email){
-email
被视为常数,也是不正确的。它应该读作if($email != email){
。但是,我不知道要使用/检查哪个变量(或字符串),甚至不知道要从表中的一行中进行检查。
然后这个查询的变量$sql1
-它处于不确定状态。我不知道你想用它做什么。
如果你想将一行与"电子邮件"匹配,那么你需要做的就是从DB中获取该行。
- 咨询:http://php.net/manual/en/mysqli-result.fetch-row.php
见脚注
试试下面的,我已经重新安排了你的支撑:
旁注:
关于email
是常数,请检查您希望对我上面所说的内容做些什么。下面没有更改。
<?php
// Fetch the user row from the query above
$userData = mysqli_fetch_array($query, MYSQLI_ASSOC);
$password = $userData["password"];
if(isset($_POST['password2'])){
$p2 = $_POST['password2'];
}
$password2 = sha1($p2);
// Ajax calls this REGISTRATION code to execute
if($password2 == $password){
// GATHER THE POSTED DATA INTO LOCAL VARIABLES
$personname = preg_replace('#[^a-z ]#i', '', $_POST['personname']);
$email = mysqli_real_escape_string($db_conx, $_POST['email']);
$address_line1 = preg_replace('#[^a-z0-9 ]#i', '', $_POST['address_line1']);
$address_line2 = preg_replace('#[^a-z0-9 ]#i', '', $_POST['address_line2']);
$address_city = preg_replace('#[^a-z0-9 ]#i', '', $_POST['address_city']);
$address_state = preg_replace('#[^a-z0-9 ]#i', '', $_POST['address_state']);
$address_zip = preg_replace('#[^a-z0-9 ]#i', '', $_POST['address_zip']);
$address_country = preg_replace('#[^a-z ]#i', '', $_POST['address_country']);
}
//////// DUPLICATE DATA CHECKS FOR EMAIL
$sql1 = "SELECT email FROM users WHERE id='$id' AND activated='1' LIMIT 1";
// unsure what you want to do here
if($email != email){
$sql = "SELECT id FROM users WHERE email='$email' LIMIT 1";
$query = mysqli_query($db_conx, $sql);
$email_check = mysqli_num_rows($query);
if ($email_check > 0){
echo "That email address is already in use in the system";
exit();
}
}
////////// FORM DATA ERROR HANDLING
else if($personname == "" || $email == "" || $password == "" || $address_country == "" || $address_line1 == "" || $address_line2 == "" || $address_city == "" || $address_state == "" || $address_zip == ""){
echo "The form submission is missing values.";
exit();
}
else {
//////// END FORM DATA ERROR HANDLING //////// Begin Replacement of data into the database
//////Add user info into the database table for the main site table
$query = "UPDATE users (personname, email, address_line1, address_line2, address_city, address_state, address_zip, address_country)
VALUES('$personname','$email','$address_line1','$address_line2','$address_city','$address_state','$address_zip','$address_country')
WHERE id = '$id'";
if(mysqli_query($db_conx, $query))
echo "updated";
header("location: user.php?id=".$_SESSION["id"]);
} else{ echo "fail";}
}
exit();
?>
旁注:
您使用的是UPDATE users...
,这不是UPDATE的工作方式。
语法为UPDATE table SET column_x = '$var'
阅读更新:
- http://www.mysqltutorial.org/mysql-update-data.aspx
即从该页面:
UPDATE [LOW_ PRIORITY] [IGNORE] table_name [, table_name...]
SET column_name1 = expr1
[, column_name2=expr2 ...]
[WHERE condition]
如果这不是你想做的更新,那么使用INSERT INTO
,我更倾向于它。
- 将
or die(mysqli_error($db_conx))
添加到mysqli_query()
,您将看到错误
脚注:
下面是一个获取行的示例:
$sql1 = "SELECT email FROM users WHERE id='$id' AND activated='1' LIMIT 1";
$result = mysqli_query($db_conx, $sql1);
$row = mysqli_fetch_row($result);
$email_row = $row['email'];
然后你可以做:
if($email != $email_row){...}