문제

나는이 머리카락을 잠시 동안 찢어 버렸다.

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

에코는 아무것도 반환하지 않습니다.

settings.php :

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

settings.php-include out (물론 echo $ uid가 작동하지 않을 것입니다)에 주석하면 코드가 잘 작동하므로 MySQL_Real_escape_string이하는 일이어야합니다. 누구든지 내가 뭘 잘못하고 있는지 아는 사람이 있습니까?

index.php는 또한 settings.php가 포함되어 있다면 차이가 있습니다.

편집 : 아래 게시물로 인해 명확히하고 싶었습니다. 경로는 모두 정확합니다. settings.php (및 다른 스크립트)는 모두 루트 폴더 외부에 놓여 웹 사용자가 액세스 할 수 없도록합니다. 그들은 스크립트에 의해 액세스 할 때 잘 작동합니다.

도움이 되었습니까?

해결책

설명한대로 PHP 매뉴얼에서, mysql_real_escape_string에는 mysql_connect (두 번째 매개 변수)에서 설정된 실제 데이터베이스 연결이 필요합니다. 없으면 단순히 mysql_connect ()를 호출하여 하나를 만들려고합니다. 이것이 작동하지 않으면 거짓을 반환합니다.

따라서 먼저 데이터베이스 연결을 만들어야합니다. 하지만이 작업을 시작하기 전에 : 정말 나쁜 생각 모든 게시물을 가져 와서 변수를 가져 와서 글로벌 네임 스페이스에 뱉어 내십시오.

다른 팁

먼저, 변수 변수를 피하고,이 맥락에서는 실제로 필요하지 않으며 실제로 어떤 키가 해당 스크립트에 도달 할 것인지 확실하지 않으면 보안 문제로 인해 나쁜 관행을 제공합니다. 그들이 만든 것. 대신, 나는 탈출 된 값을 settings.php 내에 배열에 넣을 것이다. 그런 다음 settings.php를 포함한 후 배열을 간단히 var_dump ()하고 사용 가능한 항목을 볼 수 있습니다.

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

둘째, 올바른 URL 문자열로 login.php를 수동으로 호출하십시오. JavaScript가 호출하려는 내용은 정확히로 Login.php 스크립트에서 동작 문제가 발생하지 않도록 할 수 있습니다.

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

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

마지막으로 Post ()에서 보내는 데이터를 확인하겠습니다. 나는 자바 스크립트 전문가는 아니지만

uid:uid,
 pwd:pwd

나에게 문제가 발생할 수 있으므로 데이터가 예상되는 방식으로 전송되는지 확인하는 것이 좋습니다.

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

편집 : mysql_real_escape_string-donly-when-a-connection has-been-initiated를 기반으로 위의 코드에서 탈출을 제거했습니다. SQL로.

또한 로그인에 JavaScript를 사용하여 할 것이다 로그인만큼 기본적이고 필요한 기능을 가진 당신을 물기로 돌아와서, 당신은 viewer가 로그인 할 수있는 능력을 깨뜨리는 JavaScript 오류를 원하지 않습니다. 여기서 그렇게 할 것입니다.

유효한 MySQL 링크가 있습니까?

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

만약 link identifier 지정되지 않고 마지막 링크가 열립니다 mysql_connect() 가정됩니다. 그러한 링크가 발견되지 않으면 마치 마치 마치 마치 mysql_connect() 논쟁없이 부름 받았다. 연결이 없거나 확립되지 않은 경우 E_WARNING 레벨 오류가 생성됩니다.

오류보고 설정이 무시할 수 있습니다 E_WARNING 레벨 오류.

Index.php는 분명히 웹 사이트의 루트 디렉토리에 있지만 호출중인 스크립트는 "백엔드"카탈로그에 있습니다.

사용해보십시오 include_once 대신에 include 상대가 아닌 절대 경로를 사용합니다.

예시:

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

절대 경로를 사용하면 파일을 이동하면 삶이 더 쉬워집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top