Форма PHP не будет публиковать

0

Я только что реализовал mysql_real_escape_string(), и теперь мой script не будет записывать в БД. Все было отлично, прежде чем добавить mysql_real_escape_string():

Любые идеи?

$name = mysql_real_escape_string($_POST['name']);
$description = mysql_real_escape_string($_POST['description']);
$custid = mysql_real_escape_string($_SESSION['customerid']);

mysql_send("INSERT INTO list 
              SET id = '',  
                  name = '$name', 
                  description = '$description', 
                  custid = '$custid' ");
  • 2
    Что такое mysql_send? Есть ли сообщения об ошибках? Как выглядит запрос перед отправкой в mysql (попробуйте вывести его на экран)?
  • 0
    Подсказка по отладке: поместите оператор SQL в переменную, т. $sql = "INSERT INTO list SET id = '', name = '$name'" т. Д., А затем echo $sql (или die($sql) ). Это может пролить некоторый свет на то, что вызывает проблему. Кроме того, как вы подключаетесь к базе данных, самостоятельно или через какой-то сторонний API? Если последнее, возможно, есть метод, который API рекомендует для экранирования данных.
Теги:
forms
post

5 ответов

2
Лучший ответ

что это за функция mysql_ отправить?
что если изменить его на mysql_query();

  • 0
    OP сказал, что это работает, пока он не начал использовать mysql_real_escape_string. Он не сказал, что он изменил эту строку кода.
1

Это должно быть легко понять, что происходит.

Fist вместо отправки запроса, который вы создаете в базу данных, эхо-сигнал (или запишите его) и посмотрите, что вы действительно отправляете в базу данных.

Если это не делает очевидным, посмотрите, что должен сказать mysql_error().

0
       mysql_connect("localhost", "username", "password") or die(mysql_error());
       mysql_select_db("database") or die(mysql_error());
       $name = mysql_real_escape_string($_POST['name']);
       $description = mysql_real_escape_string($_POST['description']);   
       $custid = mysql_real_escape_string($_SESSION['customerid']);

       //If you doing Update use this code
       mysql_query("UPDATE list SET id = '', name = '$name', description = '$description' WHERE custid = '$custid' ") or die(mysql_error());
       //OR if you doing Insert use this  code.
       mysql_query("INSERT INTO list(name, description, custid) VALUES('$name', '$description', '$custid')") or die(mysql_error());
       //If custid is Integer type user $custid instead of '$custid'.                 

Если вы обновляете записи в таблице списка на основе custid, используйте команду UPDATE ИЛИ, если вы вставляете записи в таблицу списка, используйте команду INSERT.

0

Типичный отказ от понимания того, как использовать определенные функции... Вы используете mysql_real_escape_string для сырых входных данных. Вы когда-нибудь слышали о санкционировании/подтверждении ввода? mysql_real_escape_string не имеет смысла для чисел. Если вы проверили переменную как число, вам не нужно ее избегать.

mysql_send - это псевдоним для mysql_query? Используйте код отладки, добавьте echo mysql_error(); после mysql_send(...).

0

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

$connection = mysql_connect(HOST, USERNAME, PASSWORD);
$cleanstring = mysql_real_escape_string("my string", $connection);
  • 0
    Нет, если у вас уже есть открытое соединение
  • 0
    @blockhead, я собирался сказать это. Вы можете быть перепутаны с mysqli_real_escape_string, который нуждается в своем первом аргументе, чтобы быть ссылкой на базу данных.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню