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
Форумы портала PHP.SU :: Версия для печати :: ввести переменную в конструкцию switch-case
Форумы портала PHP.SU » PHP » Программирование на PHP » ввести переменную в конструкцию switch-case

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

1. Kosmo - 23 Октября, 2009 - 21:15:31 - перейти к сообщению
Добрый вечер!
Объясню свою ситуацию: есть сайт, в 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;
}


Вроде понятно объяснил, если что непонятно, уточните, пожалуйста Улыбка
Заранее премного благодарен.
2. DeepVarvar - 23 Октября, 2009 - 21:20:25 - перейти к сообщению
А что и в каком порядке инклудится? И выдает ли ошибки какие если вы чтото пробовали?
3. Kosmo - 23 Октября, 2009 - 21:28:18 - перейти к сообщению
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?....
4. DeepVarvar - 23 Октября, 2009 - 22:01:55 - перейти к сообщению
include ("/catalog/".$rows['b-k'].$rows['id'].".htm");
(Добавление)
КОНКАТЕНАЦИЯ..........
5. Kosmo - 23 Октября, 2009 - 22:21:14 - перейти к сообщению
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"
6. DeepVarvar - 23 Октября, 2009 - 22:31:03 - перейти к сообщению
зато не ругается на синтаксис...... одну ошибку я вам помог найти.... посмотрите информацию о конструкции switch..........case
7. valenok - 23 Октября, 2009 - 22:41:11 - перейти к сообщению
А зачем вам вообще в данном случае switch ?
Помимо того, что вы всунули case не в switch а в while.
8. DeepVarvar - 23 Октября, 2009 - 22:49:18 - перейти к сообщению
аха....

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

1.принимаем $_GET
2.ищем в базе совпадение
if (true) {include("тот нужный шаблон");}
else {include("чтото еще - например !такого товара нет!");}
(Добавление)
А если уж очень хочется заюзать "вилы" то спрячьте их в "кейс"... ::biggrin24.gif::
можно более развернуто? я пытаюсь понять 1 пункт... что имелось в виду?
Да и вынужден я через case делать, т.к. уже вся навигация на нем построена. А если делать отдельно новые ссылки (другим способом), получается косяк...
Сильно не ругайте, я лишь начинающий :)
10. DeepVarvar - 24 Октября, 2009 - 01:27:32 - перейти к сообщению
Да что вы!!!! Эт вы моей БАБКИ-АВАТАРКИ испугались?????
Я тут не ГУРУ.... Да и не профессионал...

про пункт 1 задам вопрос: а что у вас в переменной $link?
11. Kosmo - 24 Октября, 2009 - 01:35:16 - перейти к сообщению
DeepVarvar пишет:
Да что вы!!!! Эт вы моей БАБКИ-АВАТАРКИ испугались?????
Я тут не ГУРУ.... Да и не профессионал...

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

для меня это вообще первый php - проект )))
а в переменной -
12. DeepVarvar - 24 Октября, 2009 - 01:44:17 - перейти к сообщению
"вилы" в "кейс" - попробуйте всеже... хотя подозреваю что работать не будет...
(Добавление)
так что скорее всего придется вам переписывать все заново...
13. Kosmo - 24 Октября, 2009 - 01:48:18 - перейти к сообщению
DeepVarvar пишет:
"вилы" в "кейс" - попробуйте всеже... хотя подозреваю что работать не будет...
(Добавление)
так что скорее всего придется вам переписывать все заново...

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

значение должно быть одно и неизменяемое, а меня это не устраивает.
Подскажите тогда, пожалуйста, другой способ инклуда... я уже моск весь иссушил исканиями верного алгоритма. Поиск не помогает....
14. DeepVarvar - 24 Октября, 2009 - 02:04:33 - перейти к сообщению
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");}
15. Мелкий - 24 Октября, 2009 - 10:33:47 - перейти к сообщению
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;

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

 

Powered by ExBB FM 1.0 RC1