2015-03-16 3 views
-1

Я не очень опытен с php и mysql. План заключался в создании текстового поля, в этом текстовом поле вы могли писать все, что захотите. Затем текст в текстовом поле будет обновлен до базы данных.Запрос в php не работает

Это говорит ошибка находится в пределах этой линии:

$sql = "UPDATE members SET tekst='$_POST['chat']' WHERE id='$_SESSION['id']'"; 

Эта строка в следующем коде:

<?php 
    error_reporting(0); 
    session_start(); 

    if(!session_is_registered(gebruikersnaam)) 
     { 
      header("location:form.php"); 
     } 
?> 

<?php 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') 
    { 
     $servername = "mysql.hostfree.nl"; 
     $username = "u411684910_info"; 
     $password = "rsg2015"; 
     $dbname = "u411684910_note"; 

     $conn = mysql_connect($servername, $username, $password, $dbname); 

     $sql = "UPDATE members SET tekst='$_POST['chat']' WHERE id='$_SESSION['id']'"; 

     if (!$conn) 
     { 
      die("Connection failed: " . mysql_connect_error()); 
     } 

     if (mysqli_query($conn, $sql)) 
     { 
      echo "New record created successfully"; 
      echo $_SESSION["id"]; 
     } 

     else 
     { 
      echo "Error: " . $sql . "<br>" . mysql_error($conn); 
     } 

     mysql_close($conn); 

    } 
    else 
    { 
?> 
     <form action="succes.php" method="POST"> 
      <input type="text" name="chat"> 
      <input type="submit" value="Submit"> 
     </form> 
<?php 
    } 
?> 

Спасибо заранее,

Gyon

+2

** ПРЕДУПРЕЖДЕНИЕ **: Это ужасно неуверенно, потому что эти параметры не были [надлежащим образом экранированы] (http://bobby-tables.com/php). Вы должны ** НИКОГДА не ставить данные '$ _POST' непосредственно в запрос: он создает гигантскую ошибку [SQL injection bug] (http: // bobby-tables.ком /). 'mysql_query' - устаревший интерфейс и не должен использоваться, он удаляется из PHP. Современная замена, такая как [PDO, не трудно учиться] (http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/). Руководство, подобное [PHP The Right Way] (http://www.phptherightway.com/), объясняет лучшие практики. – tadman

+0

Какова фактическая ошибка? Добро пожаловать в S/O. Возможно, цитаты? – Jonnny

+0

'mysqli' также допустим, если вы используете его правильно, то есть используете подготовленные операторы (http://php.net/manual/en/mysqli.prepare.php) и параметризованные запросы. – dan08

ответ

0

Я думаю, вы должны добавить к переменной следующие значения:

$session = mysqli_real_escape_string($_SESSION["id"]); 
$chat = mysqli_real_escape_string($_POST['chat']); 

то запрос

$sql = "UPDATE members SET tekst='$chat' WHERE id='$session'"; 
+0

У меня есть другие коды, связанные с этим. Это также приемлемо? – Gyon

+0

Это не удастся. Хотите знать, почему? Прочитайте функцию 'mysqli_real_escape_string()' http://php.net/manual/en/mysqli.real-escape-string.php. Кроме того, не используйте CAPS; это считается «криком». –

0

Не используйте mysql_query. Это устарело. Но попробуйте это:

$chat = mysql_real_escape_string($_POST['chat']); 
$id = $_SESSION['id']; 
$sql = "UPDATE members SET tekst = '$chat' WHERE id = '$id'"; 
0

Gyon,

Похоже, что проблема действительно с помощью следующей строки:

$ SQL = «члены UPDATE SET Tekst = '$ _ POST [' чат» ] 'WHERE id =' $ _ SESSION ['id'] '";

именно проблема с кавычками:

tekst='$_POST['chat']' WHERE id='$_SESSION['id']' 

Вы должны изменить это, чтобы быть что-то вроде следующего:

$sql = 'UPDATE members SET tekst="$_POST['chat']" WHERE id="$_SESSION['id']"'; 

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

$ chat = $ _POST ['chat'];

$ sessionId = $ _SESSION ['id'];

$ sql = "UPDATE members SET tekst = '$ chat' WHERE id = '$ sessionId'";

0

В коде есть так много несоответствий, которые нужно упомянуть, но, во-первых, сначала. Обратите внимание на свои кавычки.

"UPDATE members SET tekst='".$_POST['chat']."' WHERE id='".$_SESSION['id']."'"; 

Это будет выглядеть более читаемым в текстовом редакторе.

И как уже упоминалось другими людьми, не использовать расширение mysql.

Использовать Mysqli или PDO, которые являются более безопаснее использовать, поскольку у них есть функции экранирования и PDO ускоряет ваши строки для вас.

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