Не срабатывает функция обновления Mysql таблицы?

123 4
anton000
На сайте с 10.05.2013
Offline
32
1527

Такая, проблема. Хочу организовать обновления категорий на сайте. Есть таблица menu в неё id title title_url parent. Суть такая: пользователь выбирает какую категорию, стоит редактировать за это отвечает файл update_category:


<center width=100%>
<form name="id" width=60% action="u_c.php" method="post">
<?
include "bd.php";

$row = "SELECT * FROM menu";

$array = mysql_query($row);

echo "<p>Изменить категорию:
<div class='lineForm'>
<select id='country' class='sel80' name=id size=1 tabindex=2>";

while($row = mysql_fetch_array($array)) {
if($row[title]) {

if($row[title_url]) {
echo "<option value='".$row[id]."'>".$row[title]."</opiton>";
}
}
}

?>
<br>
<input type="submit" value="Изменить" />
</select>
</div>
</form>
</center>

Далее он передаёт параметры файлу u_c.php:


<?
include "bd.php";

$res = $_POST["id"];

//$ro = ('SELECT * FROM menu WHERE id="$result"', $db);
$result = mysql_query("SELECT * FROM menu WHERE id='" . $res . "'",$db);


$sort = mysql_fetch_array($result);

$id = $sort[id];
$title = $sort[title];
$title_url = $sort[title_url];
$parent = $sort[parent];

?>
<form action="update.php" method="post">
<p>
<label color=#CCCCCC>Название категории:<br></label>
<input name="title" type="text" size="15" maxlength="15" value="<? echo $title?>"/>
</p>

<p>
<label color=#CCCCCC>URL - категории:<br></label>
<input name="title_url" type="text" size="15" maxlength="15" value="<? echo $title_url?>"/>
</p>

<p>
<label color=#CCCCCC>Основная категория:<br></label>
<input name="parent" type="text" size="15" maxlength="15" value="<? echo $parent?>"/>
</p>

<input type="submit" value="Сохранить" />
</form>
</div>

В файле u_c.php выводятся поля, в которые уже вставлены данные из таблицы. Но пользователь может их подредактировать и нажать "сохранить".

Далее этот файл отсылает данные файлу update.php:

<?

include "bd.php";
$a = "UPDATE menu SET title= '" . $_POST[title] . "', title_url= '" . $_POST[title_url] . "', parent= '" . $_POST[parent] . "' WHERE id='" . $res . "'";

$b = mysql_query($a);


if($b) {
echo "Категории обновились";
}
else echo "Категории не обновились";
?>

Проблема в следующем: в полях где пользователю можно редактировать данные всё прекрасно отображается, но вот после кнопки "сохранить" вылазит сообщение о том что "Категории обновились". Но на самом же деле всё осталось по прежнему. Где моя ошибка?

Благодарю за ответ!

TF-Studio
На сайте с 17.08.2010
Offline
334
#1

u_c.php?id=oh'oh

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
anton000
На сайте с 10.05.2013
Offline
32
#2
TF-Studio:
u_c.php?id=oh'oh

У меня параметры из файла в файл передаются же методом post а не get. Или как применить ваш ответ?

SG
На сайте с 22.03.2013
Offline
7
#3
anton000:
У меня параметры из файла в файл передаются же методом post а не get. Или как применить ваш ответ?

Какие параметры он тебе передает ? :)

print_r($_POST); //в u_c.php для начала.

а потом echo $res; //в update.php

в общем убедится что действительно id передается, потом убедится что mysql не возвращает error. дебаж запросы к mysql для верности http://www.php.su/mysql_error

если все ок то update 100% будет ;)

TF-Studio
На сайте с 17.08.2010
Offline
334
#4

Я показалась ошибку в коде, потенциальную уязвимость.

Если нету понимания - то не стоит дальше заниматься этим.

Читаем книги, учим ФАК.

anton000
На сайте с 10.05.2013
Offline
32
#5
setka_gs:
Какие параметры он тебе передает ? :)

print_r($_POST); //в u_c.php для начала.

а потом echo $res; //в update.php

в общем убедится что действительно id передается, потом убедится что mysql не возвращает error. дебаж запросы к mysql для верности http://www.php.su/mysql_error

если все ок то update 100% будет ;)

Сделал, выводит --- Array ( [id] => 3 ). Значит всё ОК. Ему id категории успешно передаётся.

Начало, файла стало такое:


include "bd.php";

print_r($_POST);

$res = $_POST["id"];

echo $res;

$result = mysql_query("SELECT * FROM menu WHERE id='" . $res . "'");


$sort = mysql_fetch_array($result);

Но, это не решает, данную проблему.

SG
На сайте с 22.03.2013
Offline
7
#6
TF-Studio:
Я показалась ошибку в коде, потенциальную уязвимость.
Если нету понимания - то не стоит дальше заниматься этим.
Читаем книги, учим ФАК.

к чему это? может он для себя на localhost кодит... там ошибка привести к int переменную, 5 строк кода... хорош.

---------- Добавлено 27.06.2013 в 17:05 ----------

anton000:
Но, это не решает, данную проблему.

у тебя два сценария. алгоритм такой. 1 убедится что переменная передается через ОБА сценария. 2 Сделать дебаг ошибок mysql. В твоем случае... может быть ВСЕГО две ошибки либо не передается одна из переменных в сценарий update.php. либо mysql возвращает error. Все...

даже 99.9% mysql возвращает error.

$a = "UPDATE menu SET title= '" . $_POST[title] . "', title_url= '" . $_POST[title_url] . "', parent= '" . $_POST[parent] . "' WHERE id='" . $res . "'";

куда столько пробелов ??

anton000
На сайте с 10.05.2013
Offline
32
#7
setka_gs:
к чему это? может он для себя на localhost кодит... там ошибка привести к int переменную, 5 строк кода... хорош.

---------- Добавлено 27.06.2013 в 17:05 ----------



у тебя два сценария. алгоритм такой. 1 убедится что переменная передается через ОБА сценария. 2 Сделать дебаг ошибок mysql. В твоем случае... может быть ВСЕГО две ошибки либо не передается одна из переменных в сценарий update.php. либо mysql возвращает error. Все...

Как, понять - "привести к int переменную, 5 строк кода" ? Разъясните пожалуйста, как это сделать?

TF-Studio
На сайте с 17.08.2010
Offline
334
#8
к чему это? может он для себя на localhost кодит... там ошибка привести к int переменную, 5 строк кода... хорош.

К тому что подобные деятели, что-то поковыряют, где-то почитают, а потом начинают услуги оказывать.

И у многих заказчиков негативное отношение к разработчикам, потому что работает все через раз.

Начиная с таких http://yandex.ru/yandsearch?lr=2&text=mysql_error+expects+parameter+1+to+be+resource+boolean+given+in

и дальше по тексту

тут не привели типы, там проверку не сделали, тут с нагрузкой не рассчитали...

SG
На сайте с 22.03.2013
Offline
7
#9
anton000:
Как, понять - "привести к int переменную, 5 строк кода"

ну вот тут ты тупо присваиваешь переменной значение из глобального массива.

$res = $_POST["id"];

это не правильно в плане безопасности. Ты должен четко указать php какую переменную ты ждешь... int() - привести к числовому значению, это значит что ты укажешь php что ты ждешь ТОЛЬКО число. там еще есть string() строка. ну и так далее. http://www.php.su/learnphp/vars/?types

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

---------- Добавлено 27.06.2013 в 17:16 ----------

TF-Studio, мир, одуванчики, негатив портит жизнь, писс одним словом :)

anton000
На сайте с 10.05.2013
Offline
32
#10
setka_gs:
ну вот тут ты тупо присваиваешь переменной значение из глобального массива.


$res = $_POST["id"];

это не правильно в плане безопасности. Ты должен четко указать php какую переменную ты ждешь... int() - привести к числовому значению, это значит что ты укажешь php что ты ждешь ТОЛЬКО число. там еще есть string() строка. ну и так далее. http://www.php.su/learnphp/vars/?types

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

---------- Добавлено 27.06.2013 в 17:16 ----------

TF-Studio, мир, одуванчики, негатив портит жизнь, писс одним словом :)

Я так понял мне нужно

$res = (string) $_POST[id];

Я string() не нашёл)))

Да, и проверил echo mysql_error выдаёт 0. Да и переменная хорошо проходит во второй и третий файл. Сейчас что можно сделать?

---------- Добавлено 27.06.2013 в 17:39 ----------

TF-Studio:
К тому что подобные деятели, что-то поковыряют, где-то почитают, а потом начинают услуги оказывать.
И у многих заказчиков негативное отношение к разработчикам, потому что работает все через раз.
Начиная с таких http://yandex.ru/yandsearch?lr=2&text=mysql_error+expects+parameter+1+to+be+resource+boolean+given+in
и дальше по тексту
тут не привели типы, там проверку не сделали, тут с нагрузкой не рассчитали...

Если вы мне не верите, могу вам предоставить архив файлов моих разработок. И там чётко будет видно, что это не коммерческий скрипт.

Сейчас я пришёл просто в замещательство, в конечном файле сделал:

echo $res;

И пустота! Не понимаю, почему переменная не передалась в конечный файл?

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий