2017-05-31 107 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部分将是多余的。

让我知道如果您有任何问题