2013-03-15 47 views
1

複選框無法正常工作。它有3個複選框。當我選擇所有三個複選框時,我不會收到任何錯誤。但是當我選擇1個或2個複選框我收到錯誤是這樣的:簡單的php程序不能正常工作

說明:未定義指數:chke在C:\瓦帕\萬維網\測試\ secpage.php第16行

<html> 
<body> 
<table> 
    <form method="post" action="secpage.php"> 
     <tr> 
      <td colspan="2"><center><h4>Registartion Form</h4></center></td> 
     </tr> 

     <tr> 
      <td>Username : </td> 
      <td><input type="text" name="txtname" value=""/></td> 
     </tr> 

     <tr> 
      <td>Password : </td> 
      <td><input type="password" name="txtpass" vale=""/></td> 
     </tr> 

     <tr> 
      <td>Email : </td> 
      <td><input typ="text" name="txtemail" value=""/></td> 
     </tr> 

     <tr> 
      <td>Address : </td> 
      <td><textarea name="add" /></textarea></td> 
     </tr> 

     <tr> 
      <td>Subjects : </td> 
      <td><input type="checkbox" name="chkm" value="Maths"</td>Maths 
      <td><input type="checkbox" name="chks" value="Science"</td>Science 
      <td><input type="checkbox" name="chke" value="English"</td>English 
     </tr> 

     <tr> 
      <td>Gender : </td> 
      <td><input type="radio" name="gen" value="Male"/>Male 
       <input type="radio" name="gen" value="Female"/>Female 
      </td> 
     </tr> 

     <tr> 
      <td colspan="2"><center><input type="submit" value="Submit"/></center></td> 
     </tr> 



</body> 
</html> 

這是PHP頁面:

<html> 
<body> 
<?php 
    $uname=$_POST["txtname"]; 
    $pass=$_POST["txtpass"]; 
    $email=$_POST["txtemail"]; 
    $add=$_POST["add"]; 
    $subm=$_POST["chkm"]; 
    $subs=$_POST["chks"]; 
    $sube=$_POST["chke"]; 
    $gen=$_POST["gen"]; 
?> 

<table> 
<tr> 
    <td>Username : </td> 
    <td><?php echo $uname; ?></td> 
</tr> 

<tr> 
    <td>Password : </td> 
    <td><?php echo $pass; ?></td> 
</tr> 

<tr> 
    <td>Email : </td> 
    <td><?php echo $email; ?></td> 
</tr> 

<tr> 
    <td>Address : </td> 
    <td><?php echo $add; ?></td> 
</tr> 

<tr> 
    <td>Subject Selected : </td> 
    <td><?php echo $subm." ".$subs." ".$sube; ?></td> 
</tr> 

<tr> 
    <td>Gender : </td> 
    <td><?php echo $gen ?></td> 
</tr> 

</table> 
</body> 
</html> 

任何幫助將不勝感激。

+0

更改谷= 「」/>價值= 「」/> – swapnesh 2013-03-15 08:02:42

+0

您忘記關閉輸入元素?失蹤> – 2013-03-15 08:03:20

回答

0

未檢查的複選框不會在帖子中發送它的值。所以$_POST["chke"]實際上並不存在。在從帖子中獲取價值之前,您應該檢查是否存在。

if(isset($_POST["chke"])) 
    $sube = $_POST["chke"]; 
0

您輸入的複選框標籤不完整。因此PHP無法讀取您的帖子值。

此外,如果它沒有「檢查」,POST值將不會被髮送。

1

您忘記關閉checkbox.

如果您發佈形式不檢查複選框,然後它會給你的錯誤,你現在得到。

您可以使用@忽略此錯誤,但這不是最佳做法。

此外

if(isset($_POST["chkm"])) 
{ 
    $subm=$_POST["chkm"]; 
} 

可以檢查if值設置或者不使用上述條件。

0

像下面的內容將解決您的undefined index錯誤:

<?php 
    $uname = array_key_exists("txtname", $_POST) ? $_POST["txtname"] : NULL; 
    $pass = array_key_exists("txtpass", $_POST) ? $_POST["txtpass"] : NULL; 
    $email = array_key_exists("txtemail", $_POST) ? $_POST["txtemail"] : NULL; 
    $add = array_key_exists("add", $_POST)  ? $_POST["add"]  : NULL; 
    $subm = array_key_exists("subm", $_POST)  ? $_POST["subm"]  : NULL; 
    $subs = array_key_exists("subs", $_POST)  ? $_POST["subs"]  : NULL; 
    $sube = array_key_exists("sube", $_POST)  ? $_POST["sube"]  : NULL; 
    $gen = array_key_exists("gen", $_POST)  ? $_POST["get"]  : NULL; 
?> 

但是它通常更好,以創建一個函數來處理這個問題爲您:

<?php 

    function get_expected_post($expected = array()){ 
    $ret = (object) NULL; 
    foreach ($expected as $key) { 
     $ret->{$key} = array_key_exists($key, $_POST) ? $_POST[$key] : NULL; 
    } 
    return $ret; 
    } 

    $post = get_expected_post(array(
    'txtname', 
    'txtpass', 
    'txtemail', 
    'add', 
    'subm', 
    'subs', 
    'sube', 
    'get' 
)) 

?> 

這樣,你可以更輕鬆地擴展物品在你的形式,並且每當你訪問以下,你可以放心,它的存在—,所以不會旅行錯誤:

<?php echo $post->subm; ?> 

如果您希望在腳本中將帖子名稱轉換爲不同的名稱,則可以擴展上述內容。另外,您還可以添加額外的安全性,如解析預期值的值等等。

0

在你的HTML你將要設置的名稱同樣爲每個複選框

<td><input type="checkbox" name="chk[]" value="Maths"</td>Maths 
<td><input type="checkbox" name="chk[]" value="Science"</td>Science 
<td><input type="checkbox" name="chk[]" value="English"</td>English 

然後,在你的PHP文件,你可以做到這一點

$checkbox = $_POST['chk']; 

$複選框將現在是選中的每個複選框的數組。

類似的問題在這裏 PHP and HTML Checkboxes using POST