2017-04-11 106 views
0

所以我有驗證我有一個表單的問題。除了驗證過程之外,其他一切似乎都有效。當我點擊提交即使沒有任何提交的字段,它的行爲是有效的,並將我帶到我的鏈接頁面。這是我的PHP網頁上我的形式:PHP驗證一個空字段的表格

<form method="post" action="submitpage.php"> 
    <h3>General Information</h3> 
     <p> 
      <label for="albumID">Album ID</label> 
      <input type="text" name="albumID" id="albumID" value="<?php echo $albumID; ?>"> 
     </p> 
     <p> 
      </br> 
      <label for="artistname">Artist Name</label> 
      <input type="text" name="artistname" id="artistname" value="<?php echo $artistname; ?>"> 
     </p> 
     <p> 
      <label for="albumname">Album Name:</label> 
      <input type="text" name="albumname" id="albumname" value="<?php echo $albumname; ?>"> 
     </p> 
     <p> 
      <label for="price">Price $ </label> 
      <input type="text" name="price" id="price" value="<?php echo $price; ?>"> 
     </p> 
     <h3> Media Type</h3> 
     <p> 
      <input type="radio" name="mediatype" id="mpeg" value="mpeg" 
      <?php 
      // test the value of the form input to see if the radio button should be checked 
      if ($type == "mpeg") {echo "checked";} 
      ?> 
      > 
      <label for="mpeg">MPEG audio file</label> 
      </br> 
      <input type="radio" name="mediatype" id="protectedacc" value="protectedacc" <?php 
      if ($type == "protectedacc") {echo "checked";} 
      ?>> 
      <label for="protectedacc">Protected AAC audio file</label> 
      <br> 
      <input type="radio" name="mediatype" id="protectedmpeg" value="protectedmpeg" <?php 
      if ($type == "protectedmpeg") {echo "checked";} 
      ?>> 
      <label for="protectedmpeg">Protected MPEG-4 video file</label> 
      </br> 
      <input type="radio" name="mediatype" id="purchasedaac" value="purchasedaac" <?php 
      if ($type == "purchasedaac") {echo "checked";} 
      ?>> 
      <label for="purchasedaac">Purchased AAC audio file</label> 
      <br> 
      <input type="radio" name="mediatype" id="aac" value="acc" <?php 
      if ($type == "acc") {echo "checked";} 
      ?>> 
      <label for="acc">AAC audio file</label> 
      <br>     
     </p> 

     <p> 
     <h3>Playlists</h3> 
      <input type="checkbox" name="playlists[]" id="rainydayjams" value="rainydayjams" 
      <?php 
      // loop through the array to see if the checkbox value is found and the checkbox should be checked 
      foreach ($playlists as $playlist) { 
      if ($playlist == "rainydayjams") {echo "checked";} 
      } 
      ?> 
      > 
      <label for="rainydayjams">Rainy Day Jams</label> 
      </br> 
      <input type="checkbox" name="playlists[]" id="workout" value="workout" 
      <?php 
      // loop through the array to see if the checkbox value is found and the checkbox should be checked 
      foreach ($playlists as $playlist) { 
      if ($playlist == "workout") {echo "checked";} 
      } 
      ?> 
      > 
      <label for="workout">Workout</label> 
      </br> 
      <input type="checkbox" name="playlists[]" id="feelgoodvibes" value="feelgoodvibes" 
      <?php 
      foreach ($playlists as $playlist) { 
      if ($playlist == "feelgoodvibes") {echo "checked";} 
      } 
      ?> 
      > 
      <label for="feelgoodvibes">Feel Good Vibes</label> 
      </br> 
      <input type="checkbox" name="playlists[]" id="rocking" value="rocking" 
      <?php 
      foreach ($playlists as $playlist) { 
      if ($playlist == "rocking") {echo "checked";} 
      } 
      ?> 
      > 
      <label for="rocking">Rocking Out</label> 
      </br> 
      <input type="checkbox" name="playlists[]" id="clubdance" value="clubdance" 
      <?php 
      foreach ($playlists as $playlist) { 
      if ($playlist == "clubdance") {echo "checked";} 
      } 
      ?> 
      > 
      <label for="clubdance">Club Dance Music</label> 
     </p> 

     <h3>Genre</h3> 
     <p><label for="genre">Genre: </label> 
      <select name="genre" id="genre"> 
       <option value="">Please select a genre</option> 
       <option value="rock" 
       <?php 
       // check to see if the county is selected 
        if ($genre=="rock") { echo "selected";} 
       ?> 
       >Rock</option> 

       <option value="jazz" 
       <?php 
        if ($genre=="jazz") { echo "selected";} 
       ?> 
       >Jazz</option> 

       <option value="metal" 
       <?php 
        if ($genre=="metal") { echo "selected";} 
       ?> 
       >Metal</option> 

       <option value="altpunk" 
       <?php 
        if ($genre=="altpunk") { echo "selected";} 
       ?> 
       >Alternative and Punk</option> 

       <option value="newjazz" 
       <?php 
        if ($genre=="newjazz") { echo "selected";} 
       ?> 
       >New Jazz</option> 

       <option value="blues" 
       <?php 
        if ($genre=="blues") { echo "selected";} 
       ?> 
       >Blues</option> 

       <option value="latin" 
       <?php 
        if ($genre=="latin") { echo "selected";} 
       ?> 
       >Latin</option> 

       <option value="reggae" 
       <?php 
        if ($genre=="reggae") { echo "selected";} 
       ?> 
       >Reggae</option> 

       <option value="pop" 
       <?php 
        if ($genre=="pop") { echo "selected";} 
       ?> 
       >POP</option> 

       <option value="soundtrack" 
       <?php 
        if ($genre=="soundtrack") { echo "selected";} 
       ?> 
       >Soundtrack</option>      
      </select> 
     </p> 

     <p> 
      <label for="track">Track Number</label> 
      <input type="text" name="track" id="track" value="<?php echo $track; ?>"> 
     </p> 
     <p> 
      <input type="submit" name="submit" value="Submit"> 
     </p> 
    </form> 

接下來是我的驗證腳本,應檢查所有字段中輸入,如果字段不爲空將它發送到另一個頁面中顯示的信息。

<?php 
require_once 'functions.php'; 
writeHead("Form Test"); 
if (isset($_POST['submit'])) { 
    // set the validation flag 
    $valid = true; 
    $albumID = htmlspecialchars(trim($_POST['albumID'])); 
    if (empty($albumID)) { 
     echo "<p class='error'>Please enter Album ID</p>"; 
     $valid = false; 
    } 
    $artistname = htmlspecialchars(trim($_POST['artistname'])); 
    if (empty($artistname)) { 
     echo "<p class='error'>Please enter your last name</p>"; 
     $valid = false; 
    } 
    $albumID = ucfirst(strtolower($albumID)); 
    $artistname = ucfirst(strtolower($artistname)); 
    $albumID = htmlspecialchars(trim($_POST['albumname'])); 
    if (empty($albumname)) { 
     echo "<p class='error'>Please enter an Album Name</p>"; 
     $valid = false; 
    } 

    $price = htmlspecialchars(trim($_POST['price'])); 
    if (empty($price)) { 
     echo "<p class='error'>Please enter a price</p>"; 
     $valid = false; 
    } 
    $track = htmlspecialchars(trim($_POST['track'])); 
    if (!is_numeric($track)) { 
     echo "<p class='error'>Track code must be numeric</p>"; 
     $valid = false; 
    } 
    if (!preg_match('/\d{5}(-\d{4})?/',$track)) { 
     echo "<p class='error'>Invalid track.</p>"; 
    } 
    if (isset($_POST['mediatype'])) { 
     $type = $_POST['mediatype']; 
    } else { 
     echo "<p class='error'>Please select a media type</p>"; 
     $valid = false; 
     $type=""; 
    } 
    if (isset($_POST['playlists'])) { 
     $playlists = $_POST['playlists']; 
    } else { 
     echo "<p class='error'>Please select at least one playlist</p>"; 
     $valid = false; 
     $playlists[0]=""; 
    } 
    $genre = $_POST['genre']; 
    if ($genre=="") { 
     echo "<p class='error'>Please select a genre</p>"; 
     $valid = false; 
    } 
      $valid = false; 
     } 
    } 
    if ($valid=true) { 
     header("Location:submitpage.php?albumID=$albumID&artistname=$artistname"); 
     exit(); 
    } 
} else { 
    $albumID=""; 
    $artistname=""; 
    $albumname=""; 
    $price=""; 
    $type =""; 
    $playlists[0]=""; 
    $genre=""; 
    $track=""; 
} 

?>

當我提交它,它應該送我到另一個PHP頁面,我可以顯示的信息和部分工作。但是如果字段留空,它也可以工作。我的驗證不起作用。任何想法,我可以如何解決這個請。

+0

所有代碼降低到您面對的問題的一部分,沒有人讀這麼長碼 –

回答

0

您在最後有錯字。更改

if($valid = true) 

if($valid) // or if($valid==true) 

目前,它是設置$有效的真實,然後執行if語句代碼。

+0

我嘗試只是在做的,如果($有效)和($有效= = true),兩者仍然繼續處理頁面,並將我帶到我的確認頁面。這就像它不驗證任何東西。 –

0

您可以使用空檢查空白字段名

empty($_POST["playlists"]) 

改變你的代碼。請與$有效==真

if ($valid==true) { 
     header("Location:submitpage.php?albumID=$albumID&artistname=$artistname"); 
     exit(); 
    }