Перейти к содержимому

Сервис обмена электронных валют

Выбрать шаблон и создать сайт

Интересное поведение mysql_query("UPDATE")

#1 alex159

alex159
  • Пользователь
  • 492 сообщений
  • Репутация: 32
-1

Отправлено 29 Июль 2013 - 22:10

Есть два кода.
<?php
if(isset($_POST['red'])) {$red = $_POST['red'];}
include("config/bd.php");
$result3 = mysql_query("SELECT * FROM product WHERE id='$red'",$db);
	$myrow3 = mysql_fetch_array ($result3);
printf ("
<form action='red.php' method='post' name='addnew'>
<input name='red' type='hidden' value='%s' />
<p>Название товара: <input name='name' type='text' value='%s'></p>
<p>Цена: <input name='price' type='text' value='%s'></p>
	<p>Артикул: <input name='article' type='text' value='%s'></p>
<p>Категория: <input name='category' type='text' value='%s'></p>
<p>Ключевые слова: <input name='meta_keyword' type='text' value='%s'></p>
<p>Мета описание: <input name='meta_description' type='text' value='%s'></p>
<p>Фото: <input name='image' type='text' value='%s'></p>
<p>Описание: <textarea name='description' cols='20' rows='10'>%s</textarea></p>
	<input name='add' type='submit'>
</form>",$red,$myrow3['name'],$myrow3['price'],$myrow3['article'],$myrow3['category'],$myrow3['meta_keyword'],$myrow3['meta_description'],$myrow3['image'],$myrow3['description']);
?>
и
<?php
include("config/bd.php");
if(isset($_POST['name'])) {$name = $_POST['name'];}
if(isset($_POST['price'])) {$price = $_POST['price'];}
if(isset($_POST['article']))	 {$article = $_POST['article'];}
if(isset($_POST['category'])){$category = $_POST['category'];}
if(isset($_POST['meta_keyword'])) {$meta_keyword = $_POST['meta_keyword'];}
if(isset($_POST['meta_description'])) {$meta_description = $_POST['meta_description'];}
if(isset($_POST['image'])) {$image = $_POST['image'];}
if(isset($_POST['description'])) {$description = $_POST['description'];}
if(isset($_POST['red'])) {$red = $_POST['red'];}

	if(-1 < $price) {
$result2 = mysql_query("UPDATE product SET name='$name',price='$price',article='$article',category='$category',meta_keyword='$meta_keyword',meta_description='$meta_description',image='$image',description='$description' WHERE id='$red'")
or die("Invalid query: " . mysql_error());
if ($result2 = "true") { echo "Товар изменен"; }
	}
?>

mysql_query(); отдает значение true но изменение в бд не происходят.

Про бывал также ставить скрытое поле со значение id и куча всякой ерунды передавал ид через строку и тд.

Давно пользовался таким способом все было нормально, сейчас походу подзабыл(

Есть варианты проблемы?

 

 

  • 0

#2 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 29 Июль 2013 - 23:32

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


1. кто тебя так учил проверку делать?
if(-1 < $price)

2. а это что за
echo 0.;

3. у тебя запрос сформирован неверно, глупости. ты вставляешь переменные, но строка в одинарных кавычках не будет разбираться на переменные
4. в запросе смотри name="name"

продолжать?
  • 0

#3 alex159

alex159
    Topic Starter
  • Пользователь
  • 492 сообщений
  • Репутация: 32

Отправлено 30 Июль 2013 - 11:20

неверно,


То я уже от фонаря по наставлял.

Скобки я понял пытался пере делать подругой код который я увидел.

С самого начала было так. (изменил) код.

Насчет проверки что бы время не терять и просто проверить как будет реагировать скрипт.
  • 0

#4 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 30 Июль 2013 - 11:47

alex159, Вы так и не исправили все ошибки, на которые указали. Попробую еще раз перечислить:
1. В запросе первая пара поле=значение уже передается с ошибкой - пропущен знак доллара для переменной $name: UPDATE product SET name='$name'
2. Строковые данные, вставляемые в запрос, нужно экранировать... хорошо еще если на сервере включены волшебные кавычки, а если нет и в запрос попадет слово с апострофом? Попробуйте отключить волшебные кавычки и передать к примеру, в качестве имени - д'Артаньян.
3. Вот так вот - if ($result2 = "true") - проверять не очень хорошо... во-первых, Вы не проверяете равенство (==), а выполняете операцию присваивания (=)... во-вторых, даже если запрос не вернул ошибку, то это отнюдь не значит, что в БД этот запрос хоть что-то изменил, а потому заявлять уверенно об успехе изменения товара, пожалуй, чересчур оптимистично с подобной проверкой :) для проверки есть специальная функция - mysql_affected_rows() - посмотрите пример ее использования в мануале и рекомендую проверять изменения в БД именно с помощью нее...
Ну и булево значение TRUE - это не строка, а потому обрамлять ее кавычками совсем не обязательно... интерпретатор-то поймет, что нужно сделать и приведет строку к нужному типу, но код от этого не становится лучше.
  • 1


#5 alex159

alex159
    Topic Starter
  • Пользователь
  • 492 сообщений
  • Репутация: 32

Отправлено 30 Июль 2013 - 16:15

matroskin8, Разобрался спасибо. Я только начинаю и много еще не знаю. А почему название товара не изменялось на "name"?

С моей точки зрения название товара должно было стать name, но когда я побывал делать. Даже цена не менялась.
  • 0

#6 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 30 Июль 2013 - 16:34

А почему название товара не изменялось на "name"? С моей точки зрения название товара должно было стать name

А, так Вы сознательно помещали туда не значение переменной, а эту строку? Ну если так, тогда первый пункт снимается. Ну а почему не выполняется запрос - это уже вопрос отладки. Для этого лучше сначала формировать текст запроса и только потом выполнять. Делается это для того, чтобы можно было распечатать запрос на экран и посмотреть все, что туда попадает... ну и к тому же этот запрос потом можно просто скопировать и попробовать выполнить через тот же phpMyAdmin, чтобы посмотреть корректность его выполнения... примерно так:
$query = ("UPDATE product SET name = '$name', price = '$price', article = '$article', category = '$category', meta_keyword = '$meta_keyword', meta_description = '$meta_description', image = '$image', description = '$description' WHERE id='$red'");
exit($query); // а здесь мы можем распечатать запрос на экран и посмотреть в каком виде он будет отправлен на сервер
$res = mysql_query($query) or die(mysql_error()); // если нашли ошибку, тогда убираем/комментируем exit() и наслаждаемся проделанной работой <img src='http://www.masterwebs.ru/public/style_emoticons/<#EMO_DIR#>/smile.png' class='bbc_emoticon' alt=':)' />

  • 0


#7 alex159

alex159
    Topic Starter
  • Пользователь
  • 492 сообщений
  • Репутация: 32

Отправлено 30 Июль 2013 - 17:03

Большое спасибо. Кроме ответов на мои вопросы получил дополнительную информацию.

А насчет знака $ я его действительно забыл и и-за этого не работал скрипт. А сейчас хотел просто узнать почему так вышло что он вообще не отправлял данные в Бд.


  • 0

#8 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 30 Июль 2013 - 17:12

Пожалуйста)
  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru