簡體   English   中英

我可以以php形式刪除“ && isset”嗎?

[英]Can I remove “&& isset” in a php form

我有以下使用PHP和JavaScript進行驗證的表單...問題是,每次我想更新表單中的輸入時,我還需要更新&& isset$input = $_REQUEST['input name']; 在PHP中! 這些重要嗎? 有沒有辦法使整個過程更容易? 請指教

PHP:

<?php
   session_start();

   if ($_SERVER['REQUEST_METHOD'] == 'POST'){
      ob_start();

      if(isset($_REQUEST['name'])
      && isset($_REQUEST['email'])
      && isset($_REQUEST['message'])
      && isset($_REQUEST['number'])
      && isset($_REQUEST['date'])
      && isset($_REQUEST['select'])
      && isset($_REQUEST['radio'])
      && isset($_REQUEST['checkbox'])
      && isset($_REQUEST['token'])){

         if($_SESSION['token'] != $_POST['token']){
            $response = "0";
         } else {
            $_SESSION['token'] = "";
            $name = $_REQUEST['name'];
            $email = $_REQUEST['email'];
            $message = $_REQUEST['message'];
            $number = $_REQUEST['number'];
            $date = $_REQUEST['date'];
            $select = $_REQUEST['select'];
            $radio = $_REQUEST['radio'];
            $checkbox = $_REQUEST['checkbox'];

            $to = "";
            $subject = "New Message From: $name";
            $message = "Name: $name<br/>
                        number: $number<br/>
                        date: $date<br/>
                        select: $select<br/>
                        radio: $radio<br/>
                        checkbox: $checkbox<br/>
                        Email: $email<br/>
                        Message: $message";

            $headers  = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
            $headers .= 'From: '.$email . "\r\n";
            $mailed = (mail($to, $subject, $message, $headers));

            if( isset($_REQUEST['ajax']))$response = ($mailed) ? "1" :
            "0"; else $response = ($mailed) ? "<h2>Success!</h2>" :
            "<h2>Error! There was a problem with sending.</h2>";
            echo $response;
         }

      } else {
         echo "Form data error!";
      }

      ob_flush();
      die();
   }
?>

HTML表單:

<?php
               $token = md5(uniqid(rand(), TRUE));
               $_SESSION['token'] = $token;
            ?>

            <!--Contact Form-->
            <form id="contactForm" name="contactForm" action="contact.php"  method="post">
               <input name="token" type="hidden" value="<?php echo $token; ?>">
               <input name="ajax" type="hidden" value="1">

               <div class="name">
                  <p>Your Name</p>
                  <input name="name" class="required" autocomplete="off">
               </div>

               <div class="email-address">
                  <p>Email Address</p>
                  <input name="email" class="required email" autocomplete="off">
               </div>

               <div class="message">
                  <p>Message</p>
                  <textarea name="message" rows="5" class="required min3"></textarea>
               </div>

               <div class="number">
                  <p>Phone Number</p>
                  <input name="number" class="number" autocomplete="off">
               </div>

               <div class="date">
                  <p>Date <small>(dd/mm/yyyy)</small></p>
                  <input name="date" class="required date calendar" autocomplete="off">
               </div>

               <div class="dropdown">
                  <select name="select" class="required">
                     <option value="">Select</option>
                     <option value="DropdownA">DropdownA</option>
                     <option value="DropdownB">DropdownB</option>
                  </select>
               </div>

               <div class="radio">
                  <p>Radios:</p>
                  <label><input name="radio" type="radio" value="male" class="required">Male</label>
                  <label><input name="radio" type="radio" value="female" class="required">Female</label>
               </div>

               <div class="checkbox">
                  <p>Checkboxs:</p>
                  <label><input name="checkbox" type="checkbox" value="OptionA" class="required">Option A</label>
                  <label><input name="checkbox" type="checkbox" value="OptionB" class="required">Option B</label>
               </div>

               <div>
                  <p></p>
                  <input name="" class="required number spamcheck">
               </div>

               <button id="submit" type="submit">Send</button>
            </form>

在使用變量之前,您確實需要檢查是否設置了變量。 否則,您的腳本將針對未定義的變量引發錯誤。 例如,您每次都將嘗試檢查$_SESSION['token'] != $_POST['token']但這會給您帶來錯誤,因為沒有使用token名稱提交(或發送請求)的表單,為什么您需要在此之前進行檢查。

無論如何,對於多個isset()您可以使用逗號分隔符

if(isset($var, $var2, $var3...))

代替

if(isset($var) && isset($var2)...))

另外,如果會話令牌也沒有初始化(對頁面的全新請求),並且沒有請求發送給您, if()語句將返回false,從而觸發mail()函數。 因此,在您的特殊情況下,在以郵件形式使用它們之前,有必要進行檢查。

是。 它們很重要。 雖然有很多方法可以使過程更容易。 您可能想看一下像Symfony這樣的簡單框架(可以獨立於整個框架使用表單組件 )。

請注意,使用該表格可能會收到大量垃圾郵件。 添加驗證碼,例如reCaptcha

是的,驗證很重要,但是您可以簡化代碼。 我將使用數組來定義必填字段。 它易於維護並且代碼更少。

$requiredFields = array('name', 'email', 'message', 'number');
$valid = true;

foreach ($requiredFields as $field) {
    if (!isset($_REQUEST[$field])) {
        $valid = false;
        break;
    }
}

if ($valid) {
    // Do the stuff
} else {
    echo "Form data error!";
}

如果要檢查當前字段是否實際包含某些內容,請在條件中添加empty():

if (!isset($_REQUEST[$field]) || empty($_REQUEST[$field])) {

我認為在這種情況下,實際上沒有必要在第二部分中將帖子值分配給單獨的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM