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

Форум PHP

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

 

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

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

тема: обработка массива
 
 автор: Dizels   (03.09.2008 в 18:00)   письмо автору
 
 

$sql = "select * from phone_program where id_programs=". intval($_GET['id_programs']);
$res=mysql_query($sql);

if(!$res) {
  print "Ашыпка";
}
for($id_phone = array(); $row = mysql_fetch_assoc($res); ) 
    $id_phone[] = $row['id_phone'];
    
print_r($id_phone); 


Выдает :
Array ( )

Почему - понять не могу, вроде в БД все есть, адресная строка тоже в порядке:
..../editform.php?id_programs=10


P.S.
Дамп БД:
INSERT INTO `phone_program` VALUES (10, 2);
INSERT INTO `phone_program` VALUES (10, 4);

   
 
 автор: DEM   (03.09.2008 в 18:16)   письмо автору
 
   для: Dizels   (03.09.2008 в 18:00)
 

$id_phone = array();
порпобуйте постаьти ПЕРЕД циклом for()

   
 
 автор: Balamut182   (03.09.2008 в 18:21)   письмо автору
 
   для: DEM   (03.09.2008 в 18:16)
 

перебирете массив while-ом или foreach-ем и не парьтесь

   
 
 автор: Trianon   (03.09.2008 в 18:22)   письмо автору
 
   для: Balamut182   (03.09.2008 в 18:21)
 

если Вы не знаете что посоветовать - помолчите.

   
 
 автор: Trianon   (03.09.2008 в 18:24)   письмо автору
 
   для: DEM   (03.09.2008 в 18:16)
 

Он там стоит. Вывод показывает, что этот массив - пуст.

   
 
 автор: Trianon   (03.09.2008 в 18:24)   письмо автору
 
   для: Dizels   (03.09.2008 в 18:00)
 

>Дамп БД:
>
INSERT INTO `phone_program` VALUES (10, 2);
>INSERT INTO `phone_program` VALUES (10, 4);


Отсюда никак не следует, что в таблице есть соответствующие строки.
Структуру таблицы Вы не привели.

   
 
 автор: Dizels   (03.09.2008 в 18:35)   письмо автору
 
   для: Trianon   (03.09.2008 в 18:24)
 

CREATE TABLE `phone_program` (
  `id_phone` int(11) NOT NULL,
  `id_programs` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

вот сама БД

   
 
 автор: Trianon   (03.09.2008 в 18:48)   письмо автору
 
   для: Dizels   (03.09.2008 в 18:35)
 

echo $sql что показывает?

   
 
 автор: Trianon   (03.09.2008 в 18:57)   письмо автору
 
   для: Trianon   (03.09.2008 в 18:48)
 

Стоп!
у Вас же столбцы в другом порядке!
Десятка в другом столбце!

upd. Sim5 -- глаз-алмаз!

   
 
 автор: Yuriev   (03.09.2008 в 18:31)   письмо автору
 
   для: Dizels   (03.09.2008 в 18:00)
 

Может быть потому, что в переменной $row не количество строк возвращенных запросом, а совсем другое.
Если возвращаемых строк может быть несколько, то можно так:

$sql = "select * from phone_program where id_programs=". intval($_GET['id_programs']);
if (!$res = mysql_query($sql)) print 'Ошибка';
elseif (!$n = mysql_num_rows($res)) echo 'Таких записей 0';
else {
   while ($mas = mysql_fetch_array($res)) $id_phone[] = $mas['id_phone'];
}
print_r($id_phone);

   
 
 автор: Dizels   (03.09.2008 в 18:37)   письмо автору
 
   для: Yuriev   (03.09.2008 в 18:31)
 

выводит :
Таких записей 0

   
 
 автор: sim5   (03.09.2008 в 18:40)   письмо автору
 
   для: Dizels   (03.09.2008 в 18:37)
 

Ну еще бы, если $n не известно с какого боку взялся.

   
 
 автор: Yuriev   (03.09.2008 в 18:51)   письмо автору
 
   для: sim5   (03.09.2008 в 18:40)
 

Если работа кода дойдет до этой строки, то в $n будет количество возврашенных записей.

   
 
 автор: Trianon   (03.09.2008 в 19:17)   письмо автору
 
   для: Yuriev   (03.09.2008 в 18:51)
 

а Вам я настоятельно советую конструкций вроде
if(!$переменная = выражение )
никогда не писать.
не смотря на то, что эта мерзость пропускается интерпретаттором php,
с точки зрения человека, владеющего любым Си-подобным языком - это ересь мерзкая - присвоение выражения результату инверсии переменной.
Если так хочется применить - берите в скобки:
if( ! ($переменная = выражение) ) 

   
 
 автор: sim5   (03.09.2008 в 19:26)   письмо автору
 
   для: Trianon   (03.09.2008 в 19:17)
 

Мдя, уже отматерили, спасибо ;-)

   
 
 автор: Trianon   (03.09.2008 в 19:27)   письмо автору
 
   для: sim5   (03.09.2008 в 19:26)
 

ну а что делать? режет же глаз...

   
 
 автор: sim5   (03.09.2008 в 19:28)   письмо автору
 
   для: Trianon   (03.09.2008 в 19:27)
 

Ну вот и говорю, я бы так красиво не смог, а сразу матом :)

   
 
 автор: Yuriev   (03.09.2008 в 19:28)   письмо автору
 
   для: Trianon   (03.09.2008 в 19:17)
 

Спасибо за совет!
Подскахите, пожалуйста, где можно почитать на эту тему. Я дествительно не задумываясь часто использую эту "ересь"

   
 
 автор: Trianon   (03.09.2008 в 19:33)   письмо автору
 
   для: Yuriev   (03.09.2008 в 19:28)
 

Порядок выполнения операций (то есть взаимный приоритет и ассоциативность) , описанны здесь:
http://ru.php.net/manual/ru/language.operators.php#language.operators.precedence

Согласно них приоритет выполнения операции инверсии ( ! )выше чем приоритет выполнения любой операции присваивания. ( = += -= ... )

и в нормальных системах программирования Вам такое выражение "ошибут" по самое небалуйся.


PS. Dizels куда-то делся... :)

   
 
 автор: sim5   (03.09.2008 в 19:38)   письмо автору
 
   для: Trianon   (03.09.2008 в 19:33)
 

Правильнее, видимо, ! называть операцией НЕ, так как отрицание (инверсия) это тильда в РНР.

   
 
 автор: Yuriev   (03.09.2008 в 18:42)   письмо автору
 
   для: Dizels   (03.09.2008 в 18:37)
 

Возможно $_GET приходит пустой.
Попробуйте где-то перед $sql = "select ... поставить echo $_GET['id_programs']);
и посмотрите, что выведет браузер

   
 
 автор: sim5   (03.09.2008 в 18:38)   письмо автору
 
   для: Yuriev   (03.09.2008 в 18:31)
 

Если судить по представленному, то записей как минимум 2 есть.

   
 
 автор: Trianon   (03.09.2008 в 18:41)   письмо автору
 
   для: Yuriev   (03.09.2008 в 18:31)
 

>Может быть потому, что в переменной $row не количество строк возвращенных запросом, а совсем другое.

Неужели?
и что ж там такое написано, что не дает коду работать?
:))

   
 
 автор: Dizels   (03.09.2008 в 18:43)   письмо автору
 
   для: Trianon   (03.09.2008 в 18:41)
 

спорить, конечно, весело, но может вернемся к проблеме?

   
 
 автор: sim5   (03.09.2008 в 18:54)   письмо автору
 
   для: Dizels   (03.09.2008 в 18:43)
 

$sql = "select * from phone_program where id_phone=". intval($_GET['id_phone']);
Тогда еще будут записи сосответсвующие, иначе... Вы же в запросе десятку спрашиваете, не так ли?

   
 
 автор: Yuriev   (03.09.2008 в 18:56)   письмо автору
 
   для: Dizels   (03.09.2008 в 18:43)
 

Возможно $_GET приходит пустой.
Попробуйте где-то перед $sql = "select ... поставить echo $_GET['id_programs']);
и посмотрите, что выведет браузер

   
 
 автор: Yuriev   (03.09.2008 в 18:47)   письмо автору
 
   для: Trianon   (03.09.2008 в 18:41)
 

mysql_fetch_assoc($res) возвращает не количество строк

   
 
 автор: Trianon   (03.09.2008 в 18:49)   письмо автору
 
   для: Yuriev   (03.09.2008 в 18:47)
 

>mysql_fetch_assoc($res) возвращает не количество строк

mysql_fetch_assoc($res) и не должно возвращать количество.
Это не мешает коду работать. Если запрос что-нибудь вернет.

   
 
 автор: Dizels   (03.09.2008 в 18:57)   письмо автору
 
   для: Trianon   (03.09.2008 в 18:49)
 

но код-то не работает:(

   
 
 автор: Trianon   (03.09.2008 в 18:58)   письмо автору
 
   для: Dizels   (03.09.2008 в 18:57)
 

Код работает. Поищите четверку - увидите.
..../editform.php?id_programs=4
..../editform.php?id_programs=2
И в следующий раз дамп таблицы показывайте вместе - и структуру и данные.

В конце концов, можете зайти в таблицу phpMyAdmin'ом или еще чем-нибудь наглядным для Вас.

   
 
 автор: Yuriev   (03.09.2008 в 18:58)   письмо автору
 
   для: Dizels   (03.09.2008 в 18:57)
 

Перед запросом select проверили, $_GET не пустой?

   
 
 автор: sim5   (03.09.2008 в 19:04)   письмо автору
 
   для: Dizels   (03.09.2008 в 18:57)
 

Ну блин, вы читаете или нет? Вы запрашиваете в GET параметре 10, и эту десяточку просите поискать среди id_prorams, а она у вас в id_phone "гуляет", чего вы ждете тогда?

   
 
 автор: Yuriev   (03.09.2008 в 19:10)   письмо автору
 
   для: sim5   (03.09.2008 в 19:04)
 

У Вас глаз как у орла! Класс!

   
 
 автор: Dizels   (03.09.2008 в 19:39)   письмо автору
 
   для: Yuriev   (03.09.2008 в 19:10)
 

Всем спасибо)
Тему можно закрыть - нафлудили много, но все равно помогли и это радует)

   
Rambler's Top100
вверх

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