Question

Je déchire mes cheveux avec celui-ci pendant un certain temps.

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

aucun des échos retourne quoi que ce soit.

settings.php:

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

Le code fonctionne bien si je commente le settings.php-les articles (bien, bien sûr l'écho $ uid ne fonctionnera pas), donc il doit être quelque chose que le fait mysql_real_escape_string. Quelqu'un at-il une idée de ce que je fais mal?

index.php comprend également settings.php si cela fait une différence.

EDIT: Messages ci-dessous m'a donné envie de préciser; les chemins sont tous corrects. settings.php (et quelques autres scripts) sont tous mis en dehors du dossier racine pour les rendre inaccessibles à un utilisateur Web. Ils fonctionnent bien quand on y accède par les scripts.

Était-ce utile?

La solution

Comme décrit dans le manuel PHP , mysql_real_escape_string nécessite une connexion de base de données réelle établie avec mysql_connect (dans le second paramètre). Si aucun n'existe, il tente de créer un en appelant simplement mysql_connect (). Si cela ne fonctionne pas non plus, il retourne faux.

Alors, vous devez créer une connexion de base de données d'abord. Mais avant de commencer à le faire. Noter qu'il est vraiment très mauvais idée pour prendre simplement tous les POST et variables GET et cracher dans l'espace de noms global

Autres conseils

D'abord, je voudrais éviter les variables variables, ils sont vraiment pas nécessaires dans ce contexte et ils font une cible mobile si vous n'êtes pas sûr de ce que les clés atteignent effectivement ce script, et ils sont mauvaises pratiques en raison de les problèmes de sécurité qu'ils créent. Au lieu de cela, je mettrais les valeurs dans les échappées settings.php dans un tableau. Ensuite, vous pouvez simplement var_dump () le tableau après y compris settings.php, et voir ce qui était disponible.

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

En second lieu, appeler manuellement login.php avec la chaîne url correcte, exactement ce que vous voulez le javascript pour appeler à, de sorte que vous pouvez être sûr que tous les problèmes de comportement ne viennent pas du script login.php lui-même.

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

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

Enfin, je voudrais vérifier vos données que vous envoyez en poste (). Je ne suis pas un gourou javascript, mais

uid:uid,
 pwd:pwd

ressemble à cela causerait des problèmes me, il serait bon de vous assurer que vos données sont envoyées de la manière que vous attendez.

$(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: Sur la base de la chose mysql_real_escape_string seule-en-un-connexion a-été initiée, je l'ai enlevé échapper du code ci-dessus, parce que vraiment, vous serez mieux échapper à l'étoffe avant vous le mettez dans le sql.

De plus, gardez à l'esprit que l'utilisation javascript pour la connexion VIENDRA revenir à vous mordre, avec des fonctionnalités comme base et nécessaire connexion, vous ne voulez pas d'une erreur javascript pour briser une capacité pour un spectateur de se connecter. ici, il le fera.

Y at-il un lien de MySQL valide?

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

Si le link identifier n'est pas spécifié, le dernier lien ouvert par mysql_connect() est supposé. Si un tel lien se trouve, il va essayer de créer un comme si mysql_connect() a été appelé sans argument. Si aucune connexion est trouvée ou établie, une erreur de niveau de E_WARNING est généré.

Peut-être mise en rapport d'erreurs ne tient pas compte des erreurs au niveau de E_WARNING.

index.php est évidemment situé dans le répertoire racine du site, mais le script que vous appelez est dans catalogue « back-end ».

Essayez d'utiliser include_once au lieu de include et utiliser des chemins absolus, et non relative.

Exemple:

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

En utilisant des chemins absolus va rendre la vie plus facile pour vous si vous déplacer des fichiers.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top