2016-02-26 2 views
1

Я провел некоторое исследование проблем некоторых других людей здесь, но я не могу понять, что происходит не так. Я пытаюсь обновить свою форму, которая уже имеет данные текущего пользователя (кто входит в систему), но я хочу, чтобы они могли обновлять свой профиль.PHP не будет обновлять MySQL

Это то, что мой код выглядит следующим образом:

<?php 
     // Retreive db data 
    $me = $_SESSION['username']; 
    require('db.php'); 

    $data = "SELECT username, email FROM users WHERE username='$me'"; 

    $query = mysql_query($data); 
    $data2 = mysql_fetch_array($query); 



    // Updating 
    $Username=$data2['username'] ; 
    $Email= $data2['email'] ; 

    if(isset($_POST['save'])) 
    { 
    $username_save = mysql_real_scape_string($_POST['username']); 
    $email_save = mysql_real_scape_string($_POST['email']); 

    mysql_query("UPDATE users SET username ='$username_save', email ='$email_save' WHERE username = '$me'") 
    or die(mysql_error()); 
    echo "Saved!"; 

    } 
     ?> 




     <form role="form"> 
     <div class="form-group"> 
      <label for="username">Username: </label> 
      <input type="text" class="form-control" name="username_save" value="<?php echo $data2['username']?>"> 
     </div> 
     <div class="form-group"> 
      <label for="pwd">Email Address: </label> 
      <input type="email" class="form-control" name="email_save" value="<?php echo $data2['email']?>"> 
     </div> 
     <button input type="Submit" name="save" class="btn btn-info">Submit</button> 
      <button input type="Sumbit" name="delete" class="btn btn-danger">Delete</button> 
     </form> 

Когда я представить мои новые значения (значения эхо работает отлично) и нажмите кнопку отправить (имя пользователя = danielleeee [email protected]), мой URL выглядит следующим образом:

страницы/администратор/edit.php username_save = danielleeee & email_save = тест% 40danielle.com & сохранить =

Если бы кто-нибудь мог пролить свет на это для меня, это было бы фантастически! Спасибо.

+0

$ _POST метод не определен; поэтому узнайте, как использовать $ _POST; потому что вы создаете работы с методом $ _GET, а ваши vars находятся в $ _GET superglobal. –

+1

Прекратите использовать функции 'mysql_', они устарели долгое время. Вместо этого используйте 'mysqli_' или' PDO'. Вы также уязвимы для SQL-инъекций. Вместо этого используйте подготовленные заявления. – trincot

ответ

2

<form> по умолчанию применяется метод GET, если явно не подразумевается <form role="form">.

Таким образом, =><form role="form" method="post">

так как вы используете POST массивы.

Как ни странно, отчет об ошибках никого не должен был обманывать.

  • Я усвоил этот урок трудный путь однажды, "один раз".

Кроме того, убедитесь, что вы начали сеанс с тех пор, как используете сеансы.

Тем не менее, отчеты об ошибках бы поймали , что один, если он не был запущен, и бросил бы вам кое-что об этом.

Однако name="username_save" и name="email_save" таковыми не являются такими же, как ваши массивы POST здесь.

  • $_POST['username'] =>$_POST['username_save']
  • $_POST['email'] =>$_POST['email_save']

То должен соответствовать и сообщениям об ошибках бросили бы вы неопределенный индекс уведомление.

Добавить error reporting в начало файла (ов), который поможет найти ошибки.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// Then the rest of your code 

Sidenote: Отображение ошибок не должно быть сделано только в постановке, и никогда производства.


Сноски:

Лучше всего использовать условный !empty() для ваших массивов POST. ! является оператором «NOT» в PHP.

и гарантирует, что не пустые значения не передается.

т.е .:

if(isset($_POST['save'])) 
{ 

if(!empty($_POST['username_save']) && !empty($_POST['email_save'])){ 
$username_save = mysql_real_scape_string($_POST['username_save']); 
$email_save = mysql_real_scape_string($_POST['email_save']); 

mysql_query("UPDATE users SET username ='$username_save', email ='$email_save' 
      WHERE username = '$me'") 
or die(mysql_error()); 
echo "Saved!"; 

} 

} 

Sidenote: Вы можете заменить && (И) для || (OR), в зависимости от состояния вы хотите использовать.


Плюс, как указано. API MySQL_ будет удален из будущих версий PHP. Лучше всего перейти на MySQLi или PDO API и с помощью подготовленного оператора.

Список литературы:

+0

Спасибо! Это отлично поработало (будет выглядеть как правильно, но я должен подождать, по-видимому, 3 минуты). Только проблема, которую я сейчас получаю, заключается в том, что «имя пользователя» и «электронная почта» появляются как неопределенный индекс? – dplatt

+0

@dplatt Добро пожаловать. Перезагрузите мой ответ, я сделал правку об этом, когда я продолжал смотреть на ваш код. –

Смежные вопросы