2015-03-05 5 views
1

Я пытался обновить таблицу MYSQL на PHP, но, похоже, она не работает. Я настраиваю код, и иногда он говорит, что он обновился, когда нет, и в других случаях он говорит, что он не работает. Если бы кто-нибудь мог взглянуть на мой код и сказать, могут ли они увидеть что-то плохое, которое было бы очень оценено.Пытается обновить таблицу MYSQL в PHP

Форма:

<form method="post" action="update.php" name="update" id="update"> 
<input type="text" name="username" placeholder="Username" id="regUsername" value="<?php echo $row['username'] ?>" /><br><br> 
<input type="password" name="password" placeholder="Password" id="regPassword" value="<?php echo $row['password'] ?>" /><br><br> 
<input type="email" name="email" placeholder="Email Address" id="regEmail" value="<?php echo $row['email'] ?>" /><br><br> 
<p id="FillInFields"></p> 
<input type="submit" value="submit"/><br> 
</form> 

update.php

<?php 
$linkme = mysql_connect("*******","******","******"); 
if (!$linkme) 
    die ("Could not connect to database"); 
mysql_select_db("*******", $linkme); 

$username = mysql_real_escape_string($_REQUEST["username"]); 
$password = mysql_real_escape_string($_POST["password"]); 
$email = mysql_real_escape_string($_POST["email"]); 
$edit_id = $_POST['edit_id']; 


$query = mysql_query(
    "UPDATE user 
    SET username = '$username' , 
    password = '$password' , 
    email = '$email' 
    WHERE user_id = '$edit_id'"); 

mysql_query ($query) 
    or die ("Sorry but your details were not uploaded."); 

echo ("Your details didn't update"); 

mysql_close($linkme); 
?> 

edit_id является идентификатор сеанса, который находится на форме страницы: и сессия была запущена внутри всех страниц используя сеансы.

$edit_id = $_SESSION['edit_id']; 

Спасибо

+0

В вашей форме нет ссылки на 'edit_id', а также закрытие' '. Если они являются частью вашего производственного кода; опубликуйте его. В то же время добавьте отчет об ошибках в начало вашего файла (ов) сразу после открытия PHP-тега , например '

+0

Не сообщается об ошибках? * Dang Ralph, вы были быстрее меня * –

+0

@JayBlanchard Что вы можете сделать * Сэм? * * - Обед? Ах, теперь есть новая идея! –

ответ

4

Комментарий ответить закрыть вопрос, так как он сделал работу для ОП.

Попробуйте что-то вроде:

<input type="hidden" name="edit_id" value="<?php echo $row['id_row'] ?>"> 

['id_row'] быть примером указанной строки, так как вы итерация некоторый тип выборки строк из БД.

Поскольку вы используете сеансы, вам нужно назначить этот массив POST массиву сеансов после.


Sidenote об использовании устаревшей библиотеки MySQL вы используете:


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

Я рекомендую использовать функцию CRYPT_BLOWFISH или PHP 5.5's password_hash().
Для PHP < 5.5 используйте password_hash() compatibility pack.

+0

Это сработало, спасибо! И я рассмотрю использование mysqli –

+1

, это лучший выбор, andrew. лучший из них - PDO –

+0

@Andrew. Вы очень приветствуетесь. Андрей, я был рад помочь, * ура! * –

0

ваш переменный $ edit_id отсутствует в файле форма?

<form method="post" action="update.php" name="update" id="update"> 
<input type="text" name="username" placeholder="Username" id="regUsername" value="<?php echo $row['username'] ?>" /><br><br> 
<input type="password" name="password" placeholder="Password" id="regPassword" value="<?php echo $row['password'] ?>" /><br><br> 
<input type="email" name="email" placeholder="Email Address" id="regEmail" value="<?php echo $row['email'] ?>" /><br><br> 

Вы должны установить для ввода ключа (обычно скрытого типа) ключ ключа. В вашем случае $ edit_id

0

Есть несколько вещей, которые я заметил.

Для отладки SQL-запроса, разделите ваш запрос в вар

echo $query = "UPDATE user SET username = '$username', password = '$password', email = '$email' WHERE user_id = '$edit_id'"; 

    $query = mysql_query($query); //echo the $query in update.php and 
            //run the actual query in a sql dialog 
            //if that doesn't work, then there's 
            //something definitely wrong with your 
            //query. 


mysql_query ($query) 
    or die ("Sorry but your details were not uploaded."); 

    echo ("Your details didn't update"); //you have an echo statement in the 
             //middle of the script in an area 
             //without in a conditional loop, it 
             //will echo this error message even 
             //if the query committed 
             //successfully 

Вы также не хватает $ edit_id. Вы можете иметь скрытое поле в вашей форме

<input type="hidden" name="edit_id" value="edit_id_val"> 

Вам также не нужно ставить одиночные тики в запросе вокруг значения edit_id поля потому, что его целое.

0
<?php 

$linkme = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die('could not connect because of '.mysqli_error()) 

$username = mysqli_real_escape_string($linkme, $_REQUEST["username"]); 
$password = mysqli_real_escape_string($linkme, $_POST["password"]); 
$email = mysqli_real_escape_string($linkme, $_POST["email"]); 
$edit_id = mysqli_real_escape_string($linkme, $_POST['edit_id']); 


$q = "UPDATE user SET 
username = '$username', 
password = SHA1('$password'), 
email = '$email' 
WHERE user_id = '$edit_id'"; 

$r = mysqli_query($linkme, $q); 

if($r){ 
echo 'success'; 
}else{ 
echo '<p>'.$q.'</p>'; 
echo '<p>'.mysqli_error($linkme).'</p>'; 
} 
?> 

Вы должны шифровать пароль с помощью SHA1 или MD5 также вы упускаете edit_id

+1

Как это возможно исправить код OP, вы можете это объяснить? OP использует сеансы. –

+0

* «вы должны зашифровать пароль для использования SHA1 или MD5» * - ** NO !! **. Здесь читайте https://www.bentasker.co.uk/blog/security/201-why-you-should-be-asking-how-your-passwords-are-stored - [** CRYPT_BLOWFISH **] (http://security.stackexchange.com/q/36471) или PHP 5.5 ['password_hash()'] (http://www.php.net/manual/en/function.password-hash.php) функция. Для PHP <5.5 использовать ['password_hash() пакет совместимости'] (https://github.com/ircmaxell/password_compat) - то, что следует использовать. –

+0

это не о SHA1 или MD5, мат. –

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