Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Возможен ли такой запрос?
 
 автор: Artemy   (08.02.2005 в 13:39)   письмо автору
 
 

Отправляю вот такой запрос
<?
$res 
mysql_query("UPDATE table SET value = '1'  WHERE name= '".$_SESSION['login']."' AND id IN (1,2,3)");
?>

Чего то не пойму, результат запроса - true, а изменений в таблице не происходит! :-((
P.S. Значения по которым проходит выборка существуют!

   
 
 автор: cheops   (08.02.2005 в 14:00)   письмо автору
 
   для: Artemy   (08.02.2005 в 13:39)
 

Хм... тут без конкретных записей не скажешь... (результат будет всегда true, если нет ошибки в синтаксисе SQL-запроса). Т.е. давайте по полкам разложим:
1) id IN (1,2,3) - обновиться могут только три записи в таблице id которых равны соотвественно, либо 1, либо 2, либо 3.
2) Ограничение name= '".$_SESSION['login']." говорит, что обновиться может только одна запись, name в которой равно login из сессии.
3) AND - говорит, что обновление произойдёт только в том случае, если выполнены условия 1) и 2)

Теперь остаётся проверить равно ли в записях с id =1, 2 или 3 поле name значению из сессии (кстати, проверьте не пусто ли $_SESSION['login']), если этого не соблюдается то всё нормально, такова и должна быть реакция.

   
 
 автор: Artemy   (08.02.2005 в 15:00)   письмо автору
 
   для: cheops   (08.02.2005 в 14:00)
 

Самое интересное, что все эти значения и id и $_SESSION['login'] существуют!
А если вырезать из запроса следующию часть , "name = '".$_SESSION['login'."' AND", то все работает!
Вы скажете: " Так правильно, значит $_SESSION['login'] пусто !"
А вот и нет, сначала оно выводиться и не пусто, причем ей ничего не присваевается, а потом выполняется запрос!

   
 
 автор: cheops   (08.02.2005 в 15:14)   письмо автору
 
   для: Artemy   (08.02.2005 в 15:00)
 

Выведите всё же значение $_SESSION['login'] непосредственно перед таблицей - может быть так, что значение не подцепляется сессией, поэтому в скрипте, где происходит присвоение - значение видно, а во внешнем скрипте уже нет.

   
 
 автор: Artemy   (08.02.2005 в 16:34)   письмо автору
 
   для: cheops   (08.02.2005 в 15:14)
 

Чего то я не понел!
Вот код, может покажете!?
<?PHP 
 session_start
();
 if(empty(
$_SESSION['login']))
   {
   print 
"<HTML><HEAD>\n";
   print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=../enter.php'>\n";
   print 
"</HEAD></HTML>\n";
   exit();
   }       
   
 include 
"../config.php"
 
 
$id $_POST['type']; 
 if(empty(
$id)) 
   { 
   echo 
"Вы не выбрали ни одной позиции!";
   exit;
   }
 
$query "("
 foreach(
$id as $val$query .= "$val,"
 
$query substr($query0strlen($query) - 1).")"
 
$sql "UPDATE sklad SET reserved = '1', r_who = ' ' 
                     WHERE r_who = '"
.$_SESSION['login']."' 
                     AND id IN "
.$query
 $res 
mysql_query($sql);
 if(
$res)
   {
   echo 
$sql;
   }
 else
   {
   echo 
"Ошибка при отображении страницы!";
   exit;
   }
?>

   
 
 автор: cheops   (08.02.2005 в 17:17)   письмо автору
 
   для: Artemy   (08.02.2005 в 16:34)
 

Хм... сделайте проще - просто выведетите SQL-запрос в окно браузера - как он выглядит?
<?php
  
echo $sql;
?>

Кстати, то что в конце формирования переменной $sql нет точки с запятой - это опечатка?

   
 
 автор: Artemy   (08.02.2005 в 17:26)   письмо автору
 
   для: cheops   (08.02.2005 в 17:17)
 

Да это опечатка!

Вот результат выполнения скрипта!
Но при этом изменений в БД нет!
UPDATE sklad SET reserved = '1', r_who = ' ' WHERE r_who = 'Афанасьев Артём' AND id IN (33)

   
 
 автор: cheops   (08.02.2005 в 19:11)   письмо автору
 
   для: Artemy   (08.02.2005 в 17:26)
 

Зря, кстати, к имени привязываетесь, лучше бы сравнивать первичный ключ...
Элемент
 r_who = 'Афанасьев Артём'

в какой кодировке и в какой кодировке имя в базе данных? Не могут они отличаться?

   
 
 автор: Artemy   (08.02.2005 в 21:36)   письмо автору
 
   для: cheops   (08.02.2005 в 19:11)
 

Честно говоря не знаю, но наверное в windows-1251 ...!
А имя мне нужно принцепиально, id это и есть первичный ключ!

   
 
 автор: Artemy   (09.02.2005 в 12:48)   письмо автору
 
   для: Artemy   (08.02.2005 в 21:36)
 

Блин, я опять протупил! :-))
Я не в том поле ищю имя!
Спасибо за помощь и извините, что потревожил!

   
 
 автор: Bagration   (08.02.2005 в 15:02)   письмо автору
 
   для: Artemy   (08.02.2005 в 13:39)
 


<? 
$res 
mysql_query("UPDATE table SET value = '1'  WHERE name= '".$_SESSION['login']."' AND id IN (1,2,3)"); 
?>


Для начала, я не совсем понял какую таблицу Вы обновляете ???
Где указано имя таблицы и указано ли оно вообще ???

   
 
 автор: Artemy   (08.02.2005 в 16:30)   письмо автору
 
   для: Bagration   (08.02.2005 в 15:02)
 

А table это что такое!?

   
 
 автор: Atom   (08.02.2005 в 20:09)   письмо автору
 
   для: Artemy   (08.02.2005 в 16:30)
 

таблица

   
 
 автор: Bagration   (08.02.2005 в 21:54)   письмо автору
 
   для: Atom   (08.02.2005 в 20:09)
 

Да нет, это он меня спрашивал ! Я протупил с его первым кодом, он там не указывал название таблицы и столбцы со значениями, а привел просто пример кода (это я уже потом понял).

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования