2015-11-28 4 views
0

У меня есть небольшая проблема с моим Update запросом к chnage профилей InfosPHP - MYSQL Update Query не работает полный

Проблема теперь:

  • Мой Update Query не работает укомплектовать, Е -Mail query, но запрос статуса не работает.

PHP КОД

if(!empty($_POST)) { 
    $query = "UPDATE users SET"; 
    if(!empty($_POST['email']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) && $_POST['email'] != $_SESSION['u']['email']) { 
    $s_mail = $_POST['email']; 
    $row = mysql_num_rows(mysql_query("SELECT email FROM users WHERE email='$s_mail'")); 
    if($row != 0) { 
     header("Location: ".$l['settings']."?msg=2"); 
     die("REDIRECT"); 
    } 
    $query .= " `email`='".$_POST['email']."'"; 
    $_SESSION['u']['email'] = $_POST['email']; 
    } else if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
    header("Location: ".$l['settings']."?msg=3"); 
    die("REDIRECT"); 
    } 
    //PROBLEM starts here 
    if(!empty($_POST['status'])) { 
    $query .= ",`status`='".$_POST['status']."'"; 
    $_SESSION['u']['status'] = $_POST['status']; 
    } 
    //AND ends here 
    $query .= " WHERE id='".$_SESSION['u']['id']."'"; 
    mysql_query($query); 
    header("Location: ".$l['settings']."?msg=1"); 
    die("REDIRECT"); 
} 

HTML FORM

<input maxlength="200" type="text" class="form-control" placeholder="Status" name="status" value="<?php //ECHO STATUS ?>" /> 

Может быть кто-то может мне помочь.

+0

Если вы планируете, чтобы не доверенные люди имели к нему доступ (например, помещая его в Интернет), взгляните на всегда соответствующий вопрос о [SQL-injection Prevention] (https: // stackoverflow. ком/вопросы/60174 /, как-может-я-предотвращать-SQL-инъекции-в-PHP). Впоследствии это может сэкономить вам массу неприятностей. – tarleb

ответ

0

На вашем $ запросе у вас есть

$query .= ",`status`='".$_POST['status']."'"; 

удалить запятую сделать это как этот

$query .= " `status`='".$_POST['status']."'"; 
+0

Теперь первая позиция находится в коде –

+0

@ DanielO. Только статус не работает? вы можете напечатать мне значение $ _POST ['status']. Вы проверяете символы, которые могут сделать вашу строку запроса недействительной, как «этот? – Standej

+0

Найти ERROR запрос E-Mail не будет вставляться каждый раз, когда запрос был «UPDATE users SET, status =« TEST TEST »WHERE id = '1'' –

0

Вам необходимо установить флаг для электронной почты условия как

$flag = FALSE;// set a flag 
if (!empty($_POST)) { 
    if (!empty($_POST['email']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) && $_POST['email'] != $_SESSION['u']['email']) { 
     $s_mail = $_POST['email']; 
     $row = mysql_num_rows(mysql_query("SELECT email FROM users WHERE email='$s_mail'")); 
     if ($row != 0) { 
      header("Location: " . $l['settings'] . "?msg=2"); 
      die("REDIRECT"); 
     } 
     $flag = TRUE;// set to true if success 

     $_SESSION['u']['email'] = $_POST['email']; 
    } else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
     header("Location: " . $l['settings'] . "?msg=3"); 
     die("REDIRECT"); 
    } 

    //PROBLEM starts here 
    if (!empty($_POST['status'])) { 
     $query = "UPDATE users SET"; 
     $query .= " `status`='" . $_POST['status'] . "'"; 
     if ($flag) {// if true then apply email condition 
      $query .= ",`email`='" . $_POST['email'] . "'"; 
     } 
     $query .= " WHERE id='" . $_SESSION['u']['id'] . "'"; 
     $_SESSION['u']['status'] = $_POST['status']; 
    } 
    //AND ends here 

    mysql_query($query); 
    header("Location: " . $l['settings'] . "?msg=1"); 
    die("REDIRECT"); 
} 

Примечания : - mysql устарел вместо использования mysqli ИЛИ pdo