由于某种原因,最后一行出现分析错误


Parse error on last line for some reason?

经过多次修改后,我不明白为什么,希望能得到帮助:

<?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_ASSOCMYSQLI_ASSOCif(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){...}