2010-02-21 2 views
-1

Код ниже всего лишь пример формата у меня естьПомощь с, если и еще заявление логики

isset($_GET['ids'])?$ids=$_GET['ids']:null; 

isset($_POST['idc'])?$idc=$_POST['idc']:null; 

function ShowCart() 

    { 

    $que = "SELECT 

    FROM 
    cart 

    LEFT OUTER JOIN ... 
     ON ... 
    LEFT OUTER JOIN... ON... 


    WHERE "; 
    $result = mysql_query($que); 


while(){ 
    if (isset($ids)) { 
    display something 
    for(){ 
     if(){ 
      } // end of if inside the for loop 
     }// end of for loop 
     } 
    elseif($idc && $ids=null) { 
      display something different 
     } 
    else{ 
     display nothing has passed 
     } 
    }//end of while loop 
}//end of showcart(); function 

, что это форматирование выше Интересно, почему если и ElseIf не получают Исеть() в качестве if и elseif.

У меня есть отладка через весь код, а print_r из GET и POST имеет значения по всему коду.

print_r($_POST); 
print_r($_GET); 
+0

Обратите внимание, что '0' будет оценивать 'false'. Я бы просто выполнил 'isset()' внутри условий 'if'. – BalusC

+0

, которые могут быть желаемой функциональностью? – nickf

+0

см. Отредактированный скрипт выше спасибо! – jona

ответ

0

Ну, код, который вы опубликовали, звучит, так что это, вероятно, проблема с переменными, попадающими в этот скрипт в первую очередь. Вы уверены, что эти переменные определены в строке GET?

Дамп содержание его, чтобы убедиться:

print_r($_GET); 
+0

один установлен в строке GET, а другой в POST извините, я попытался поместить одну строку int he GET и другую в строку POST, но это не сработает. – jona

+0

Пожалуйста, взгляните на отредактированный сценарий выше. – jona

0

Попробуйте это:

$ids= isset($_GET['ids'])?intval($_GET['ids']):null; 

$idc= isset($_GET['idc'])?intval($_GET['idc']):null; 


if (isset($ids)) { 
    //display something 
} 
elseif(isset($idc)) { 
    //display something different 
} 
else 
{ 
    //display nothing has passed 
} 
+0

, что делает то же самое, что и опубликованное, но хуже. Во-первых, '(int)' быстрее, чем 'intval', а во-вторых, вы нарушили логику, так как' $ ids = 0' теперь пройдет, когда это не было раньше. – nickf

+0

@mattbasta Я пробовал выше, но есть часть скрипта, где я думаю, что некоторые операторы добавляют переменную idc. посмотрите на скрипт редактирования выше. – jona

+0

@nickf Мое понимание заключалось в том, что если присутствовали 'ids' или' idc', это было вопросом их обработки. Если они не должны обрабатываться, они не будут включены в строку запроса. Кроме того, 'intval' производит более последовательные результаты (в частности, через PHP 4/5), и два обращения к нему не будут достаточно значительными, чтобы замедлить любое приложение. Скорость - это непрозрачность. – mattbasta

0

Я проверил ваш сценарий выше, он работает как expected.Maybe вы должны проверить, является ли ссылка правильно или нет.

+0

Я установил некоторые различия в ссылках, исходящих из page1.php, отличных от ссылки, исходящей от page2.php. Единственное отличие - идентификаторы id и idc – jona

+0

ссылка со страницы1.php cart.php? Action = add_item & idc = 1 & qty = 1 & register = 0 & id = 6 – jona

+0

ссылка из page2.php cart.php? Action = add_item & ids = 2 & qty = 1 & register = 0 & id = 6 – jona

2

Jona, если вы когда-нибудь потрудились правильно форматировать свой код, вы увидите, что вопрос «else» находится в WITHIN A FUNCTION, и вы определяете $ ids и $ idc ВЗГЛЯД ФУНКЦИИ. Помните, что в PHP глобальные переменные (кроме супер-глобалов, таких как $ _GET, $ _POST и т. Д.) Не видны внутри функций, если вы не объясните их как глобальные функции внутри функции.

Добавить global $idc, $idc; в качестве первой строки в определении функции, и ваш if() начнет работать правильно.


Followup:

Ваш код еще безобразно отформатирован, и очень шаткий. Отнесите:

isset($_GET['ids'])?$ids=$_GET['ids']:null; 

Вы используете оператор троичного, но не назначая ее результатов в любом месте и с помощью «истинного» условия, чтобы сделать задание. Это уродливый хак. Это должно быть написано так:

$ids = isset($_GET['ids']) ? $_GET['ids'] : null; 

Таким образом $ids будет установлено нулевое значение, если нет $_GET['ids']. Это объясняет тот факт, что вы назначаете null вместо некоторого другого значения по умолчанию. Если действительно не было $_GET['ids'], то это:

$idx = $_GET['ids']; 

будет работать одинаково, так как PHP автоматически присвоит нуль в тех ситуациях, когда правая сторона не существует. Конечно, вам все равно придется дезинфицировать это значение, поскольку позже вы используете его в SQL-запросе. Оставляя это, мы просто приглашаем атаки SQL-инъекций и всевозможные другие злоупотребления.

Кроме того, вы все еще создаете $ids и $idc вне вашей функции ShowCart(). Таким образом, $ids и $idc в функции будут автоматически создаваться с нулевыми значениями, так как вы не объявили их глобальными.Я думаю, теперь это очевидно, что вы понятия не имеете, что это значит, так попробовать этот кусок кода:

<?php 

$var = 'Here I am!'; 

function showVar() { 
    echo "Within showVar(), var is set to: $var\n"; 
} 
function workingShowVar() { 
    global $var; 
    echo "Within workingShowVar(), var is equal to: $var\n"; 
} 

showVar(); 
workingShowVar(); 

Если скопировать/вставить этот код, запустить его, вы увидите следующий вывод:

Within showVar(), var is set to: 
Within workingShowVar(), var is set to: Here I am! 

Обратите внимание, что обе функции идентичны, за исключением для global декларации. Если вы можете выяснить разницу, то вы поймете, что вам нужно заново написать ShowCart() функцию следующим образом:

function ShowCart() { 
    global $ids, $idc; 
    // rest of your code here 
} 
+0

Спасибо за объяснение. Вместо использования функции global, которая является другим способом, я не пытаюсь, я назначил $ ids и $ idc в качестве аргументов функции ShowCart(), таких как ShowCart ($ ids, $ idc), но теперь я буду использовать ваш метод, чтобы назначить их поскольку аргументы функции ShowCart() не совсем сработали. Я дам несколько отзывов позже. – jona

+0

@Marc см. В отредактированном сценарии выше. Я использовал глобальную функцию для распространения значений $ ids и $ idc. Теперь я применил некоторые условия, например if (isset ($ ids)) {display this}, и я сделал это, если ($ ids && $ idc = null) {display this} ни одно из условий не покажет содержимое if .. Зачем? посмотрите на отредактированный сценарий выше спасибо! – jona

+0

Ну, какой приоритет вы хотите сделать? У вас есть две переменные, что означает четыре возможности: 1. $ ids - это что-то, $ idc равно null 2. $ ids имеет значение null, $ idc - это что-то 3. $ idc и $ ids равны нулю 4 . $ idc и $ ids - это что-то (может быть, не то же самое). С какими случаями вы хотите обращаться? –