2017-03-19 84 views
-2

我收到了一張表,並添加了2個按鈕來添加或更新信息。在php中進行實時驗證

我想在「描述」字段中進行驗證,其中**您只能寫出字母並且不會超過255個字符;並且在「名稱」字段中,您只能編寫少於50個字符。無論如何,我不能點擊「保存」或「添加」按鈕(按鈕被鎖定,直到所有的東西都是正確的)。

此外,頁面必須顯示實時(點擊按鈕之前)錯誤在每個字段中。

這裏是我的代碼,informationin表添加新時:

<?php include('connect.php'); 
    $error=""; 

    if(isset($_POST['btnsave'])) 
    { 
     $career_id=$_POST['carrera']; 
     $name=$_POST['txtname']; 
     $description=$_POST['txtdescription']; 
     $hourss=$_POST['txthours']; 


     if($_POST['txtid']=="0") 
     { 

      $a_sql=mysql_query("INSERT INTO subjects VALUES('','$career_id','$name','$description','$hourss')"); 
      if($a_sql) 
      { 

       header("location:index.php");// 

      } 


     }else{ 

      echo "Update"; 
     } 

    } 

    $sqlm = mysql_query("SELECT * FROM careers"); 
    $options = ""; 
     while($result = mysql_fetch_array($sqlm)){ 
    $options .= "<option value='".$result['id']."'>".$result['name']."</option>"; 
} 


?> 

      <h2 align="center">ADD NEW SUBJECT</h2> 
      <form method="Post"> 
       <table align="center"> 
        <tr>  
         <td>Career:</td> 
        <td><select name='carrera'><?php echo $options; ?></select><input type="hidden" name="txtid" value="0" /></td> 
        </tr> 
        <tr>  
         <td>Name:</td> 
         <td><input type='text' name='txtname'/></td> 

        </tr> 
        <tr>  
         <td>Description:</td> 
         <td><input type='text' name='txtdesription'/></td> 

        </tr> 
        <tr>  
         <td>Hours:</td> 
         <td> 
         <select name='txthours'/> 
          <option <?php if($hourss=='1') echo 'selected' ; ?> value="2">2 (two)</option> 
          <option <?php if($hourss=='1') echo 'selected' ; ?> value="4">4 (our)</option> 
          <option <?php if($hourss=='1') echo 'selected' ; ?> value="6">6 (six)</option> 
          <option <?php if($hourss=='1') echo 'selected' ; ?> value="8">8 (eight)</option> 
          <option <?php if($hourss=='1') echo 'selected' ; ?> value="10">10 (ten)</option> 
         </select> 
         </td> 
        </tr> 
        <tr>  
         <td></td> 
         <td><input type='submit' value=save name='btnsave'/></td> 

        </tr> 
       </table> 


      </form> 

而另一個代碼更新表中的信息:

<?php include('connect.php'); 

    $error=""; 


if(isset($_GET['edit'])) 
{ 
     $ident=$_GET['iden']; 
     $row=mysql_query("SELECT * FROM subjects WHERE id=$ident"); 
     $st_row=mysql_fetch_array($row); 


} 


?> 

      <h2 align="center">UPDATE SUBJECT</h2> 
      <form method="Post" action=''> 
       <table align="center"> 
        <tr>  
         <td>Career:</td> 
         <td><input type='text' name='txtcarreras_id' value="<?PHP echo $st_row['career'] ?>"/></td> 

        </tr> 
        <tr>  
         <td>Name:</td> 
         <td><input type='text' name='txtnombre' value="<?PHP echo $st_row['name'] ?>"/></td> 

        </tr> 
        <tr>  
         <td>Description:</td> 
         <td><input type='text' name='txtdescripcion' value="<?PHP echo $st_row['description'] ?>"/></td> 

        </tr> 
        <tr>  
         <td>Hours:</td> 
         <td><input type='text' name='txtcarga_horaria' value="<?PHP echo $st_row['hours'] ?>"/></td> 

        </tr> 
        <tr>  
         <td></td> 
         <td><input type='submit' value="save" name='btnsave'/></td> 

        </tr> 
       </table> 


      </form> 


<?php 
    if(isset($_POST['btnsave'])) 
    { 
     $career_id=$_POST['txtcarreras_id']; 
     $name=$_POST['txtnombre']; 
     $description=$_POST['txtdescripcion']; 
     $hours=$_POST['txtcarga_horaria']; 

     $a_sql=mysql_query("UPDATE materias SET career='$career_id', name='$name', description='$description', hours='$hours' WHERE id='$ident'"); 
      if($a_sql) 
      { 

       header("location:index.php"); 

      } 


     } 
?> 

我不知道該怎麼做:S

+0

如果您正在編寫新代碼,** _ please_不要使用'mysql_ *'函數**。它們已經老化並且破損,在PHP 5.5中已經被棄用了(這已經很舊了,它甚至不再接收安全更新),並且在PHP 7中完全刪除。使用['PDO'](https://secure.php.net/manual /en/book.pdo.php)或['mysqli_ *'](https://secure.php.net/manual/en/book.mysqli.php)替換爲_prepared statements_和_parameter binding_。有關詳細信息,請參閱http://stackoverflow.com/q/12859942/354577。 – Chris

+0

你的問題很難閱讀。請不要使用粗體,斜體或所有大寫字母。看起來你在大喊大叫。 – Chris

+0

php對於這個問題不是必需的,這是一個HTML5驗證的最小問題,考慮到您請求的頁面行爲,更可能是一個javascript/jquery問題。你研究過這個話題嗎?搜索了類似的帖子SO? – mickmackusa

回答

0

這真是一個Javascript問題,而不是PHP問題。 PHP運行服務器端。要實時驗證,您需要使用客戶端腳本,這通常意味着Javascript。長度非常簡單,只需將maxlength="255"添加到輸入字段(將50替換爲名稱字段的255,等等)。

僅限於字母更加複雜。我通常會使用jQuery來檢查每個按鍵上的字段 - 請參閱JQuery: detect change in input field以獲取相關信息。

要阻止提交按鈕,您可以使用禁用屬性 - 有關詳細信息,請參見What is the easiest way to disable/enable buttons and links (jQuery + Bootstrap)

最終你會發現一個關鍵字,但會節省一些時間,首先要爲每個輸入字段分配一個id。 ID必須是唯一的,但對於除單選按鈕之外的大多數字段,您可以將ID設置爲與名稱相同的值。然後,您使用$('#id')在jQuery中引用該字段 - 按名稱引用稍微複雜一些。

+0

請注意,客戶端驗證永遠不夠。由於它在用戶的瀏覽器中運行,用戶可以控制它(因此可以修改或禁用它)。你也應該_always_驗證服務器端。 – Chris