Mysql Помогите решить проблему с UPDATE

killnet

Новичок
Такая проблема, есть следующая форма на странице (работает корректно):
<form method="POST" action="1234.php">
<input name="id" type="value">
<input name="p" type="value">
<?php echo '<p>'.$message.'</p>'; ?>
<input name="submit" type="submit" value="Отправить">
</form>

Код на странице "1234.php"

$sql = "UPDATE products
SET p='".$_POST['p']."'
WHERE id='$id'"; // <--------- не работает
mysql_query($sql) or die(mysql_error());
mysql_close();
Не могу решить проблему с WHERE конкретного значения в mysql. Если убрать условие WHERE, то значения обновляются, так как и должны по всему столбцу, но мне нужно, только в соответствующем WHERE поле, подскажите пожалуйста
 

С.

Продвинутый новичок
SET p='".$_POST['p']."' // <----------- работает
WHERE id='$id'"; // <--------- не работает

И никаких идей совсем? Тяжелый случай!
 

killnet

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

Фанат

oncle terrible
Команда форума
никогда не оправдывайся.
оправдываясь, ты всегда выставишь себя ещё большим дураком.

работа с БД здесь не при чём.
в данном примере ты работаешь с переменными и строками РНР.
и непонятно, почему к двум переменным из одного источника ты обращаешься по-разному.
здесь дело даже не в строках РНР, а в логике и здравом смысле.

Если зарплата у тебя лежит в белом конверте, и тебе надо достать из нее 2 купюры достоинством 1000 и 500 рублей, почему ты тыщу берешь из конверта, а пятьсот ищешь в кармане?
 

Фанат

oncle terrible
Команда форума
про SQL инъекции ты, разумеется, никогда не слышал.
 

Фанат

oncle terrible
Команда форума
во-первых, почему только p?
во-вторых, mysql_real_escape_string сама по себе не предназначена для защиты от инъекций. она предназначена для форматирования строк.
при этом корректно отформатированная строка неуязвима для инъекций.
корректное форматирование включает в себя два правила:
- строка заключается в кавычки.
- и прогоняется через mysql_real_escape_string.
причём корректно форматировать надо всегда, любые строки. без всякой связи с инъекциями

поэтому в данном случае ты делаешь всё правильно.
но надо помнить, что сама по себе эта функция от инъекций не зачищает и применять её для любых элементов запроса, отличных от строк - бессмысленно
 

killnet

Новичок
во-первых, почему только p?
во-вторых, mysql_real_escape_string сама по себе не предназначена для защиты от инъекций. она предназначена для форматирования строк.
при этом корректно отформатированная строка неуязвима для инъекций.
корректное форматирование включает в себя два правила:
- строка заключается в кавычки.
- и прогоняется через mysql_real_escape_string.
причём корректно форматировать надо всегда, любые строки. без всякой связи с инъекциями

поэтому в данном случае ты делаешь всё правильно.
но надо помнить, что сама по себе эта функция от инъекций не зачищает и применять её для любых элементов запроса, отличных от строк - бессмысленно
Большое спасибо за столь подробное объяснение, очень вам признателен.
 
Сверху