2017-05-31 106 views
0

我正在創建一個更新窗體,但是當我點擊更新按鈕時,它將重定向到我的更新頁面,並觸發POST請求,這使得它成爲一個有效的帖子,並且不要求任何信息更新。PHP窗體在加載時執行POST請求

<!DOCTYPE html> 
<html> 
    <?php require ('template/functions.php'); 
    $ID = $_GET['id']; 
    $sql_query = "SELECT * FROM specialties WHERE id='".$ID."'"; 
    $results = mysqli_query($connect,$sql_query); 
    $spc = mysqli_fetch_assoc($results); 
    $error = ""; 
    $specialist_section = false; 
    $description_section = false; 
    $specilist_exist = false; 
    $valid_post = true; 
    ?> 
    <?php 
    if ($_SERVER["REQUEST_METHOD"] == "post") { 
     valid();  
     if ($valid_post){ 
      $sql_query = "UPDATE specialties SET "; 
      $sql_query .= "specialty='".$_POST['specialty']."',"; 
      $sql_query .= "description='".$_POST[description]."'"; 
      $sql_query .= " WHERE id='".$_GET['id']."'"; 
      $result = mysqli_query($connect,$sql_query); 
      if (!results){ 
       print "MYSQL_ERROR: ".mysqli_error($connect); 
       $valid_post = false; 
       $specilist_exist = true; 
       $error .= "Specialty already exist <br/>"; 
      } 

     }else{ 
      $valid_post = false; 
     } 
    } 
    ?> 
    <head> 
     <title>Specialist Lookup </title> 
    </head> 
    <body> 
     <div class="container"> 
      <?php 
       if ($valid_post){?> 
        <h2>Update Complete</h2>     
        <?php 
       }else{ 
        if ($error) { ?> 
         <h3 style="color:red;"><?php echo $error ?> </h3> <?php }?> 
         <h1>Update Specialist</h1>   
         <form action="update.php" method="post"> 
          <div class="form-group"> 
          <label for="specialty" style="color:<?php if ($specialist_section){echo "red";}else{ echo "black";} ?>">Specialty:</label> 
          <input type="text" class="form-control" id="sp" name="specialty" value="<?php echo $spc['specialty'] ;?>" > 
          </div> 
          <div class="form-group"> 
           <label for="description" style="color:<?php if ($description_section){echo "red";}else{ echo "black";} ?>">Description:</label> 
           <textarea class="form-control" rows="5" id="comment" name="description"><?php echo $spc['description'] ; ?></textarea> 
          </div> 
          <button type="submit" class="btn btn-default">Submit</button> 
         </form> 
       <?php 
       } 
       ?> 
     <div> 
    </body> 
<?php 
    require ('template/footer.php'); 
?> 

/*Reference for the function*/ 
function valid(){ 
    $valid_post = true; 
    if (empty($specialty)) { 
       $valid_post = false; 
       $specialist_section = true; 
       $error = "Please fill in the Specialist section"; 

      } 

      elseif (empty($description)) { 
       $valid_post = false; 
       $error = "Please fill in the description section"; 
       $description_section = true; 
      } 

      elseif (empty($description) and empty($specialty)) { 
       $valid_post = false; 
       $error = "Please fill in the specialty and description section"; 
       $description_section = true; 
      } 
      else{ 
       $valid_post = true; 
      } 

} 
+0

你的問題是什麼。 – sudo

+0

是一個隱含的「即使我從未發送表單,郵件爲何仍然有效?」 – sensorario

+0

請讓我們有什麼問題,你正面臨着.. –

回答

0

默認設置

$valid_post = true; 

您需要更改的邏輯:

<!DOCTYPE html> 
<html> 
    <?php require ('template/functions.php'); 
    ... 
    $valid_post = false; 
    ?> 
    <?php 
    if ($_SERVER["REQUEST_METHOD"] == "post") { 
     $valid_post = valid(); 
     if ($valid_post){ 
      // ... 
     } 
    } 
    ?> 
    <head> 
     <title>Specialist Lookup </title> 
    </head> 
    <body> 
     <div class="container"> 
      <?php 
       if ($valid_post){?> 
        <h2>Update Complete</h2>     
        <?php 
       }else{ 
        // ... 
       } 
       ?> 
     <div> 
    </body> 

我不知道有效的()函數發生了什麼。但我建議你這種模式:

$validPost = false; 
if (valid()) { 
    $validPost = true; 
} 

$validPost = valid(); 
+0

我嘗試了大部分(除了更改驗證): – Blared

+0

以下是網站:http://jeff.blared.net/specialist/ 我試圖使$ valid_post除非IF聲明改變它,否則立即成立。但它似乎並沒有使它成爲一個有效的職位 – Blared

0

不太清楚你如何編寫valid()功能。

通過查看代碼,$valid_post設置爲默認爲true,所以你可能想看看你的valid()功能,看看它實際上是設置$valid_post是假的,如果它是無效的,否則即使沒有有效的表單數據,也會始終觸發您的更新功能。

如果您valid()函數返回布爾那麼就修改代碼 變化

valid()

$valid_post = valid()

而且,你可能不需要在你的代碼else可言, $valid_post = valid()這會簡單地分配一個boolean值,因此else部分將是多餘的。

讓我知道如果您有任何問題