2012-08-23 106 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