2013-01-14 2 views
0

특정 if 문의 성공시 헤더를 리디렉션하려고합니다.성공적인 POST 페이지로 리디렉션

그냥 리디렉션되지 않습니다. POST 메서드를 리디렉션하고 있습니다. 이것은 가능하지 않습니까? 내 데이터가 성공적으로 전송되고 리디렉션되지 않습니다.

$errors = false; 

if (isset($_POST['submit'])) { 

if (!empty($_POST['name']) && !empty($_POST['company']) && !empty($_POST['email']) && !empty($_POST['question'])) { 
     extract($_POST); 
     $sql = "INSERT INTO `knowledge` (`name`,`company`,`email`,`question`) VALUES ('$name','$company','$email','$question')"; 
     $query = mysql_query($sql) or die(mysql_error()); 
     header("Location: http://www.test.com/thankyou.php"); 
} else { 
    $errors = true; 
} 

if ($errors) { 
    $leftNav .= "<p style='color: red;'>You must fill out all form fields.</p>"; 
} 
} 
+0

당신의 상태가 항상 거짓이라는 것을 의미합니다 .. 또한 코드가 SQL injection을 위해 열려 있습니다. –

+0

Place var_dump ($ _ POST); 결국 게시물 데이터를 올바르게 수신하는지 확인하십시오. 그리고 헤더() 뒤에 die ('Redirecting')와 같은 것을 넣으십시오. 단지 그 부분에 도달한다는 것을 알기 위해서입니다. – aurbano

+0

그것은? 설명 해주십시오. – wowzuzz

답변

1

먼저 dev 환경에서 error_messaging 및 display_errors를 켜야합니다. 그렇게하면 지금 당장과 같은 문제의 최하층에 도달하는 데 도움이됩니다.

제 생각 엔이 리디렉션을 수행하기 전에 이미 브라우저에 출력 한 것 같습니다. 오류 메시징이있는 경우 "헤더가 이미 전송되었습니다"라는 오류가 발생하고 출력이 브라우저로 전송 된 코드 줄도 알려줍니다.

또한 SQL 인젝션 및이를 방지하는 방법에 대해 알아야합니다. 코드는 현재 매우 안전하지 않습니다. 더 이상 사용되지 않는 mysql_* 함수 대신 mysql_* 함수 또는 PDO를 사용하면 준비된 문을 사용하여 SQL 삽입을 방지 할 수 있습니다.

+0

포인터에 감사하는 마이크. – wowzuzz

0

이 코드는 엉망이다.

이 코드는 $_POST['leftnav'] 인 XSS 공격에 대해 열려있는 것 같습니다. 추출을 사용하지 마십시오. 사용자 자신의 변수를 덮어 쓸 수 있으므로 추출을 사용하지 마십시오.

코드가 모두 이스케이프되지 않았기 때문에 $_POST 키를 공격 할 수 있습니다. mysql_query는 더 이상 사용되지 않으며 준비된 문을 지원하지 않으므로 mysql_query를 사용하지 마십시오.

그리고 당신의 질문에 대한 답 : error_reporting은에 차례 :

<?php error_reporting(E_ALL);ini_set('display_errors', 1); ?> 

오류를 확인합니다. 공백이 있거나 뭔가가있는 경우 <?php PHP가 알려줍니다.

+0

팁 주셔서 감사합니다. – wowzuzz

관련 문제