Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: ввести переменную в конструкцию switch-case

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: проблема с инклудом
Kosmo
Отправлено: 23 Октября, 2009 - 21:15:31
Post Id



Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Окт. 2009  
Откуда: Екатеринбург, Россия


Помог: 0 раз(а)




Добрый вечер!
Объясню свою ситуацию: есть сайт, в index.php есть такая конструкция:

Цитата:
<?php
switch ($content){
case catalog: include "/catalog/123.htm"; break;
........
case (1) : include "/catalog/(2).htm";break;
}


Далее, необходимо "заинклудить" в место (1) переменную и в (2) название странички, ссылка на которую создается динамически, путем взятия информации из БД (эта страничка также "заинклудена" в index.php), а именно -
Цитата:
$query = "select * from flowers WHERE (id=$id)";
$result = mysql_query($query, $link);
while($rows= mysql_fetch_array($result,MYSQL_ASSOC))
{
echo '<a class="item" href="index.php?content=',$rows['b-k'], $rows['id'], '.htm">';
.....................



То есть, если ID строки равен 3, а значение столбца "b-k" равно "b", то ссылка примет вид index.php?content=b3.htm
Необходимо, чтобы в конструкции в index.php появилась ссылка вида /catalog/b3.htm, переход на которую осуществлялся бы при значении переменной $content=b3.

То есть, желаемый результат должен выглядеть вот так:
Цитата:
<?php
switch ($content){
case catalog: include "/catalog/123.htm"; break;
........
case b3 : include "/catalog/b3.htm";break;
}


Вроде понятно объяснил, если что непонятно, уточните, пожалуйста Улыбка
Заранее премного благодарен.

(Отредактировано автором: 23 Октября, 2009 - 21:18:41)



-----
начинающий web-мастер
http://www[dot]re-forma[dot]biz
 
 Top
DeepVarvar Супермодератор
Отправлено: 23 Октября, 2009 - 21:20:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




А что и в каком порядке инклудится? И выдает ли ошибки какие если вы чтото пробовали?
 
 Top
Kosmo
Отправлено: 23 Октября, 2009 - 21:28:18
Post Id



Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Окт. 2009  
Откуда: Екатеринбург, Россия


Помог: 0 раз(а)




DeepVarvar пишет:
А что и в каком порядке инклудится? И выдает ли ошибки какие если вы чтото пробовали?

в index.php (с конструкцией case) инклудится файл catalog.php (с запросом в БД).
В итоге необходимо заинклудить страничку с непосредственно товаром, на которую ссылается catalog.php, вместо него же.

Написал же я
PHP:
скопировать код в буфер обмена
  1. case $rows['b-k']$rows['id']:include ("/catalog/$rows['b-k']$rows['id'].htm");break;

(сам знаю, что по-ламерски и совершенно неверно в корне, не ругайте) и получаю следующую ошибку: Parse error: syntax error, unexpected T_VARIABLE in index.php on line 198
(Добавление)
попробовал написать в конструкции case нечто вроде
Цитата:
while($rows= mysql_fetch_array($result,MYSQL_ASSOC))
{
echo 'case ',$rows['b-k'],$rows['id'],':include ("/catalog/',$rows['b-k'],$rows['id']'.htm")';break;
}


теперь идет ошибка
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in index.php on line 200.
Ругается как раз на эту строку снова.
(Добавление)



по большому счету, можно облегчить задачу: в index.php выбрать все записи и выбрать необходимые значения столбцов ID и b-k. В принципе, это можно сделать следующим путем:
PHP:
скопировать код в буфер обмена
  1. $res = mysql_query("SELECT * FROM flowers", $link);            
  2.         while($rows= mysql_fetch_array($res,MYSQL_ASSOC))
  3.         {
  4.         $b-k[]=$rows['b-k'];
  5.             $id[]=$rows['id'];
  6.         }

Только вот каким образом эти данные потом запихнуть в конструкцию case?....

(Отредактировано автором: 23 Октября, 2009 - 21:58:39)



-----
начинающий web-мастер
http://www[dot]re-forma[dot]biz
 
 Top
DeepVarvar Супермодератор
Отправлено: 23 Октября, 2009 - 22:01:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




include ("/catalog/".$rows['b-k'].$rows['id'].".htm");
(Добавление)
КОНКАТЕНАЦИЯ..........
 
 Top
Kosmo
Отправлено: 23 Октября, 2009 - 22:21:14
Post Id



Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Окт. 2009  
Откуда: Екатеринбург, Россия


Помог: 0 раз(а)




DeepVarvar пишет:
include ("/catalog/".$rows['b-k'].$rows['id'].".htm");
(Добавление)
КОНКАТЕНАЦИЯ..........

не сканало... так как должно появиться много строк case ... include (так как в БД далеко не одна строчка), то надо каким-либо образом вставить в конструкцию switch-case цикл с выводом.
я пробовал
switch ($content){
case catalog: include "catalog.php"; break;
........
$res = mysql_query("SELECT * FROM flowers", $link);
while($rows= mysql_fetch_array($res,MYSQL_ASSOC))
{ case $rows['b-k'].$rows['id']: include ("/catalog/".$rows['b-k'].$rows['id'].".htm");}
}



не выходит, ругается на строку, выделенную красным, и пишет "Parse error: syntax error, unexpected T_CASE in index.php on line 221"

(Отредактировано автором: 23 Октября, 2009 - 22:22:47)



-----
начинающий web-мастер
http://www[dot]re-forma[dot]biz
 
 Top
DeepVarvar Супермодератор
Отправлено: 23 Октября, 2009 - 22:31:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




зато не ругается на синтаксис...... одну ошибку я вам помог найти.... посмотрите информацию о конструкции switch..........case
 
 Top
valenok Модератор
Отправлено: 23 Октября, 2009 - 22:41:11
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




А зачем вам вообще в данном случае switch ?
Помимо того, что вы всунули case не в switch а в while.


-----
Truly yours, Sasha.
 
My status
 Top
DeepVarvar Супермодератор
Отправлено: 23 Октября, 2009 - 22:49:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




аха....

1.принимаем $_GET
2.ищем в базе совпадение
if (true) {include("тот нужный шаблон");}
else {include("чтото еще - например !такого товара нет!");}
(Добавление)
А если уж очень хочется заюзать "вилы" то спрячьте их в "кейс"... ::biggrin24.gif::
 
 Top
Kosmo
Отправлено: 24 Октября, 2009 - 00:23:51
Post Id



Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Окт. 2009  
Откуда: Екатеринбург, Россия


Помог: 0 раз(а)




DeepVarvar пишет:
аха....

1.принимаем $_GET
2.ищем в базе совпадение
if (true) {include("тот нужный шаблон");}
else {include("чтото еще - например !такого товара нет!");}
(Добавление)
А если уж очень хочется заюзать "вилы" то спрячьте их в "кейс"... ::biggrin24.gif::
можно более развернуто? я пытаюсь понять 1 пункт... что имелось в виду?
Да и вынужден я через case делать, т.к. уже вся навигация на нем построена. А если делать отдельно новые ссылки (другим способом), получается косяк...
Сильно не ругайте, я лишь начинающий :)

(Отредактировано автором: 24 Октября, 2009 - 00:24:13)



-----
начинающий web-мастер
http://www[dot]re-forma[dot]biz
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Октября, 2009 - 01:27:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Да что вы!!!! Эт вы моей БАБКИ-АВАТАРКИ испугались?????
Я тут не ГУРУ.... Да и не профессионал...

про пункт 1 задам вопрос: а что у вас в переменной $link?
 
 Top
Kosmo
Отправлено: 24 Октября, 2009 - 01:35:16
Post Id



Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Окт. 2009  
Откуда: Екатеринбург, Россия


Помог: 0 раз(а)




DeepVarvar пишет:
Да что вы!!!! Эт вы моей БАБКИ-АВАТАРКИ испугались?????
Я тут не ГУРУ.... Да и не профессионал...

про пункт 1 задам вопрос: а что у вас в переменной $link?

для меня это вообще первый php - проект )))
а в переменной -


-----
начинающий web-мастер
http://www[dot]re-forma[dot]biz
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Октября, 2009 - 01:44:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




"вилы" в "кейс" - попробуйте всеже... хотя подозреваю что работать не будет...
(Добавление)
так что скорее всего придется вам переписывать все заново...
 
 Top
Kosmo
Отправлено: 24 Октября, 2009 - 01:48:18
Post Id



Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Окт. 2009  
Откуда: Екатеринбург, Россия


Помог: 0 раз(а)




DeepVarvar пишет:
"вилы" в "кейс" - попробуйте всеже... хотя подозреваю что работать не будет...
(Добавление)
так что скорее всего придется вам переписывать все заново...

пробовал всяко..... синтаксис case не позволяе реализовать необходимого ветвления (
Цитата:
switch(выражение) {
case значение: команды;

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


-----
начинающий web-мастер
http://www[dot]re-forma[dot]biz
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Октября, 2009 - 02:04:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. $found=0;
  2. while($rows= mysql_fetch_array($result,MYSQL_ASSOC)){
  3.     $ssilka[$found]=$rows['b-k'].$rows['id'];
  4.     $found++;
  5.     }
  6.  
  7. //мы создали массив со всеми значениями которые есть в базе...
  8.  
  9. //а гдето там там где надо выдадим в цикле все....
  10.  
  11. while(list($key,$val)=each($ssilka)) {include ("/catalog/".$ssilka[$key].".htm");}
 
 Top
Мелкий Супермодератор
Отправлено: 24 Октября, 2009 - 10:33:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Kosmo пишет:
значение должно быть одно и неизменяемое, а меня это не устраивает

Нет, значение case вполне может быть вычисляемое из переменных, но то, что их должно быть определённое число - это да.

В общем, вам что надо?
Чтобы в зависимости от принятого значения index.php?content=b3.htm инклюдился /catalog/b3.htm?
PHP:
скопировать код в буфер обмена
  1. $content = $_GET['content'];
  2. if (file_exists('/catalog/'.$content)
  3.    if (is_file('/catalog/'.$content) include "/catalog/".$content;

И всё, что ещё нужно-то, чтобы работало?

(Отредактировано автором: 24 Октября, 2009 - 10:36:17)



-----
PostgreSQL DBA
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB