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

Форум PHP

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

 

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

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

тема: Ошибка при формировании динамического SQL-запроса
 
 автор: ecipuser   (01.05.2011 в 19:34)   письмо автору
 
 

Доброго всем дня!
При написании следующего кода вылезает синаксическая ошибка :



$modules = $_GET['modules'];
if(!isset($modules) || $modules == '') {
    $modules = 'main';


switch ('modules') {
     $q = 'select * from '.$tbl_menu.' where hide='show' order by pos asc'; ( ругатся начинается с этой строки)
     $r = mysql_query($q);
     while ( $c = mysql_fetch_array($r)) {
         
         case ' ".$modules."' :
                echo '<p>Chegoto tam eshe</p>';
           breack;
       }
}



Что я не правильно пишу ?
По логике должно быть правильно и сточки зрения синтаксиса ?
Как это правильно записать?
Заранее спсибо
ecipuser

  Ответить  
 
 автор: cheops   (01.05.2011 в 20:38)   письмо автору
 
   для: ecipuser   (01.05.2011 в 19:34)
 

Когда вы используете одиночные кавычки, нужно обрамлять строку либо двойными кавычками, либо экранировать одиночные кавычки.
<?php
  
...
 
$q "select * from $tbl_menu where hide='show' order by pos asc";
 
$q 'select * from '.$tbl_menu.' where hide=\'show\' order by pos asc';
  ...
?>

  Ответить  
 
 автор: ecipuser   (01.05.2011 в 23:22)   письмо автору
 
   для: cheops   (01.05.2011 в 20:38)
 

Это конечно также верно.
Но....
ошибка ругается на любую строку, которая находиться между switch and case :


switch ($modules) {
    $q = mysql_query("select * from ".$tbl_menu." where hide='show' order by pos asc");
    while ($cas = mysql_fetch_array($q)) {

          case ' '.$case['modules'].' ':
                 echo "HELP MY! "; 
                  breack;
        }
}

Как мне заставитть работать такой механизм?
Иначе говоря нужно, чтобы в цикле выводилось нужное количество case !!!
Не понимаю, почему не работает......

Даже если написать таким образом

    $q = 'select * from '.$tbl_menu.' where hide=\'show\' order by pos asc';
    $r = mysql_query($q);

///------------Формируем вывод страниц основного и дополнительного меню -----------///
switch ($modules) {
    while($case = mysql_fetch_array($r)) {
            case ''.$case['modules'].'':
                require_once("./thema/header.php");    
                include("./modules/".$case['page_ind'].".php");
                require_once("./thema/footer.php");    
            break
              }



ругатся на строку с описанием цикла
Parse error: syntax error, unexpected T_WHILE, expecting T_CASE or T_DEFAULT or '}' in

Заранее спасибо

  Ответить  
 
 автор: cheops   (01.05.2011 в 23:53)   письмо автору
 
   для: ecipuser   (01.05.2011 в 23:22)
 

Хм... да, а почему у вас ключевого слова case нет?

  Ответить  
 
 автор: ecipuser   (01.05.2011 в 23:57)   письмо автору
 
   для: cheops   (01.05.2011 в 23:53)
 

Уважаемый cheops!

А причем здесь ключевое слово case?
Если не понятно почему конструкция не работает?

  Ответить  
 
 автор: nikita2206   (02.05.2011 в 00:04)   письмо автору
 
   для: ecipuser   (01.05.2011 в 23:57)
 

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

Лучше скажи, что именно этот код должен делать с данными из БД

[поправлено модератором]

  Ответить  
 
 автор: parczynski   (02.05.2011 в 02:20)   письмо автору
 
   для: nikita2206   (02.05.2011 в 00:04)
 

сначала
 $q = mysql_query("select * from ".$tbl_menu." where hide='show' order by pos asc"); 
    while ($cas = mysql_fetch_array($q)) {

а потом уже
switch ($modules) {
 case ' '.$case['modules'].' ': 
                 echo "HELP MY! ";  
                  breack; 
        }

  Ответить  
 
 автор: ecipuser   (02.05.2011 в 09:49)   письмо автору
 
   для: parczynski   (02.05.2011 в 02:20)
 

Для parczynski!
Спасибо!
Но не глупость ли получается, если в цикле будет 10 значений $case['modules'] , то значит 10 раз будет вызываться switch ($modules) ?

  Ответить  
 
 автор: parczynski   (02.05.2011 в 20:05)   письмо автору
 
   для: ecipuser   (02.05.2011 в 09:49)
 

ну или
$q = mysql_query("select * from ".$tbl_menu." where hide='show' order by pos asc");  
switch ($modules) { 
  case ' '.$case['modules'].' ':  
    while ($cas = mysql_fetch_array($q)) { 
    }
    breack;  

так действительно будет правильнее

  Ответить  
 
 автор: tvv123456   (02.05.2011 в 20:30)   письмо автору
 
   для: parczynski   (02.05.2011 в 20:05)
 

break

  Ответить  
 
 автор: ecipuser   (11.05.2011 в 03:26)   письмо автору
 
   для: parczynski   (02.05.2011 в 20:05)
 

Спасибо, всем! Разобрался.

Кому интересно, решил таким образом:

$q = "select * from ".$tbl_menu." where hide='show' and modules='".$modules."' order by pos asc";
$r = mysql_query($q);
$incase = mysql_fetch_array($r); 

    switch ($modules) {
            case $incase['modules']:
                    include("./modules/".$incase['modules']."/index.php");
                                  break;
              }

  Ответить  
Rambler's Top100
вверх

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