Frage

Ich habe mir schon eine Weile die Haare mit diesem gerissen.

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'];

Keiner der Echos gibt etwas zurück.

Settings.php:

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

Der Code funktioniert gut, wenn ich die Einstellungen kommentiere. Hat jemand eine Idee, was ich falsch mache?

Index.php enthält auch settings.php, wenn dies einen Unterschied macht.

Bearbeiten: Beiträge unten machten mich dazu, zu klären; Die Pfade sind alle korrekt. Settings.Php (und einige andere Skripte) werden alle außerhalb des Stammordners gestellt, um sie für einen Webbenutzer nicht zugänglich zu machen. Sie funktionieren gut, wenn sie von den Skripten zugreifen.

War es hilfreich?

Lösung

Wie beschrieben im PHP -Handbuch, mySQL_REAL_ESCAPE_STRING benötigt eine reale Datenbankverbindung, die mit MySQL_Connect festgelegt wurde (im zweiten Parameter). Wenn keiner existiert, versucht es, eine zu erstellen, indem es einfach mySQL_Connect () aufgerufen wird. Wenn dies auch nicht funktioniert, gibt es falsch zurück.

Sie müssten also zuerst eine Datenbankverbindung erstellen. Aber bevor Sie damit beginnen: Beachten Sie, dass es a ist Wirklich wirklich schlechte Idee Einfach jeden Beitrag einnehmen und variable erhalten und in den globalen Namespace ausspucken.

Andere Tipps

Erstens würde ich die variablen Variablen vermeiden, sie sind in diesem Zusammenhang wirklich nicht erforderlich und sie sorgen für ein bewegendes Ziel, wenn Sie nicht sicher sind, welche Schlüssel dieses Skript tatsächlich erreichen, und sie sind aufgrund der Sicherheitsprobleme eine schlechte Praxis dass sie erschaffen. Stattdessen würde ich die entkommenen Werte in Einstellungen in ein Array einfügen. Dann können Sie einfach VAR_DUMP () das Array nach der Eingabe von Einstellungen.Php und sehen, was verfügbar war.

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

Zweitens rufen Sie login.php manuell mit der richtigen URL -Zeichenfolge an, genau das, was das JavaScript anrufen soll, damit Sie sicher sein können, dass Verhaltensprobleme nicht aus dem Skript von Login.php selbst stammen.

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

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

Schließlich würde ich Ihre Daten überprüfen, die Sie in Post () senden. Ich bin kein JavaScript -Guru, aber

uid:uid,
 pwd:pwd

Es sieht so aus, als würde es mir Probleme verursachen, daher wäre es gut, sicherzustellen, dass Ihre Daten so gesendet werden, wie Sie es erwarten.

$(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;
    });
});

Bearbeiten: Basierend auf dem Ding von MySQL_REAL_ESCAPE_STRING-WAN-A-CONNECTION-Has-bee-initiierte, ich habe die Flucht aus dem obigen Code entfernt, weil Sie wirklich besser dran sind, dem Zeug zu entkommen, bevor Sie es gestellt haben in die SQL.

Beachten Sie außerdem, dass die Verwendung von JavaScript für die Anmeldung verwendet wird WILLE Kommen Sie zurück, um Sie zu beißen, wobei die Funktionalität als grundlegend und notwendig als Anmeldung erforderlich ist, möchten Sie keinen JavaScript -Fehler, um die Fähigkeit eines Betrachters zu brechen, sich anzumelden. Hier wird dies tun.

Gibt es einen gültigen MySQL -Link?

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

Wenn die link identifier wird nicht angegeben, der letzte Link wurde von eröffnet von mysql_connect() wird angenommen. Wenn kein solcher Link gefunden wird, wird versucht, eines zu erstellen, als ob mysql_connect() wurde ohne Argumente gerufen. Wenn keine Verbindung gefunden oder festgelegt wird, ist eine E_WARNING Der Ebenenfehler wird generiert.

Möglicherweise ist Ihre Fehlerberichterstattungseinstellung ignoriert E_WARNING Levelfehler.

Index.php befindet sich offensichtlich im Root -Verzeichnis der Website, aber das Skript, das Sie anrufen, befindet sich im "Backend" -Katalog.

Versuchen Sie es zu verwenden include_once Anstatt von include und verwenden Sie absolute Pfade, nicht relativ.

Beispiel:

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

Die Verwendung von absoluten Pfaden erleichtert das Leben für Sie, wenn Sie Dateien verschieben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top