Bir if ve else deyimi mantığı ile Yardım

4 Cevap

Aşağıdaki kod Ben biçimi sadece bir örnek

 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

Acaba yukarıda ki biçimlendirme neden ve elseif if ve elseif argüman olarak isset () almıyorsanız eğer.

Ben tüm kod ve GET print_r ile hata ayıklama ve POST tüm kodu ile değerleri vardır.

print_r($_POST);
print_r($_GET);

4 Cevap

Peki gönderdiniz kod ses, bu yüzden muhtemelen değişkenlerin ilk etapta bu komut alma ile ilgili bir sorun var. Bu değişkenleri GET dize tanımlanan emin misiniz?

Emin olmak için bunun içeriğini dökümü:

print_r($_GET);

Hiç düzgün kodunuzu biçimlendirmek için rahatsız ederseniz Jona, Söz 'başka' bir işlev içinde olduğunu görmek istiyorum, ve fonksiyon dışında $ kimlikleri ve $ ıdc tanımlayan ediyoruz. Eğer explicity işlevi içinde globalleri olarak tanımlamak sürece PHP, (.. vb $ _GET, $ _POST, gibi süper globalleri hariç) küresel değişkenler işlevlerin içinde görünmez, unutmayın.

global $idc, $idc; ekle ilk işlev tanımında hattı ve sizin () düzgün çalışmaya başlayacak eğer.


İzleyen:

Sizin kodu hala iğrenç biçimlendirilmiş ve çok sakat olduğunu. Bu atın:

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

Bir Trinary operatörü kullanarak, ama her yerde sonuçlarını atama, ve bir atama yapmak için 'gerçek' koşulunu kullanarak değiliz. Bu çirkin kesmek. Bu gibi yazılmalıdır:

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

Hiçbir $_GET['ids'] varsa bu şekilde $ids set null olacaktır. Hangi null yerine diğer bazı varsayılan değer atıyorsanız gerçeğini getiriyor. Gerçekten hiç $_GET['ids'] varsa, o zaman bu:

 $idx = $_GET['ids'];

PHP otomatik olarak sağ tarafı yok durumlarda null atar gibi, aynı çalışacak. Daha sonra bir SQL sorgusunda kullanmadan konum beri Tabii ki, yine de, bu değeri sterilize etmek zorunda. Bu gibi bırakarak sadece SQL enjeksiyon saldırıları ve diğer ihlalleri her türlü davet edecektir.

Bunun ötesinde, hala $ids ve ShowCart () fonksiyonu $idc DIŞ yaratıyoruz. Gibi $ids ve $idc işlev içinde otomatik olarak bunları küresel olarak ilan ettik beri, null değerleri ile oluşturulur olacaktır. Ben şimdi size bu ne anlama geldiğini hiçbir fikrim yok, bu yüzden bu kod parçası denemek açık olduğunu düşünüyorum:

<?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();

Bunu çalıştırmak, bu kodu kopyala / yapıştır varsa, şu çıktıyı görürsünüz:

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

Her iki işlev de aynı olduğunu fark, except global bildirimi için. Eğer farkı anlamaya varsa, o zaman aşağıdaki gibi ShowCart() işlevini yeniden yazmak gerekiyor fark edeceksiniz:

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

Bu deneyin:

$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 
}

Ben expected.Maybe Eğer bağlantı doğru olup olmadığını kontrol etmelisiniz gibi çalıştığını, yukarıdaki komut test.