LINUX.ORG.RU

Странная ошибка


0

0

Добрый день, подскажите, куда надо копать;)
Ситуация такая. Скрипт выводит на страницу все новости из базы, для администратора так же выводится кнопочка "удалить новость".

По этой ссылке запускается скрипт удаления:

<?php
require 'functions.php';
$id = $_GET['id'];
deletepost($id);
header("Location: index.php");
exit();
?>

В самой функции deletepost() проходит простенькая проверка айди по типу (settype ( $id, "integer" )) и на всякий пожарный - регэкспом (не знаю, нужно ли это после типа?). Далее - простенький запрос:

$r = mysql_query ( "DELETE FROM news WHERE id='" . $id . "' LIMIT 1" ) or die ( "Не удается удалить новость." );

Cообщение удаляется (по идее) и загружается главная страница.

На локалхосте все работает, сообщений о ворнингах и прочего нет. Как часы в общем;)

Как только заливаю на внешний сервер - удаляться перестает.
Может быть есть какие то детские грабельки, о которые я бьюсь, не зная о них? Помогите пожалуйста:)

Зы: капча tigers какбэ на что-то намекает...

anonymous

что значит удоляться перестает ?

в скрипт удаления напиши (а лучше куда-нибудь по ближе к началу)
ini_set('display_errors', true);
error_reporting(E_ALL | E_NOTICE);

и ошибки в студию





anonymous
()
Ответ на: комментарий от anonymous

Ага, спасибо, вижу ошибки. Правда понять не могу одну вещь:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'sergeyadver'@'localhost' (using password: NO) in /../functions.php on line 747

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /../functions.php on line 747

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /../functions.php on line 758

Собсно, откуда взялся некто "sergeyadver'@'localhost", если я задаю имя пользователя через константу, которая у меня равна "user"? Что бы это могло значить?)) Я прямо чувствую, что пишу нечто ламерское, но правда не понимаю)

anonymous
()
Ответ на: комментарий от anonymous

Посмотрел в список юзеров в разных базах - такого нет. Откуда он там то появился?)

ps. Меня зовут не Сергей, а кроме меня скрипт не кто не трогал... И сомневаюсь, что кто-то стал бы ломать бесхозный новостной скрипт:)

anonymous
()
Ответ на: комментарий от anonymous

С каждым обновлением там появляется новый логин, как будто из какого-то файла... Но как?)

В файле с настройками есть чёткая запись: define ( "USERNAME", "user" );

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

anonymous
()
Ответ на: комментарий от anonymous

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

Спасибо анониму за участие;)

Но все-таки, кто все эти люди? (с)

anonymous
()

>$id = $_GET['id'];

>$r = mysql_query ( "DELETE FROM news WHERE id='" . $id . "' LIMIT 1" )

Я даже ничего говорить не буду.

anonymous
()
Ответ на: комментарий от anonymous

глобально и надежно, что тут еще сказать :)

vden ★★
()
Ответ на: комментарий от anonymous

>>$id = $_GET['id'];

>>$r = mysql_query ( "DELETE FROM news WHERE id='" . $id . "' LIMIT 1" )

>Я даже ничего говорить не буду.

действительно, лучше помолчите.

>В самой функции deletepost() проходит простенькая проверка айди по типу (settype ( $id, "integer" )) и на всякий пожарный - регэкспом (не знаю, нужно ли это после типа?)

anonymous
()
Ответ на: комментарий от anonymous

мягко говоря костыли, грубо - идиотизм.

anonymous
()
Ответ на: комментарий от anonymous

блин, ну нельзя же так глобально и надежно писать. Прочитай про prepared statements и идемпотентность GET.

phoenix ★★★★
()

>В самой функции deletepost() проходит простенькая проверка айди по типу (settype ( $id, "integer" )) и на всякий пожарный - регэкспом (не знаю, нужно ли это после типа?).

IMHO intval() должно быть достаточно.

php-coder ★★★★★
()
Ответ на: комментарий от Motiv_studenta

>все действия по добавлению, редактированию, удалению должны идти через POST.

Почему? POST как будто безопаснее.

anonymous
()
Ответ на: комментарий от diafour

и чем же? оно позволит детям на плохие ссылки не тыкать, а от эксплоитов не спасет никак, причем для POST нужно дополнительно обработку писать, чтобы не было "браузер уже послал сообщение бла-бла"

borisych ★★★★★
()
Ответ на: комментарий от borisych

>причем для POST нужно дополнительно обработку писать, чтобы не было >"браузер уже послал сообщение бла-бла"

если вам не сложно - в 2х словах можете рассказать про дополнительную обработку ?

спасибо

anonymous
()

>Я даже ничего говорить не буду.

Почему?)

>блин, ну нельзя же так глобально и надежно писать. Прочитай про prepared statements и идемпотентность GET.

почитал, спасибо:)

>и чем же? оно позволит детям на плохие ссылки не тыкать, а от эксплоитов не спасет никак, причем для POST нужно дополнительно обработку писать, чтобы не было "браузер уже послал сообщение бла-бла"

Согласен с предыдущем анонимом, что представляет из себя обработка?

И еще, откуда ж все таки берутся эти логины?)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.