2012-04-28 3 views
1

У меня возникли проблемы с вставкой этого в мою базу данных. Я думаю, что когда я пытаюсь преобразовать строку prdocutPrice или строку запаса в десятичные значения и значения int. Я вполне уверен, что я делаю все остальное, кто-то может подтвердить меня?Вставить элемент в базу данных

<?php 

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

     $errors = array(); 
     require_once ('mysql_connect.php'); 

      //This gets all the other information from the form 
      $name=$_POST['productName']; 
      $description=$_POST['productDescription']; 
      $price= floatval($_POST['productPrice']); 
      $stock= intval($_POST['productStock']); 


     if (empty($errors)) { 
      //Writes the information to the database 
      mysql_query("INSERT INTO products (name, description, price, stock) VALUES ($name, $description, $price, $stock)"); 
      $result = mysql_query($query); 

      if (mysql_affected_rows() == 1) { 
       // Show thank you message 
       echo '<span style="color:green;">Your product has been added.</span>'; 
      } else { 
       echo '<font color="red">We were unable to add your product to the database.</font>'; 
      } 

     } else { 
      echo '<font color="red"><h3>Error!</h3> 
      The following error(s) occured:<br /></font>'; 

      foreach ($errors as $msg) { 
       echo " - <font color=\"red\">$msg</font><br />\n"; 
      } 
     } 
    } 

?> 

ответ

5

Ни один из ваших строковых значений не правильно указаны в INSERT заявлении. Окружать их одинарными кавычками.

Кроме того, первое, что вам нужно - обязательно вызовите mysql_real_escape_string() на все значения ввода строки, поскольку они в настоящее время уязвимы для атак SQL-инъекций.

$name = mysql_real_escape_string($_POST['productName']); 
$description= mysql_real_escape_string($_POST['productDescription']); 
$price= floatval($_POST['productPrice']); 
$stock= intval($_POST['productStock']); 

Кроме того, вы вызываете mysql_query() дважды вместо того, чтобы хранить строку SQL в вашу переменную $query.

// Quote the string values, 
// store the SQL as a variable then pass it to mysql_query() 
$query = "INSERT INTO products (name, description, price, stock) VALUES ('$name', '$description', $price, $stock)"; 
$result = mysql_query($query); 

Вызов echo mysql_error(); помог бы отладить проблемы с SQL заявления.

Наконец, еще одно замечание я добавлю - в дополнение к вызову intval() или floatval() на строк, передаваемых из $_POST, как правило, это хорошая идея, чтобы убедиться, что цифры на самом деле числа. В противном случае, если они не являются числовыми значениями, они будут отбрасываться до 0, и вы получите нули в своей базе данных, когда вы, вероятно, не должны были вставлять их вообще (поскольку это недопустимые данные).

if (is_numeric($_POST['productPrice'])) { 
    $price = floatval($_POST['productPrice']); 
} 
else // non numeric value, don't do the insert with bad data 

Для положительных или нулевых целых чисел, я хотел бы использовать ctype_digit():

if (ctype_digit($_POST['productStock'])) { 
    $stock = intval($_POST['productStock']); 
} 
else // bad input value, don't do insert 
+0

+1 для более быстрого ответа и найти двойной 'mysql_query()' –

+0

ооо mysql_error() вот под рукой! спасибо, что нашли время, чтобы дать мне такой отличный ответ! – Anicho

+0

в конце запроса $ у вас есть дополнительный ')' – Anicho

1

Чтобы ответить на ваш вопрос, я считаю, нужно в кавычки значений (особенно строк):

mysql_query("INSERT INTO products (name, description, price, stock) VALUES ('$name', '$description', '$price', '$stock')"); 

Но вам также нужно избегать ваших переменных, используя mysql_real_escape_string или переключиться на что-то вроде mysqli или PDO, чтобы использовать параметризованное querie s.

1

1) Вы уязвимы для SQL-инъекций. Прочитайте до http://bobby-tables.com ПЕРЕД тем, как вы продолжаете использовать любой из ваших кодов
2) Вы проигнорировали кавычки в своих запросах, вызывая синтаксические ошибки. Кроме того, нет никакой обработки вообще ошибки, и пусть ваши запросы удались:

mysql_query("INSERT INTO products (name, description, price, stock) VALUES ('$name', '$description', etc....) 
                      ^ ^

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

$result = mysql_query(...) or die(mysql_error()); 

Даже если строка запроса абсолютно вполне допустимо (и ваш определенно нет), есть слишком много других причин для запроса к не удалось NOT проверить успех/неудачу.

0

если (пусто ($ ошибок)) {// Записывает информацию в базу данных mysql_query ("INSERT INTO продукции (название, описание, цены, акции) VALUES ($ название, описание $, $ цена, $ акции)"); $ result = mysql_query ($ query);

если это не будет:

если (пусто ($ ошибок)) {// Записывает информацию в базе данных $ запроса = «INSERT INTO продукции (название, описание, цена, акции) VALUES ($ название, описание $, $ цена, $ акций "; $ результат = mysql_query ($ запроса);

0

mysql_query (" INSERT INTO продукции (название, описание, цены, акции) VALUES ($ имя , $ description, $ price, $ stock) ");

Вы не объявили переменную для своей mysql_query. Кроме того, у Майкла были некоторые хорошие соображения об экранировании строковых значений. Попробуйте это с помощью $ query переменные и одинарные кавычки вокруг значений.

$query = mysql_query("INSERT INTO products (name, description, price, stock) VALUES ('$name', '$description', '$price', '$stock')");