2013-12-18 3 views
4

Кто-нибудь знает, почему этот PHP-код не обновляет столбец pictures, он обновит остальные, но не будет столбцом изображений, чтобы обновлять информацию о пользователях. Таким образом, адрес электронной почты, пароль и изображение Я совсем новичок в PHP, так что я действительно не знаю, что искать, когда им ищет ошибкуПочему мой код PHP не обновляется?

<?php 

    require("common.php"); 

    if(empty($_SESSION['user'])) 
    { 
     header("Location: login.php"); 

     die("Redirecting to login.php"); 
    } 

    if(!empty($_POST)) 
    { 
     if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
     { 
      die("Invalid E-Mail Address"); 
     } 

     if($_POST['email'] != $_SESSION['user']['email']['picture']) 
     { 
      $query = " 
       SELECT 
        1 
       FROM users 
       WHERE 
        email = :email 
        picture = :picture 
      "; 

      $query_params = array( 
       ':email' => $_POST['email'] 
      ); 

      try 
      { 
       $stmt = $db->prepare($query); 
       $result = $stmt->execute($query_params); 
      } 
      catch(PDOException $ex) 
      { 
       die("Failed to run query: " . $ex->getMessage()); 
      } 

      $row = $stmt->fetch(); 
      if($row) 
      { 
       die("This E-Mail address is already in use"); 
      } 
     } 

     if(!empty($_POST['password'])) 
     { 
      $salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647)); 
      $password = hash('sha256', $_POST['password'] . $salt); 
      for($round = 0; $round < 65536; $round++) 
      { 
       $password = hash('sha256', $password . $salt); 
      } 
     } 
     else 
     { 
      $password = null; 
      $salt = null; 
     } 

     $query_params = array( 
      ':email' => $_POST['email'], 
      ':user_id' => $_SESSION['user']['id'], 
      ':picture' => $_POST['picture'], 
     ); 

     if($password !== null) 
     { 
      $query_params[':password'] = $password; 
      $query_params[':salt'] = $salt; 
     } 

     $query = " 
      UPDATE users 
      SET 
       email = :email 
       picture = :picture 
     "; 

     if($password !== null) 
     { 
      $query .= " 
       , password = :password 
       , salt = :salt 
      "; 
     } 

     $query .= " 
      WHERE 
       id = :user_id 
     "; 

     try 
     { 
      // Execute the query 
      $stmt = $db->prepare($query); 
      $result = $stmt->execute($query_params); 
     } 
     catch(PDOException $ex) 
     { 
      die("Failed to run query: " . $ex->getMessage()); 
     } 

     $_SESSION['user']['email']['picture'] = $_POST['email']; 

     header("Location: private.php"); 

     die("Redirecting to private.php"); 
    } 

?> 
+4

+1 на самом деле, используя подготовленные заявления и подтверждения ввода –

+0

Вам нужно добавить запятую между 'электронной почты =: Адрес электронной картинке =: picture'. Вы проверяете установку '$ _POST ['picture']'? – andrewsi

+1

Также нужен AND в предложении WHERE SELECT, нет? –

ответ

2

отсутствующей запятую после: адреса электронной почты в вашем UPDATE заявлении.

$query = " 
      UPDATE users 
      SET 
       email = :email 
       picture = :picture 
     "; 

должен быть

$query = " 
     UPDATE users 
     SET 
      email = :email, 
      picture = :picture 
    "; 

EDIT: В дополнение к этому вы также отсутствует параметр в вашем первом запросе:

 $query = " 
      SELECT 
       1 
      FROM users 
      WHERE 
       email = :email 
       picture = :picture 
     "; 

     $query_params = array( 
      ':email' => $_POST['email'] 
     ); 

Обратите внимание, как вы только претендуете: электронной почты в параметры запроса, но ваш запрос ожидает как: email и: picture.

Вам необходимо либо удалить picture = :picture из $query или добавить ':picture' => $_POST['picture'] к $query_params

+0

Хорошо, я только что обновил его, и он, похоже, работает, но работает – user3116240

+0

Убедитесь, что ваш ввод формы имеет 'name =" picture "', написано правильно. Вы уверены, что «картинка» - это не файл? – Leng

+1

Попробуйте var_dump ($ _ POST ['picture']) перед оператором $ query и посмотрим, что это за значение. – Matt

3

Вы пропускаете ,.

$query = " 
    UPDATE users 
    SET 
     email = :email 
     picture = :picture 
"; 

Вы должны изменить его

$query = " 
    UPDATE users 
    SET 
     email = :email, 
     picture = :picture 
"; 
Смежные вопросы