2012-12-08 27 views
5

görüntülendiğinde sadece ilk ben mümkün olduğunca küçük aşağıdaki kodu kesmeye çalıştı söylemek bana izin seçeneğini "Seç" Lütfen gösteren açılır menüsünden nasıl engellenir:hata mesajı

 <?php 
     // required variables (make them explciit no need for foreach loop) 

     $getyear  = (isset($_POST['year'])) ? $_POST['year'] : ''; 
     $getpass  = (isset($_POST['studentpass'])) ? $_POST['studentpass'] : ''; 
     $getretypepass = (isset($_POST['retypepass'])) ? $_POST['retypepass'] : ''; 
     $errormsg  = (isset($errormsg)) ? $errormsg : ''; 

     $validSubmission = isset($_POST['registerbtn']) && $_POST['year'] && $_POST['studentpass'] && $_POST['retypepass']; 

     $min_year = 1; 
     $max_year = 10; 
     $years = range($min_year, $max_year); // returns array with numeric values of 1900 - 2012 
     $yearHTML = ''; 
     $yearHTML .= '<select name="year" id="yearDrop">' . PHP_EOL; 
     $yearHTML .= '<option value="">Please Select</option>' . PHP_EOL; 
     foreach ($years as $year) { 
      if (!$validSubmission && isset($_POST['year']) && $year == $_POST['year']) { 
       $yearHTML .= "<option value='" . $year . "' selected='selected'>$year</option>" . PHP_EOL; 
      } else { 
       $yearHTML .= "<option value='" . $year . "'>$year</option>" . PHP_EOL; 
      } 
     } 

     $yearHTML .= '</select>'; 


     if ((isset($_POST['registerbtn']))) { 
      if (in_array($_POST['year'], $years) === true) { 
       $getyear = (int) $_POST['year']; 
      } 
      $getpass  = $_POST['studentpass']; 
      $getretypepass = $_POST['retypepass']; 


      if ($getyear) { 
       if ($getpass) { 
        if (strlen($getpass) <= 5) { 
         $errormsg = "The Password must be a minimum of 6 characters or more"; 
        } else { 
         if ($getretypepass) { 
          if ($getpass === $getretypepass) { 
           //perform 2 queries, one query contains $aliasnumrows and other contains $numrows 

           if ($aliasnumrows == 0) { 
            if ($numrows == 0) { 
             //perform query which contains $numrows 


             if ($numrows == 1) { 
              $errormsg = "<span style='color: green'>Student has been Registered</span>"; 

              $getyear = ""; 


             } else { 
              $errormsg = "An error has occured, Student has not been Registered"; 

             } 

            } 

            else { 
             $errormsg = "There is already a Student with that Username"; 
            } 
           } 

           else { 
            $errormsg = "There is already a Student with that Alias"; 
           } 
          } 

          else { 
           $errormsg = "Your Passwords did not match"; 
          } 
         } 

         else { 
          $errormsg = "You must retype your Password to Register"; 
         } 
        } 
       } else { 
        $errormsg = "You must enter in a Password to Register"; 
       } 

      } 

     else{ 
    $errormsg = "You must enter in Student's current Academic Year to Register"; 
    } 

    } 

$form = " 
<form action='" . htmlentities($_SERVER["PHP_SELF"]) . "' method='post'> 
    <table> 
    <tr> 
    <td></td> 
    <td id='errormsg'>$errormsg</td> 
</tr> 
    <tr> 
    <td>Year:</td> 
    <td>{$yearHTML}</td> 
    </tr> 
    <tr> 
    <td>Password:</td> 
    <td><input type='password' name='studentpass' value='' /></td> 
    </tr> 
    <tr> 
    <td>Retype Password:</td> 
    <td><input type='password' name='retypepass' value='' /></td> 
    </tr> 
    <tr> 
    <tr> 
    <td></td> 
    <td><input type='submit' value='Register' name='registerbtn' /></td> 
    </tr> 
    </table> 
    </form>"; 

    echo $form; 

Tamam bu sorun yaşıyorum. Şifre yazmak ve şifre yazmak için yıllarca bir açılır menü ve iki metin girişi var. Şimdi, kullanıcı açılır menüden bir yıl seçerse ve formu gönderirse, bir şifre girilmesi gerektiğini belirten hata mesajını görüntüler ve yıl açılan menü hala kullanıcının açılan menüden seçtiği seçeneği görüntüler.

Yapmakta olduğum sorun, aşağıdaki iletilerden herhangi biri görüntülendiğinde, açılır menü seçeneğinin "Lütfen Seç" i görmeye devam etmesidir. Sorum şu ki, aşağıdaki hata mesajları görüntülendiğinde açılan menüden "Lütfen Seç" seçeneğine geri dönmeyi nasıl durdurabilirim?

$errormsg = "There is already a Student with that Username"; 
$errormsg = "There is already a Student with that Alias"; 
$errormsg = "Your Passwords did not match"; 
$errormsg = "You must retype your Password to Register"; 

Ben değişmeye ihtiyacı inanıyoruz kod satırı

burada:

$validSubmission = isset($_POST['registerbtn']) && $_POST['year'] && $_POST['studentpass'] && $_POST['retypepass']; 
+0

Kodunuz (sadece bunlardan birini gösterecektir ve tekrar formu göndermek zorunda kalacak çünkü birisi birden fazla hata olduğunda sakıncalı saymıyorum) takip etmek son derece zordur mantık bir LOT içerir. Formları doğruladığımda, tüm hatalarımı bir diziye ekledikten sonra bunları tekrar kullanıcıya göstermek için bunlara döngü yapıyorum. – Mike

+0

@Mike Evet, yapabileceğim tek bir gelişme. Dürüst olmak gerekirse ben arka uç yapıyorum, bu yüzden ya da ön uçu yapan kişiye kadar bunu belirlemek bana kalmış mı? – user1881090

cevap

1

ne aradığınız budur düşünüyorum :

// This is just a suggestion, but I would set these to null instead of an empty string: $getyear = (isset($_POST['year'])) ? $_POST['year'] : null; $getpass = (isset($_POST['studentpass'])) ? $_POST['studentpass'] : null; $getretypepass = (isset($_POST['retypepass'])) ? $_POST['retypepass'] : null; $errormsg = (isset($errormsg)) ? $errormsg : null; // You have already defined these, so no need to use $_POST here // Also, I like to compare it to an actual value rather than just doing if ($variable) // to avoid unforseen circumstances. Note, isset() returns false if $var == null. $validSubmission = (isset($_POST['registerbtn']) && isset($getyear) && isset($getpass) && isset($getretypepass)); 

Sonra daha sonra geriye mantığınızı var düşünmek

:

foreach ($years as $year) { 
     if ($validSubmission && $year == $getyear) { 
      $yearHTML .= "<option value='" . $year . "' selected='selected'>$year</option>" . PHP_EOL; 
     } else { 
      $yearHTML .= "<option value='" . $year . "'>$year</option>" . PHP_EOL; 
     } 
    } 
+0

Değerlerin "falsey" değil, ayarlanmış olup olmadığını doğrulamak için $ validSubmission kullanıyor olduğuna inanıyorum. –

+0

Doğru, belki mantığının geriye doğru olduğunu ve daha sonra "$ validSubmission" üzerindeki kontrolünü tersine çevirdiğini düşünüyorum. – Mike

+0

Önceden sahip olduğum betiğin üstündeki isset() 'i atlamanız ve isset'i belirttiğiniz gibi "$ validSubmiision" değerine dahil etmem gerekiyor mu? – user1881090

0

sorun sunucuya geri gönderiyorsunuz ve sunucu sayfasını yeniden oluşturma olmasıdır. Bu 'u düzgün bir şekilde yapabilmek için ve tüm tarayıcılarda çalışacak bir şekilde, $ _POST sonuçlarını (doğru bir şekilde çıktıktan sonra) tekrar giriş öğelerine tekrar eklemeniz gerekir.

Benzer şekilde, option etiketinin selected="selected" öznitelik kümesine sahip olması gerektiğini belirlemek için seçim kutusu için $ _POST değerini kullanmanız gerekir.

1

Yıl açılan repopulating, Gönderimin herhangi bir kısmının geçerli olup olmadığını umursamıyorsunuzdur, sadece yeniden değerlendirmek istemezsiniz. Bunun için mantığı bırak.

foreach ($years as $year) { 
    if (isset($_POST['year']) && $year == $_POST['year']) { 
     $yearHTML .= "<option value='" . $year . "' selected='selected'>$year</option>" . PHP_EOL; 
    } else { 
     $yearHTML .= "<option value='" . $year . "'>$year</option>" . PHP_EOL; 
    } 
} 
+0

Katılıyorum. Bu muhtemelen benimkinden daha iyi bir cevap. – Mike

İlgili konular