2013-10-06 2 views
0

저는 주로 내 오류가 변수가 테이블에서 가져 오지 않았 음을 확인했습니다. 그러나 사용자 이름과 암호를 묻는 동시에 해당 데이터를 요구하는 오류를 볼 수 없습니다. 표는 [사용자 이름], [비밀번호], [회사]로 구성됩니다. 목표는 사용자 이름과 비밀번호가 확인 된 후 회사의 이름을 기반으로 사용자를 유도하도록하는 것입니다. 마지막에 에코가 계속 나타납니다.변수를 사용하여 트래픽을 유도하십시오.

$sql = "SELECT 'password' and 'company' from users where 'username' = '$username';"; 

이 식별자 주위

$sql = "SELECT `password`, `company` from `users` where `username` = '$username'"; 

사용 역 따옴표가 아닌 따옴표해야한다 :

여기

function RegisterUser($usename, $password, $company) 
{ 
    // hash the pwd 
    $hpwd = hash('sha256',$password); 
    $q ='insert into users values(username, password, company) values(?,?,?)'; 
    $stmt = PDO::prepare($q); 
    $stmt->exectue(array($username, $hpwd, $company)); 
} 
// validate user and return the company if successfull 

function ValidateUser($username, $password, &$company) 
{ 
    $hpwd = hash('sha256',$password); 
    $q ='select company from users where username=? AND password=?'; 
    $stmt = PDO::prepare($q); 
    $stmt->exectue(array($username, $hpwd)); 
    if(($company = $stmt->fetch(PDO::FETCH_COLUMN)) === false) 
    { 
    $company = header('Location: login.php'); 
    } 

    elseif($company == "monkeynones"){ 
     header('Location: admin1.php'); 
     } 
+0

대부분 확실합니까? '$ row'에 내용을 덤프하고 비어 있는지 확인하십시오. 나는 그것을 훨씬 더 분명하게 만들 것이다. 또한, 내가 아는 한'password','company'와'username'을 따옴표 안에 넣지 않아도됩니다. 나는 당신이'\''을 사용하는 것을 의미한다고 생각하는데, 틀린 것 같지만. – OptimusCrime

+1

[mysql 확장 기능은 더 이상 사용되지 않습니다.] (http://www.php.net/manual/en/function.mysql-connect.php) –

+0

열 이름을 나타내며 $ row에 print_r을 추가했습니다. –

답변

2

조회에 잘못된 코드입니다. and은 쉼표로 바뀌며 쿼리의 세미콜론은 필요하지 않습니다.

+0

나는 그것을 시도하고 바닥에 에코를 인쇄 동일한 응답을 얻을 –

0

새로운 프로그래머가 사용자 이름/암호 인증을 제대로 배우는 것이 중요하므로이 긴 게시물을 작성해야한다고 생각했습니다.

첫 번째로, eicto가 지적했듯이 mysql 확장은 더 이상 사용되지 않으며 실제로 사용되지 않아야합니다.

금속에.
php.net을 방문하여 PDO

인코딩되지 않은 비밀번호를 저장하지 마십시오.

설정 PDO :

// you need to store $link somewhere. in a class preferrably 
function InitPDO(&$link) 
{ 
    // havet the database handle all strings as UTF-8. 
    $options = array('PDO::MYSQL_ATTR_INIT_COMMAND' => 'set names utf8'); 
    $link = new PDO ('mysql:host='.$config['dsn_host'].';dbname='.$config['dsn_db'], $config['username'], $config['password'], $options) ; 

    // If there is an error executing database queries, have PDO to throw an exception. 
    $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $link->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
} 

을 사용자의 등록에 여기

당신이해야 할 일이다.

function RegisterUser($username, $password, $company) 
{ 
    // hash the pwd 
    $hpwd = hash('sha256',$password); 
    $q ='insert into users values(username, password, company) values(?,?,?)'; 
    $stmt = $link->prepare($q); 
    $stmt->execute(array($username, $hpwd, $company)); 
} 

// 경우 성공적인

function ValidateUser($username, $password, &$company) 
{ 
    $hpwd = hash('sha256',$password); 
    $q ='select company from users where username=? AND password=?'; 
    $stmt = $link->prepare($q); 
    $stmt->execute(array($username, $hpwd)); 
    if(($company = $stmt->fetch(PDO::FETCH_COLUMN)) === false) 
    { 
    $company = 'invalid'; // because user auth failed'; 
    } 
    //else all is good 
} 

예를 시험 사용 회사가 사용자를 확인하고 돌아갑니다.

// assumes there is a 'login.php' and a 'invalid.php' file 
$link = null; 
InitPDO($link); 
RegisterUser('tester','password','login'); 
VerifyUser('tester','password', $redir); 
if(file_exists($redir . '.php')) 
{ 
    header('Location: '. $redir . '.php'); 
    exit; 
} 
echo 'error. no valid page found to fullfill query'; 
+0

구문 분석 오류 : 구문 오류, 예기치 않은 ';' 코드 네 번째 라인 나는 이것이 중요하다는 데 동의하고 그것이 내가 그것을 이해할 수 있도록 노력하는 이유입니다. 사용되지 않는 코드에 대해 나에게 언급되었으므로 변경 사항을 배우기 시작합니다. 당신의 도움을 주셔서 감사합니다. 나는 지역 사회로 향하기 전에 1 주일 반 동안 이것을 고심하고 있었다. –

+0

나는 추가했다; 라인의 끝에서 그리고 그것을 지 웠고 여분의 perens를 추가했습니다. 이제 빈 페이지가 생겨서 작동하는 것 같습니다. 회사를 사용하여 이동하는 방법에 대한 조언과 사용자가 사용자 페이지에 도달했을 때 회사가 콘텐츠를 결정할 수 있도록 유지할 수 있습니까? –

+0

나는 어둠 속에서 찌르다가 'invalid company ...'라는 텍스트가 기본 '무효 한 사용자'페이지의 이름이 될 것이라고 추측했다. 멀리 회사에 따라 다른 콘텐츠에 관한 추가 메타 데이터. 나는 더 많은 DB 필드를 추가하는 것이 좋습니다. 그들을 돌려 보내고 그들이 사용하는대로 사용하십시오. –

관련 문제