PHP, jQuery ve sonrası ():. Haberci şeyleri mysql_real_escape_string

4 Cevap php

Ben bir süre için bu bir saçımı yırtılma olmuştur.

index.php:

$(document).ready(function(){ 
    $(".index_login_subm").click(function(){
        uid = $("input:username").val();
        pwd = $("input:password").val();
        $.post("backend/login.php",{
            uid:uid,
            pwd:pwd
        },function(data){
            alert("Returned data: " + data);
         });
        return false;
    });
});

login.php:

include("../../settings.php");
echo $uid;
echo $_POST['uid'];

yankıları hiçbiri bir şey verir.

settings.php:

foreach ($_POST as $key => $value) { 
   $$key = mysql_real_escape_string($value);
}
foreach ($_GET as $key => $value) { 
   $$key = mysql_real_escape_string($value); 
}

I mysql_real_escape_string yapar (iyi, tabii ki echo $ uid çalışmaz) üzerinden settings.php-içerirler, bu nedenle olmalı şey yorum eğer kod iyi çalışıyor. Herkes ben yanlış yapıyorum ne bir fikrin var mı?

Herhangi bir fark yaparsa index.php de settings.php içerir.

EDIT: Aşağıda Mesajlar beni açıklığa kavuşturmak istiyorum yaptı; yolları hepsi doğru. settings.php (ve diğer bazı komut dosyaları) bütün bir web kullanıcı onları erişilmez hale getirmek için kök klasörü dışında konur. Komut erişildiğinde Onlar iyi çalışıyoruz.

4 Cevap

Açıklandığı gibi in the PHP manual, mysql_real_escape_string (ikinci parametre) mysql_connect ile kurulmuş gerçek bir veritabanı bağlantısı gerektirir. Hiçbiri yoksa, sadece mysql_connect () çağırarak bir tane oluşturmak için çalışır. Bu da işe yaramazsa, yanlış döndürür.

Yani, önce bir veritabanı bağlantısı oluşturmak gerekir. Ama bunu yaparken başlamadan önce: Bunu unutmayın bir really really bad idea sadece her POST almak ve değişken GET ve genel ad içine tükürmek için.

Birincisi, ben değişken değişkenler önleyeceğini, bu bağlamda gerçekten gerekli değilsin ve anahtarları aslında o senaryoyu ulaşan ne emin değilseniz onlar hareketli bir hedef için yapmak ve onlar yüzünden güvenlik sorunları kötü uygulama konum onlar oluşturmak. Bunun yerine, ben bir diziye settings.php içindeki kaçtı değerleri koymak istiyorsunuz. Sonra sadece settings.php dahil sonra) (dizi var_dump ve kullanılabilir olduğunu görebilirsiniz.

function extract_requests(){
    $res = array();
    foreach ($_REQUEST as $key => $value) { 
        if($key){
            $res[$key] = $value;
        }
    }
    return $res;
}

Herhangi bir davranış problemleri login.php komut kendisinden gelmiyor emin olabilirsiniz ki ikinci, el, sen javascript için aramak istediğiniz tam olarak ne, doğru url dizesi ile login.php diyoruz.

http://localhost/somewhere/login.php?uid=50

include("../../settings.php");
$input = extract_requests();
var_dump($input);
echo $input['uid'];
echo $_POST['uid'];

Son olarak, siz) (yazı gönderiyor verilerinizi kontrol olur. Ben bir javascript gurusu değilim, ama

uid:uid,
 pwd:pwd

bana sorunlara neden olur, bu nedenle veri beklediğiniz şekilde gönderiliyor emin olmak için iyi olacak gibi görünüyor.

$(document).ready(function(){ 
    $(".index_login_subm").click(function(){
        uid = $("input:username").val();
        pwd = $("input:password").val();
        var inputData = {uid:uid, pwd:pwd};
        alert(uid+" "+pwd);
        // If you have a console.log() available, just use it on inputData here instead.
        $.post("backend/login.php",inputData
         ,function(data){
            alert("Returned data: " + data);
         });
        return false;
    });
});

Edit: gerçekten, bunu koymak hemen önce bir şeyler kaçan daha iyi olacak, çünkü mysql_real_escape_string-yalnızca-zaman-bir-bağlantı-başlatılmıştır şey dayanarak, ben, yukarıdaki koddan kaçan çıkardık sql içine.

Buna ek olarak, giriş için javascript kullanarak WILL temel ve giriş olarak gerekli işlevselliği ile, sizi ısırmaya geri gelmek unutmayın, bir javascript hata bir izleyici için herhangi bir yeteneği kırmak istemiyorum bunu yapacak Burada oturum açın.

Geçerli bir mysql bağlantı var mı?

string mysql_real_escape_string  ( string $unescaped_string
                                [, resource $link_identifier  ] )

link identifier is not specified, the last link opened by mysql_connect() varsayılır. Böyle bir bağlantı bulunursa, o mysql_connect() argümanlar hiçbir ile çağrılmış gibi bir bağlantı oluşturmaya çalışacağız. Hiçbir bağlantı veya kurulmuş ise, bir E_WARNING seviyesinde bir hata üretilir.

Ayarı göz ardı eder E_WARNING düzeyi hataları raporlama hata olabilir.

index.php açıkça web sitesinin kök dizininde bulunan, ancak aradığınız script "arka uç" kataloğunda olduğunu.

include_once yerine include kullanarak deneyin ve mutlak yolları değil, göreli kullanın.

Örnek:

<?php
    include_once($_SERVER['DOCUMENT_ROOT']."/settings.php"); //absolute path to file
    echo $uid;
    echo $_POST['uid'];
?>

Etrafında dosyaları taşırsanız mutlak yollarını kullanarak sizin için hayatı daha kolay hale getirecek.