2012-08-23 3 views
1

나는 잠재적 인 직원에 대한 참조 편지를 업로드 할 수있는 응용 프로그램을 작성 중입니다.PHP 양식을 두 번 제출해야합니다.

모든 참고 자료에는 URL 끝에 고유 한 문자열이 포함 된 이메일이 발송됩니다. 예를 들어 주소는 www.mywebaddress? url = 503241a20b5085_18720621과 유사합니다.

고유 한 문자열이 유효한지 (즉, 데이터베이스에 있는지) 확인하려면 쿼리 검색을 수행해야합니다. 그러나 참조가 URL에 액세스하려고하면 보안 질문에 대답해야합니다. 그래서, 나는 그가 대답을 유효하게하는지, 그가 이전에 업로드했는지 등을 검사하여 어떤 페이지로 리다이렉트 할 것인지를 결정해야한다.

하지만 쿼리 때문에 내 코드는 사용자가 "제출"을 두 번 클릭해야합니다. 이건 정말 짜증나지만, 어떻게 해결해야할지 모르겠다.

if (isset ($_GET['url'])) { 
     $query = "SELECT * FROM ref_info WHERE url='" . $_GET['url'] . "'"; 
     $result = $db->execute($query); 
     if (empty ($result)) { 
      //error message 

     } else { 
      $url = $_GET['url']; 

      if ($_SESSION['validated']) { 
       if ($result[0]['uploaded'] ==1) { 
        $_SESSION['uploaded'] =true; 
       } else { 
        $_SESSION['uploaded'] =false; 
       } 

       include_once("process_upload.php"); 

      } else { 
       if (empty($result[0]['answer'])) { 
        include_once("security.php"); 

       } else { 
        include_once("security_check.php"); 
       } 
      } 
     } 

} 

아무것도 양식을 한 번만 제출 될 필요가 있다고 나는 그렇게 할 수 있나요 :

여기 내 코드의 관련 발췌입니까?

미리 제안 해 주셔서 감사합니다 !!

+0

첫 번째 쿼리에는 ajax를 사용하고 유효한지 확인하십시오. – amitchhajer

+0

이 질문에 글 머리 기호 워크 플로를 추가 할 수 있습니까? 왜 사용자가 두 번 제출해야하는지 이해할 수 있을지 모르겠습니다. – Matt

+6

당신은 코드가 SQL 인젝션에 엄청나게 노출되어 있습니다. 준비된 진술에 대해 읽어보십시오. 또한 읽으십시오 : http://stackoverflow.com/a/60496/871050 –

답변

1
if (isset ($_GET['url'])) { 
     $query = "SELECT * FROM ref_info WHERE url='" . $_GET['url'] . "'"; //that is really not secure. Take a look at mysql_real_escape_string or something like that in yor $db 
     $result = $db->execute($query); 
     if (empty ($result)) { 
      //error message 

     } else { 
      $url = $_GET['url']; 
      if (empty($result[0]['answer'])) { // page is just opened,form is not yet submitted - ask sequrity question 
       include_once("security.php");  
      } else { //oh. Submit is done - let me check if it is Ok 
       include_once("security_check.php"); 
      } 
      if ($_SESSION['validated']) { //validation is Ok? Yeah. Answer is not posted yet, so validation fails and we do nothing. Just show a form with a question 
       if ($result[0]['uploaded'] ==1) { 
        $_SESSION['uploaded'] =true; 
       } else { 
        $_SESSION['uploaded'] =false; 
       } 

       include_once("process_upload.php"); 

      } 
     } 

} 
+0

내가 찾던 내용이 아닙니다. 양식은 여전히 ​​두 번 제출해야합니다. 하지만 몇 가지 좋은 제안, 그래서 +1 – nv39

+0

두 번 제출해야하는 이유는 무엇입니까? 두 번 클릭하면 어떻게됩니까? 프로세스 업로드? 또는 무엇을? –

+0

양식을 두 번 제출하는 경우에만 페이지가 리디렉션됩니다. 처음에만 쿼리가 실행되고 실제로는 아무 것도 발생하지 않습니다. – nv39

관련 문제