2016-06-30 61 views
0

我想使用函數驗證我的表單發佈,然後將其插入到數據庫中。 我已經能夠做到這一點,但沒有把它放到函數中,但是當我把它放入一個函數時,它會插入而不驗證輸入字段。 感謝;) 這裏是我的代碼:我如何使用自定義函數來驗證php中的發佈數據

<?php 
     function validate_post(){ 
      global $link; 

      if (isset($_POST['submit'])) {   
       $error = array(); 

       if (!isset($_POST['cat_title']) || empty($_POST['cat_title'])) { 
        $error[] = "field cannot be empty"; 
       } else { 
        //check if a name only contains letters and whitespace 
        if (!preg_match("/^[a-zA-Z]*$/", $_POST['cat_title'])) { 
         $cat_err = "Only letters and whitespace allowed"; 
        } 
       } 
       //if no errors found 
       if (empty($error) && empty($cat_err)) { 
        $cat_title = htmlentities($_POST['cat_title']); 
        $sql = "INSERT INTO categories(cat_title)VALUES('$cat_title')"; 
        $insert = mysqli_query($link, $sql); 
        confirm_query($insert); 
        if (mysqli_affected_rows($link) == 1) { 
         $post_info = "Category has been added"; 
         redirect("categories.php"); 
        } else { 
         $post_info = "Adding category failed"; 
        } 
       } else { 
        $post_info = "Field cannot be empty"; 
       } 
      }  
     } 
    ?> 

<?php validate_post(); ?><!-- call validate_post function--> 
<!-- ADD CATEGORY FORM --> 
<form action="" method="post"> 
<?php 
    if(isset($post_info))echo $post_info."<br>"; 
    if(isset($cat_err))echo $cat_err."\n" ?> 
    <div class="form-group"> 
     <label for="cat_tile">Categories</label> 
     <input type="text" class="form-control" name="cat_title" id="cat_tile"/> 
    </div> 
    <div class="form-group"> 
     <input type="submit" class="btn btn-primary" value="+ Add Category" name="submit" > 
    </div> 
</form> 
+2

數據不會發布到功能,你需要從'$ _POST'數據參照例如傳遞給函數'函數foo($ bar){if(isset($ bar)){}}' – Matt

+0

傳遞函數作爲亞特說 –

+3

'$ _POST'是一個全局變量,您不需要將它傳遞給函數在功能範圍內使用它。 – Aron

回答

-1

下面的代碼將幫助你..

<?php 
    function validate_post(){ 
     global $link; 

     if (isset($_POST['submit'])) { 
      $cat_err = ""; 
      if (!isset($_POST['cat_title']) || empty($_POST['cat_title']) || $_POST['cat_title']=="") { 
       $cat_err = "field cannot be empty"; 
      } else { 
       //check if a name only contains letters and whitespace 
       if (!preg_match("/^[a-zA-Z]*$/", $_POST['cat_title'])) { 

        $cat_err = "Only letters and whitespace allowed"; 
       } 

      } 

      //if no errors found 
      if ($cat_err=="") { 
       $cat_title = htmlentities($_POST['cat_title']); 
        $sql = "INSERT INTO categories(cat_title)VALUES('$cat_title')"; 
        $insert = mysqli_query($link, $sql); 
        confirm_query($insert); 
        if (mysqli_affected_rows($link) == 1) { 
         $cat_err = "Category has been added"; 
         redirect("categories.php"); 
        } else { 
         $cat_err = "Adding category failed"; 
        } 

      } else { 
       $cat_err = "Field cannot be empty"; 
      } 
      return $cat_err; 
     } 
    } 
    ?> 
    <?php $data=validate_post();echo $data;?><!-- call validate_post function--> 
    <!-- ADD CATEGORY FORM --> 
    <form action="" method="post"> 

     <div class="form-group"> 
      <label for="cat_tile">Categories</label> 
      <input type="text" class="form-control" name="cat_title" id="cat_tile"/> 
     </div> 
     <div class="form-group"> 
      <input type="submit" class="btn btn-primary" value="+ Add Category" name="submit" > 
     </div> 

    </form> 
-2

嘗試在$ _POST數組中傳遞:

if (isset($_POST['submit'])){ 
    validate_post($_POST) 
} 

function validate_post($post_array) { 
    // your code here 
} 

馬特首先提出這一點,但這裏是你會怎麼做。

-2

使用你的代碼,這是你需要做的功能的破敗。

<?php 
function validate_post($link, $data=[]) {   
    $error = array(); 

    if (!isset($data['cat_title']) || empty($data['cat_title'])) { 
     $error[] = "field cannot be empty"; 
    } else { 
     //check if a name only contains letters and whitespace 
     if (!preg_match("/^[a-zA-Z]*$/", $data['cat_title'])) { 
      $cat_err = "Only letters and whitespace allowed"; 
     } 
    } 
    //if no errors found 
    if (empty($error) && empty($cat_err)) { 
     $cat_title = htmlentities($data['cat_title']); 
     $sql = "INSERT INTO categories(cat_title)VALUES('$cat_title')"; 
     $insert = mysqli_query($link, $sql); 
     confirm_query($insert); //This is another function you created??? 
     if (mysqli_affected_rows($link) == 1) { 
      $post_info = "Category has been added"; 
      redirect("categories.php"); 
     } else { 
      $post_info = "Adding category failed"; 
     } 
    } else { 
     $post_info = "Field cannot be empty"; 
    } 
} 

if (isset($_POST['submit'])) { 
    include 'dbfile.php'; // Containing your db link variable if that is how you've done it 
    validate_post($link, $_POST); // Usually you need to pass your database link by reference also rather than by global. 
} 

?> 

--html section-- 
-1

您的功能不會返回任何信息。你需要告訴它返回錯誤,然後對它們做些什麼。您需要重構消息在您的函數中的組織方式,但其要點如下:

return $error;添加到驗證函數的末尾。

然後在您的網頁正文:

<?php $errors = validate_post(); ?><!-- call validate_post function--> 
<!-- ADD CATEGORY FORM --> 
<form action="" method="post"> 
    <?php 
    foreach($errors as $error) 
    { 
    echo $error; 
    } 
    ?> 
    <div class="form-group"> 

因此,改變你的驗證功能,所有郵件保存到一個數組,返回數組,然後再處理項目。

函數內聲明的變量只在該函數的範圍內「存在」。 $post_info裏面的函數與$post_info之外的函數沒有任何關係。

+0

*編輯* - 這個回覆神祕的評論被刪除了...... *他在他的函數中聲明瞭'$ error'作爲數組。我定義'$ errors = validate_post();'的方式並不正確。它可以被命名爲任何東西......超出函數範圍的變量與函數範圍內的變量沒有關係。 – Wade

相關問題