php istek değişkenlerini $ _GET atama

2 Cevap php

Bir önceki soruya bir göz atın eğer

http://stackoverflow.com/questions/2690742/mod-rewrite-title-slugs-and-htaccess

Ben çözüm kullanarak o Albay şarapnel önerdi-ama bir istek gerçek dosya ve $ _GET değerler atar zaman kod çalışmaz. Değilim Uzak dosyadan Bu varsayılan $ _GET değişkenleri ayarlanır değil sanki

Ben ile geldi kodu-

if(!empty($_GET['cat'])){

    $_GET['target'] = "category";


    if(isset($_GET['page'])){

        $_GET['pageID'] = $_GET['page'];

    }

    $URL_query = "SELECT category_id FROM cats WHERE slug = '".$_GET['cat']."';";
    $URL_result = mysql_query($URL_query);
    $URL_array = mysql_fetch_array($URL_result);

    $_GET['category_id'] = $URL_array['category_id'];



}elseif($_GET['product']){

    $_GET['target'] = "product";


    $URL_query = "SELECT product_id FROM products WHERE slug = '".$_GET['product']."';";
    $URL_result = mysql_query($URL_query);

    $URL_array = mysql_fetch_array($URL_result);
    print_r($URL_array);

    $_GET['product_id'] = $URL_array['product_id']; 

Temsil etmek için çalışıyorum im orijinal değişken dizedir

/cart.php?Target=product&product_id=16142&category_id=249

Ve bu yüzden ben temiz URL kullanabilirsiniz kodu ve dahil cart.php ile sorgu dizesi değişkenleri oluşturmak çalışıyorum

Yani ürün / ürün-title-ile-temiz-url /? Ürün = slug slug.php için gidiş var

Ardından sülük eşleşen sülük ile bir rekor için db arar ve above.Then sorgu dizesi inşa kodu gibi PRODUCT_ID döner ve cart.php dahil

2 Cevap

Bu kod ile yanlış birçok şey.

1 Ben böyle GET değişkenleri ayarlamak için o kötü form düşünün

Kodunuzun yalnızca yaklaşık 6 satır aslında kullanılan sanki 2. görünür.

$_GET['target'] = "category";

Diğer şeyler bir grup ile birlikte, kullanılmaz.

SQL almak isteyen 3 Sen burada enjekte:

$URL_query = "SELECT category_id FROM cats WHERE slug = '".$_GET['cat']."';";

$ _GET ['kedi'] ise

'';delete * from cats

sonra sorgu

SELECT category_id FROM cats WHERE slug = '';delete * from cats;

Ve bütün kediler gone

Eğer mysql_ işlevleri kullanmak gerekiyorsa, mysql_real_escape_string() kullanın

Gerçek sorununa gelince. Ne çalışmıyor? Eğer bir hata alıyorsanız? Biz daha çok bilgiye ihtiyacımız

Tamam, senin kod hiç çalışmaz. Sorgu Verilen

/cart.php?Target=product&product_id=16142&category_id=249

aşağıdaki gibi $ _GET doldurulur:

$_GET = array(
    'Target' => 'product',
    'product_id' => 16142,
    'category_id' => 249
)

Daha sonra aşağıdaki yapıyı kullanın:

if(!empty($_GET['cat'])){
   ... stuff part 1...
}elseif($_GET['product']){
   ... stuff part 2...
  1. Hayır 'cat' daki sorgusunda parametre (ve dolayısıyla ya $ _GET olmayacak), öylesine boş () true döndürür, reddedildiği ve bu nedenle asla çalıştırılmaz "şeyler part 1" yoktur.
  2. Hiçbir ürün 'daki sorgusunda parametre (ve dolayısıyla ya $ _GET olmayacak), bu nedenle elseif yanlış olduğunu ve bu nedenle ya' şeyler part 2 'bölümü yürütmek değil.

$ _GET Değişkenleri üzerine yazmasını hakkında yorum gelince, sadece ona yeni bir değer atamak. Ama bunun hakkında gidiş yanlış bir yoldur. $ _GET (Ve kuzenleri $ _POST, ve $ _REQUEST) üzerine asla. Bunlar salt okunur diziler gibi tedavi edilmelidir.

Bunu yapmak için uygulamanızda Tamam, ama bu GET / POST / İSTEK veri alınabilir tek yerler değil düşünebilirsiniz. Belki (önerilmiyor olan) girişler HTTP_QUERY_VARS kullanılarak, veya $_SERVER['QUERY_STRING'] veya _$SERVER['REQUEST_URI'] konum bazı modül / kütüphane. Hepsi temelde aynı bilgileri içerir, ancak PHP ayrı dahili olarak depolanır. Eğer $ _GET değiştirmek ve daha sonra bir kütüphane alternatif yerleri birinden sorgu değişkenleri kendi kopyalarını alır eğer sadece tek bir yerde overwrote çünkü, bu sadece overwrote değerinden tamamen farklı bir şey elde edeceksiniz. Bu büyülü diziler kod yürütmeden önce PHP tarafından oluşturulan ve daha sonra PHP'nin internals tekrar dokundu asla unutmayın. Aşağıdaki deneyin:

testscript.php yo = ahbap?:

<?
echo '<pre>';

echo "Before:\n";
echo "GET yo: ", $_GET['yo'], "\n";
echo "REQUEST yo: ", $_REQUEST['yo'], "\n";

$_GET['yo'] = "haha, it's not the same anymore";

echo "after:\n";
echo "GET yo: ", $_GET['yo'], "\n";
echo "REQUEST yo: ", $_REQUEST['yo'], "\n";

Bir komut dosyası koymak, bir tarayıcıda o kadar ateş. Bu alırsınız budur:

Before:
GET yo: dude
REQUEST yo: dude
after:
GET yo: haha, it's not the same anymore
REQUEST yo: dude

_REQUEST Yeni değeri ile otomatik güncellenen değil dikkat edin. Şimdi tutarsız verileri var ve bu potansiyel tamamen uygulama kırılabilir.