Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] $_GET[''] (http://forum.oszone.net/showthread.php?t=102182)

Artem-Samsung 05-03-2008 23:46 754293

$_GET['']
 
Вообщем написал я скрипт для того, что бы картинка менялась для каждого подраздела.
Но написать красиво я не смог, написал таким образом, что этот код нужно раз двадцать дублировать для разных разделов
у меня там actors, books, films

Система моя меню и подменю такая:
Например для раздела актеров
(В адресной строке)
?hp = actors //главный раздел
?actors=daniel //подраздел

PHP код:

<?php

                        
if (isset($_GET['actors'])){
                                
$submenupic1 $_GET['actors'];
                        }else if(isset(        
$_GET['hp']) && $_GET['hp']=="actors") {
                                
$submenupic1 $_GET['hp'];
                        }else{
                                
$submenupic1 false;
                        }
                        if(
$submenupic1){
                                echo 
'<img src="';
                                echo 
"images/design/submenupics/".$submenupic1.".jpg";
                                echo 
'    " alt="" width="300" height="100" />';
                        }
?>

Хотелось бы сделать это все более универсальным, то есть значение actors в коде заменить на переменную, которая будет то book то films и так далее.
Сделаю переменную:$hp
$hp = array_keys($_GET);
Которую пропишу везде вместо акторс

PHP код:

<?php

$hp 
array_keys($_GET);

                        if (isset(
$_GET['$hp[0]'])){
                                
$submenupic1 $_GET['$hp[0]'];
                        }else if(isset(        
$_GET['hp']) && $_GET['hp']=="$hp[0]") {
                                
$submenupic1 $_GET['hp'];
                        }else{
                                
$submenupic1 false;
                                echo 
"error <br>";
                                echo 
$hp[0];
                        }
                        if(
$submenupic1){
                                echo 
'<img src="';
                                echo 
"images/design/submenupics/".$submenupic1.".jpg";
                                echo 
'    " alt="" width="300" height="100" />';
                        }
?>

Выводит же на экран:
error
actors

То есть переменная помещает в себя правильну инфу, но возможно ошибка в участке кода типа:
$submenupic1 = $_GET['$hp[0]'];

Vlad Drakula 05-03-2008 23:50 754295

$submenupic1 = $_GET[$hp[0]]; - пробовал?

в чем разница между одинарными и двойными кавычками в PHP?

Artem-Samsung 05-03-2008 23:54 754298

Чудеса!!!! )) Заработало:
PHP код:

$hp array_keys($_GET);

                        if (isset(
$_GET[$hp[0]])){
                                
$submenupic1 $_GET[$hp[0]];
                        }else if(isset(        
$_GET['hp']) && $_GET['hp']==$hp[0]) {
                                
$submenupic1 $_GET['hp'];
                        }else{
                                
$submenupic1 false;
                                echo 
"error <br>";
                                echo 
$hp[0];
                        }
                        if(
$submenupic1){
                                echo 
'<img src="';
                                echo 
"images/design/submenupics/".$submenupic1.".jpg";
                                echo 
'    " alt="" width="300" height="100" />';
                        } 


В моем понимании - разницы между одинарными и двойными нету. Но исползуют разные кавычки для того, что бы они в срединке не пересекались. То есть
printf ("asdasd asdasdads 'asdasdasd' ", sd); Внешние - двойные - внутри одинарные

DedAlex 06-03-2008 00:02 754300

Artem-Samsung, в двойных кавычках переменные парсятся а в одинарных нет. Например код
PHP код:

$i=100;
echo 
"$i";
echo 
'$i'

выдаст
PHP код:

100$i 


Artem-Samsung 06-03-2008 18:23 754844

Спасибо. А не подскажете еще чуть-чуть?
Вообщем мне нужно заполнить одномерный массив значениями $menu1:

PHP код:

$result mysql_query("SELECT DISTINCT title, link, category FROM menu"$db);
$categ mysql_fetch_array($result);

    for (
$i=$sum=$categ mysql_fetch_array($result); $i++ ) {
        
$menu1[]=$categ['category'];
    }
    
    
print_r ($menu1); 

Вроде бы все правильно, но получается фигня:
Array ( [0] => Література [1] => Література [2] => Література [3] => Кінофільми [4] => Кінофільми [5] => Кінофільми [6] => Азиев [7] => Кінофільми [8] => Комп.Ігри [9] => Комп.Ігри [10] => Комп.Ігри [11] => UA HPclub [12] => UA HPclub [13] => UA HPclub [14] => UA HPclub [15] => Спілкування [16] => Спілкування [17] => Спілкування [18] => Спілкування )

Как бы у меня там в БД много раз повторяется как Литература так и Кинофильмы, но я же написал DISTINCT чаво оно не работает. То есть мне нужно что бы значения не повторялись в массиве.

Coutty 06-03-2008 20:48 754944

PHP код:

for ($i=$sum=$categ mysql_fetch_array($result); $i++ ) { 
        if (!
in_array($categ['category'], $menu1))
           
$menu1[]=$categ['category']; 
    } 


Artem-Samsung 06-03-2008 21:47 754971

ухты какая загогулина. Я даже не знаю, как это озвучить О.о
if (!in_array($categ['category'], $menu1))
Но спасибо, попробую ща

Coutty 06-03-2008 22:05 754984

Да всё просто. Проверка: если значения $categ['category'] в массиве $menu1 ещё нет, значит записываем его туда. Иначе побоку.

Artem-Samsung 07-03-2008 13:27 755319

Большое спасибо, со своей задачей скрипт справляется, но таки выводится на экран ошибка:

Notice: Undefined variable: menu1 in z:\home\localhost\www\uahpclubphp\test.php on line 9
[Денвер: показать возможную причину ошибки]
Warning: in_array(): Wrong datatype for second argument in z:\home\localhost\www\uahpclubphp\test.php on line 9
Array ( [0] => Література [1] => Кінофільми [2] => фывфыв [3] => Комп.Ігри [4] => UA HPclub [5] => Спілкування )

В строке
PHP код:

if (!in_array($categ['category'], $menu1)) 

То есть как бы не существует еще эта переменная, а мы ее проверяем.
Я пробовал прописать ей в начале значение ноль, но все равно не получается.
Единственным выходом является добисать еще одно условие:
PHP код:

if (isset($menu1)) {
           if (!
in_array($categ['category'], $menu1)) 
           
$menu1[]=$categ['category']; 


Хотя нет, та штука не получается так как меню1 изначально и не должно было быть... эх.. запутался

А, и ее вопрос. Вы так как то интересно записали условие if без кавычек фигурных, нигде не втречал такого. Когда можна эти кавычки не ставить, я то уверен, что не во всех случаях без кавычек сработает

Ухтышка, нашел способ еще один:
сделать выборку таким вот образом:
$result = mysql_query("SELECT DISTINCT category , title, link FROM menu GROUP BY category", $db);
И все получается, без дополнительно условия. Но все же вариант с усовием мне тоже интересен.

Просто прописав таким образом выбока оно как-то перемешалось:
Точнее упорядочилось по алфавиту

Array ( [0] => Комп.Ігри [1] => Кінофільми [2] => Література [3] => Спілкування )

Да и UA HPclub ячейка пропала

Coutty 07-03-2008 14:59 755394

Artem-Samsung, я не понял, в этом сообщении содержится вопрос или уже нет?)) Вот кроме этого:
Цитата:

Цитата Artem-Samsung
Вы так как то интересно записали условие if без кавычек фигурных, нигде не втречал такого. Когда можна эти кавычки не ставить, я то уверен, что не во всех случаях без кавычек сработает »

После if, else, for и подобных исполняется один блок кода. Блок кода в данном случае - это либо одна команда, либо набор команд, заключённый в фигурные скобки. Т.е. для одной строчки можно не ставить скобки)
Цитата:

Цитата Artem-Samsung
но таки выводится на экран ошибка: »

Там не ошибка, а уведомление и предупреждение)

if (isset($menu1)) {
if (!in_array($categ['category'], $menu1))
$menu1[]=$categ['category'];
}

это можно покомпактнее записать:
PHP код:

if (isset($menu1) && !in_array($categ['category'], $menu1))  
    
$menu1[]=$categ['category']; 

Цитата:

Цитата Artem-Samsung
Я пробовал прописать ей в начале значение ноль, но все равно не получается. »

Каким образом? $menu1 = 0; ? Так не выйдет) Можно так: $menu1[0]="0"; reset($menu1); (т.е. сбрасываем внутренний указатель в массиве на начало).
Или вот так: $menu1 = new Array(); (беру по аналогии с JavaScript'ом - не знаю, работает ли это в PHP).

Artem-Samsung 08-03-2008 00:54 755712

Coutty, respect !!!
Огромное спасибо, докладно пояснили все.. просто замечательно.
Но вот прописав такое - $menu1[0]="0"; reset($menu1); все равно глюк - первый элемент массива нулу равняется(
$menu1 = new Array(); - воооще не работает.
Но не беда. Я начал цикл со значения 1. И на самом начале прописал первому элемента массива первый элемент того массива из БД )
$menu1[0] = $categ['category'];

PHP код:

<? 
include ('config.php');
$result mysql_query("SELECT DISTINCT category , title, link FROM menu"$db);
$categ mysql_fetch_array($result);

$menu1[0]=$categ['category'];;
for (
$i=$sum=$categ mysql_fetch_array($result); $i++ ) {  
    if (isset(
$menu1) && !in_array($categ['category'], $menu1))   
    
$menu1[]=$categ['category']; 
}
    
print_r ($menu1);
    
?>


Artem-Samsung 08-03-2008 02:05 755751

Эх...
Усовершенствовал немного. Сделал ду вайл да и в боевых условиях проверил ;)

PHP код:

<?php
include ('config.php');
$result mysql_query("SELECT DISTINCT category FROM menu"$db);
$categ mysql_fetch_array($result);

$i=0;
$menu1[0] = $categ['category'];
do {
printf ("<option value='$i'>%s</option>"$categ['category']);
if (isset(
$menu1) && !in_array($categ['category'], $menu1))   
    
$menu1[]=$categ['category']; 
    
$i++;
}
while (
$categ mysql_fetch_array($result));

print_r($menu1);

?>


Coutty 08-03-2008 15:18 755953

PHP код:

if (isset($menu1) && !in_array($categ['category'], $menu1))    
    
$menu1[]=$categ['category'];  
    
$i++; 

Это не правильно) Тут две операции внутри блока if, поэтому надо ставить фигурные скобки)

PHP код:

$menu1[0] = $categ['category']; 
do { 
printf ("<option value='$i'>%s</option>"$categ['category']); 
if (isset(
$menu1) && !in_array($categ['category'], $menu1))    
    
$menu1[]=$categ['category'];  
    
$i++; 

while (
$categ mysql_fetch_array($result)); 

Это ведь не должно работать, нэ? Смотри, сначала присваиваешь нулевое значение в $menu1, но ведь $categ ещё не "отфетчена_аррэем". Далее идёт исполнение блока, но переменной $categ всё ещё нет. И лишь после этого используется mysql_fetch_array();
Что, если написать вот так:
PHP код:

$menu1[0] = 0;
while(
$categ mysql_fetch_array($result))  { 
if (isset(
$menu1) && !in_array($categ['category'], $menu1))    
    
$menu1[$i]=$categ['category'];  
printf ("<option value='$i'>%s</option>"$categ['category']); // этот кусок я тоже чуток не понял... Просто не в курсе, что оно делает:)
$i++; 



Artem-Samsung 10-03-2008 23:37 757452

Цитата:

Цитата Coutty
Это не правильно) Тут две операции внутри блока if, поэтому надо ставить фигурные скобки) »

Да там должно в ифе выполняться только первая операция) Потому вроде все ок.
Вообщем с menu1 все просто замечтально))
PHP код:

$result mysql_query("SELECT DISTINCT `category` FROM `menu`"$db);
$categ mysql_fetch_array($result);
$i 0$menu1[0] = $categ['category']; //категорії
do {
    
printf ("<option value='$i'>%s</option>"$categ['category']);
    if (isset(
$menu1) && !in_array($categ['category'], $menu1)) $menu1[]=$categ['category']; 
    
$i++;
} while (
$categ mysql_fetch_array($result)); 

Если интересно, то вся задумка - это вывод выпадающего меню. А программирую я селекты.
А вот меню2 у меня что-то вооще никак не получается (( Никак не хочет начинаться с нуля

PHP код:

$i=0;
$j=0;
$menu2[]=0;
do {
    
$result mysql_query("
    SELECT title, link FROM menu WHERE category = '$menu1[$i]'
    "
$db);
    
$menu mysql_fetch_array($result);
    do {
        
printf ("<option value='%s' class='%s'>%s</option>"$j$i$menu['title']); 
        
$j++;
        if (isset(
$menu2)) 
        
$menu2[$j]=$menu['link']; // пункти меню
    
}
    while (
$menu mysql_fetch_array($result));
    
$i++;



Вывод такой:
Первое меню: Array ( [0] => Література [1] => Кінофільми [2] => Комп.Ігри [3] => UA HPclub [4] => Спілкування [5] => Адміністратору )
Второе меню: Array ( [0] => 0 [1] => rowling [2] => books [3] => bb [4] => fanfics [5] => films [6] => film6 [7] => actors [8] => photo [9] => adventure [10] => quidditch [11] => passing [12] => about [13] => projects [14] => prophet [15] => partners [16] => forum [17] => chat [18] => gallery [19] => blogs [20] => menu [21] => news )

Coutty 11-03-2008 08:27 757628

Ну так очевидно, что с нуля оно и не начнётся. Смотри: сначала вызываешь $j++; а потом уже $menu2[$j]=$menu['link']; Т.е. к моменту присваивания j=1. Переложи в конец блока do{}

Artem-Samsung 15-03-2008 19:06 761104

Спасибо большое! )) Аж стыдно) Конечно же счетчик должен включаться перед первым действием в цикле.

Я вот что бы новую тему не создавать таки осмелюсь в этой еще парочку вопросов задать.
К примеру:
После нажатия кнопки в форме у меня программа выполняет определенные действия:

PHP код:

<?php     
if (isset($_POST['SelectMenu'])) {
    
$menu $_POST['menu'];
}

// Дальше у меня появляется следующая форма после нажатие кнопки сабмит в предыдущей.
// И мне нужно использовать переменную $menu. Так как и в последующих формах.

if (isset($_POST['PreView'])){
    echo 
$menu;
}
?>



Но почему то данные в переменной не сохраняются.
Почему? Ведь оно присваивалось в определенной функции, которая успешно выполнялась. То есть в этой:
PHP код:

if (isset($_POST['SelectMenu'])) {
    
$menu $_POST['menu'];



Coutty 16-03-2008 09:38 761456

В начале скрипта выведи распечатку содержимого print_r($_POST); Посмотрим, может быть переменные по-другому размечены?:)

Но вообще я не понимаю зачем проверять каждый раз isset().
Может быть просто написать:
PHP код:

if($_POST['SelectMenu']) { // если переменная содержит ненулевое и непустое значение
  
$menu $_POST['menu'];



Artem-Samsung 16-03-2008 12:04 761519

Я выкрутился применяя сессии ))) Все ок :))

Кстати, если интерестно, то вот админка, которую я здесь так долго мучал:
http://uaclub.org/uahpadmin/update/
Можна даже покляцать, там все равно БД пока что левая))


Время: 02:49.

Время: 02:49.
© OSzone.net 2001-