Обновите строку mysql в php - PullRequest
       2

Обновите строку mysql в php

0 голосов
/ 16 февраля 2012

У меня есть таблица, которая выглядит следующим образом:

имя, фамилия, имя пользователя, пароль, роль

студент студент студент@csd.auth.gr студент студент

student2 student2 student2@csd.auth.gr student2 student

, и я хочу иметь возможность редактировать строку в php.Значения взяты из html-файла следующим образом:

Имя пользователя

student2@csd.auth.gr <- это будет написано в текстеполе </em>

пароль

student2 <- это будет написано в текстовом поле </em>

Имя

студент2 <- это будет написано в текстовом поле </em>

Фамилия

студент2 <- Это будет написано в текстовом поле </em>

Роль

студент <- Это будет написано в текстовом поле </em>

Мой файл php:

<?php
$hostname = "localhost"; 
$database = "mydb"; 
$username = "myuser"; 
$password = "mypsw";
$link = mysql_connect( $hostname , $username , $password ) or 
        die("Prosoxi!Provlima stin sundesi me ton server : " . mysql_error());
mysql_select_db($database,$link);

mysql_query("UPDATE user 
         SET username = '".mysql_real_escape_string($_POST[nusername])."', 
         SET password = '".mysql_real_escape_string($_POST[npassword])."', 
         SET name = '".mysql_real_escape_string($_POST[nname])."', 
         SET surname = '".mysql_real_escape_string($_POST[nsurname])."', 
         SET role = '".mysql_real_escape_string($_POST[nrole])."' 
         WHERE username='".mysql_real_escape_string($_POST[us])."'");

mysql_close($link);
header("Location: users.php");
?>

1. Обновление не происходит, поэтому в файле php что-то не так, и я не могу его найти.

2.Как мне получить уже заполненные поля в html-файле с правильными значениями, если я выберу определенное имя пользователя?

Может кто-нибудь мне помочь?Заранее спасибо.:)

Ответы [ 5 ]

3 голосов
/ 16 февраля 2012

Здесь много чего происходит.

  1. Всегда используйте целое число в качестве первичного ключа, например: id MEDIUMINT NOT NULL AUTO_INCREMENT.Затем сделайте его первичным ключом.

  2. , вам нужно санировать ваш вход в базу данных, используя mysql_real_escape_string()

  3. , вам нужно объединить ваш запрос, так это должно выглядеть следующим образом:

    mysql_query ("ОБНОВЛЕНИЕ пользователя SET username = '" .mysql_real_escape_string ($ _ POST [nusername]). ". "'SET name ='" .mysql_real_escape_string ($ _ POST [nname]). "'SET surname ='" .mysql_real_escape_string ($ _ POST [nsurname]). "). "'WHERE username ='". Mysql_real_escape_string ($ _ POST [us]). "'");

Вот исправленный код:

    <?php
$hostname = "localhost"; 
$database = "mydb"; 
$username = "myuser"; 
$password = "mypsw";
$link = mysql_connect( $hostname , $username , $password ) or 
        die("Prosoxi!Provlima stin sundesi me ton server : " . mysql_error());
mysql_select_db($database,$link);

mysql_query("UPDATE user 
         SET username = '".mysql_real_escape_string($_POST['nusername'])."', 
         SET password = '".mysql_real_escape_string($_POST['npassword'])."', 
         SET name = '".mysql_real_escape_string($_POST['nname'])."', 
         SET surname = '".mysql_real_escape_string($_POST['nsurname'])."', 
         SET role = '".mysql_real_escape_string($_POST['nrole'])."' 
         WHERE username='".mysql_real_escape_string($_POST['us'])."'");

mysql_close($link);
header("Location: users.php");
?>

обратите внимание на одиночную кавычку, окружающую переменную _POST, $ _POST ['nusername'], в которой у вас было $ _POST [nusername].

Попробуйте и посмотрите, обновится ли он.

2 голосов
/ 16 февраля 2012

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

$sql = "UPDATE user 
            SET username = '".mysql_real_escape_string($_POST[nusername])."'
            SET password = '".mysql_real_escape_string($_POST[npassword])."'
            SET name = '".mysql_real_escape_string($_POST[nname])."'
            SET surname = '".mysql_real_escape_string($_POST[nsurname])."'
            SET role = '".mysql_real_escape_string($_POST[nrole])."'
            WHERE username='".mysql_real_escape_string($_POST[us])."'";

// test
echo $sql;

mysql_query($sql);
0 голосов

Очевидно, что в последнем коде, который вы опубликовали, есть синтаксическая ошибка, когда вы получаете данные из вашей записи $_POST[nusername], и она должна быть $_POST['nusername'], поскольку это индекс массива, и я также рекомендую повторить запрос и комментирование вызова заголовка, чтобы вы могли видеть, какой запрос отправляется на MySQL

0 голосов
/ 16 февраля 2012
   $query =  mysql_query("UPDATE user 
                SET username = '" .mysql_escape_string($_POST[nusername]) . "' 
                password = ' " .mysql_escape_string($_POST[npassword]) . "'
                name = '" . mysql_escape_string($_POST[nname]) . " '
                surname = '" . mysql_escape_string($_POST[nsurname])."'
                SET role = '".mysql_escape_string($_POST[nrole]) . "'
                WHERE username='" .mysql_escape_string( $_POST[us]) . "'");

Если все остальное терпит неудачу, отобразите оператор SQL, затем вставьте в браузер SQL / PHPMyAdmin и отладьте его там. Тогда вы просто замените код на безошибочный.


Вы должны убедиться, что отправляемые данные также не содержат SQL-инъекций. Кто-то может просто обойти это ..

0 голосов
/ 16 февраля 2012

Ваш запрос необходимо изменить, как показано ниже.

mysql_query("UPDATE user 
            SET username = '" .$_POST[nusername] . "' ,
            password = ' " .$_POST[npassword] . "',
            name = '" . $_POST[nname] . " ',
            surname = '" . $_POST[nsurname]',
            role = '$_POST[nrole] . "'
            WHERE username='" . $_POST[us] . "'");

Также вы открыты для атак с использованием SQL-инъекций. Так что вам лучше использовать функцию mysql_real_escape_string().

http://php.net/manual/en/function.mysql-real-escape-string.php

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

Шаг 1

Когда вам нужен оператор SQL в вашем PHP-коде. Вам лучше сначала написать его в своем инструменте MySQL и проверить его с примерами значений.

UPDATE subscriber 
    SET
    Subscriber_Name = 'Test' , 
    Email = 'test@test.com'     
    WHERE
    Subscriber_ID = '2' ;

Шаг 2:

Если запрос работает нормально, скопируйте его в php. И замените значения поддержкой mysql_real_escape_string().

$sql = "UPDATE subscriber 
    SET
    Subscriber_Name = '" .  mysql_real_escape_string($_POST['name']) . "' , 
    Email = '" .  mysql_real_escape_string($_POST['email']) . "'    
    WHERE
    Subscriber_ID = '" .  mysql_real_escape_string($_POST['id']) . "' ;"

Шаг 3:

Выполните ваш запрос.

$result = mysql_query($sql);

Шаг 4:

Вы можете увидеть любую, если есть ошибки.

echo mysql_error();

EDIT:

Ответ для вас. Вопрос 2 «Как я могу получить уже заполненные поля в html-файле с правильными значениями, если я выберу определенное имя пользователя?» может быть так.

Сначала вы должны написать оператор выбора и получить любые данные, которые вы хотите. Ex.

$sql = "SELECT user.username, user.name, user.surname , user.role  FROM USER WHERE user.username = '" . mysql_real_escape_string($_POST[us]) . "'";

$result = mysql_query($sql, $link) or die(mysql_error());

$row = mysql_fetch_assoc($result);

Затем введите свой HTML-код. Пример:

<form action="edit_user.php" method="post"> 
<p>Username<input type="text"name="nusername" size="40" value="<?php echo $row['username'];?>"></p> 
<p>Password<input type="password"name="npassword" size="40"></p>
<p>Name<input type="text"name="nname" size="40"  value="<?php echo $row['name'];?>"></p> 
<p>Surname<input type="text"name="nsurname" size="40"  value="<?php echo $row['surname'];?>"></p> 
<p>Role<input type="text"name="nrole" size="40"  value="<?php echo $row['role'];?>"></p> 
<p><input type="submit></p>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...