[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Итересная ситуация с SQl-запросом. Прям МАГИЯ)))
BlackGhost
Вот фрагмент кода:

$updateSQL = "UPDATE uspehi SET Ocenka=".$_POST['ocenka'].
" WHERE StudId=".$_POST['MM_Student_id']." AND PredmetId=".$_POST['MM_Predmet_id'];
//echo var_dump($updateSQL);
mysql_select_db($database_students_BD, $students_BD);
$Result = mysql_query($updateSQL, $students_BD);// or die(mysql_error());


Прикол в том, что при срабатывании этого кода выводится ошибка:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1


Но если я "раскоментирую" строчку //echo var_dump($updateSQL); , то запрос срабатывает и данные в таблице обновляются!!! Естественно, что на страницу выводится и содержимое $updateSQL и Warning: Cannot modify header information - headers already sent by (output started at Z:\home\student.ru\www\tabel.php:20) in Z:\home\student.ru\www\tabel.php on line 25. Но запрос то все равно срабатывает!!!!!!!!!!!!!!
Если я вместо var_dump($updateSQL) вывожу просто, например echo ' '; или echo 'бла бла бла бла';, то опять выскакивает эта самая ошибка. Запрос срабатывает только со строчкой echo var_dump($updateSQL)


Это какой-то бред!!! Кстати, заодно посмотрите, что может быть неправильного в запросе, хотя вроде все ок!

Вот на всякий случай содержимое var_dump($updateSQL):

Цитата
string(59) "UPDATE uspehi SET Ocenka=4 WHERE StudId=21 AND PredmetId=36"
Игорь_Vasinsky
во первых нужно данные фильтровать - если не хочешь чтоб тебя поломали
во вторых про конкатенацию почитайте. строковые данные дополнительно в одинарные кавычки упакуйте.



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
BlackGhost
Да нет там строковые данных, в том то и дело. Все три поля, которые обновляются - ЧИСЛА!

А почему запрос срабатывает-то с раскоментированной строчкой, А?!!!!
Invis1ble
Цитата
echo var_dump($updateSQL)

а echo перед var_dump зачем? )

по сабжу: а ты уверен, что ошибка именно в этом запросе возникает?
... or die(mysql_error() . ' [' . $updateSQL . ']');


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

BlackGhost
Да рен с ним с этим echo, ну урал echo и таже ошибка в итоге...

Ошибка именно в этом запросе, другого на странице нет.... Вот привел все данные к типу инт на всякий случай

$updateSQL = 'UPDATE uspehi SET Ocenka='.intval($_POST['ocenka']).' WHERE (StudId='.intval($_POST['MM_Student_id']).' AND PredmetId='.intval($_POST['MM_Predmet_id']).')'; 



Все равно тоже самое
inpost
Первый запрос БЕЗ скобок. Жалуется на скобки твой скрипт... Невозможно понять ошибки, потому что скобки НЕТ!!! Не может жаловаться на скобку, которой в запросе нет!
И что мы видим.... следующий запрос уже со скобками, на которые жалуется... Как это так?
Показывай полностью запрос + сделай через or die(), как показал выше Инвиз. Почему отвечаешь на вопрос, не особо относящийся к теме, а тот код, который поможет тебе решить проблему -проигнорировал?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Invis1ble
Цитата
$updateSQL = 'UPDATE uspehi SET Ocenka='.intval($_POST['ocenka']).' WHERE (StudId='.intval($_POST['MM_Student_id']).' AND PredmetId='.intval($_POST['MM_Predmet_id']).')';
Игорь_Vasinsky
ужс...

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
BlackGhost
Виноват))) Да, скобки потом появились, но они особо ничего и не изменили. В первом случае скобок не было. А проблему я нашел, я просто тут слишком маленький кусок кода выложил. Я убрал строчку header("Location: tabel.php"); (tabel.php, это та самая страница, где присутствует запрос).

Вот весь код:

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "UpdateOcenka")) // Запрос на обновление оценки
{

if($_POST['ocenka']!='') // Если поля ввода заполнены, то добавляем запись в базу данных
{
if (preg_match("/^[2-5]+$/",$_POST['ocenka']))
{
//$updateSQL = "UPDATE uspehi SET ocenka=".(int)$_POST['ocenka']." WHERE (PredmetId=".(int)$_POST["MM_Predmet_id"]." AND StudId=".(int)$_POST["MM_Student_id"];
$updateSQL = 'UPDATE uspehi SET Ocenka='.intval($_POST['ocenka']).' WHERE (StudId='.intval($_POST['MM_Student_id']).' AND PredmetId='.intval($_POST['MM_Predmet_id']).')';
//var_dump($updateSQL);

mysql_select_db($database_students_BD, $students_BD);
$Result = mysql_query($updateSQL, $students_BD) or die(mysql_error() . ' [' . $updateSQL . ']');// or die(mysql_error());
// echo var_dump($updateSQL);

$flag_ocenka=2;
// header("Location: tabel.php"); Вот она - ТА САМАЯ ПРОБЛЕМА
}
else
$flag_ocenka=1; // Установка флага корректности ввода для выовда сообщения об ошибке
}
}


Она сейчас закоментирована, а до этого не была закоментирована. Просто я взял кусок этого кода с другой страницы сайта. А там для обновления и вывода используются разные страницы, поэтому после обновления и используется header("Location:.................Э"). А здесь все происходит на одной странице. Вообщем теперь все работает.

ТУПО, конечно, но, зато сам ошибку нашел....

Объясните, если нетрудно, почему все-таки та ошибка возникала? Это получается, что информация в базе обновлялась, а потом страница тут же обновлялась, опять посылая те же самые параметры?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.