2017-09-22 101 views
0

該代碼用於在激活按鈕後將數據放入數據庫中,然後將其取出並替換爲(問題保存!)。問題是我花了兩次嘗試才使它消失(按鈕)。 $ numofrow用於驗證操作是否一次(提交按鈕的操作)。問題不在數據庫,查詢等,它的確是按鈕。謝謝你的時間。我必須按下提交按鈕兩次(PHP)

這是我的代碼:

if(isset($real_domaine)){ 

    $tt = "SELECT*FROM uniwix.table0 WHERE id= '$id' "; 
    $rr = mysqli_query($database,$tt); 

    while($rows = mysqli_fetch_assoc($rr)){ 

     [rows call...] 

     $md = "SELECT*FROM uniwix.table1 WHERE usern='$us' and question='$sujet'"; 
     $ao = mysqli_query($database,$md); 
     $numofrow = mysqli_num_rows($ao); 

     if($numofrow == 0){ 
      echo '<form action="" method="POST"> 
       <input type="submit" name="sauvegarder" value="Save the question"/> 
       </form>'; 

      if(isset($_POST['sauvegarder'])){ 
       $qu = "INSERT INTO database (usern,question) VALUES('".$us."','".$sujet."')"; 
       $sm = mysqli_query($database,$qu); 
      } 
     }else{ 
      echo 'Question saved!'; 
     } 

    //end of while loop 
    }  

// end of if(isset($real_domaine)) 
} 
+0

HTML是無關緊要的。錯誤在邏輯中。 – axiac

+0

我想知道$ real_domaine是什麼。因此,當用戶和問題在數據庫中找不到時顯示錶單。你迴應'問題保存!'當它已經在數據庫中時,'問題保存!'應該在Insert查詢下回顯,這是'保存問題!'的當前回顯。應改爲「問題已保存」 – Chad

回答

1

的問題是不是數據庫,查詢等,其真正的按鈕。

該按鈕幾乎是被動的,它所做的只是在按下按鈕時將數據發送到服務器。錯誤在於PHP代碼的(缺乏)邏輯。

當腳本第一次運行時,$numofrow0。它運行echo,用該按鈕生成表單,然後檢查是否設置了$_POST['sauvegarder']。當然,它並未設置,因爲第一次加載頁面時,使用了GET方法。

用戶按下按鈕,數據使用POST提交,代碼再次運行。 $numofrow仍然爲0(尚未在數據庫中插入數據),表單再次顯示,但此時設置了$_POST['sauvegarder'],並將從瀏覽器接收到的數據保存到數據庫中。

你需要重新思考你的頁面邏輯。

更多的表單是空的。也許它有效,但這不是編寫表單的正確方法。您想要發送到服務器的輸入字段必須保留在表單中。

甚至更​​重要的是,您的數據庫代碼是SQL注入的候選者。 請勿使用字符串連接構建查詢。使用prepared statements。還閱讀了關於how prevent SQL injection in PHP

相關問題