在PHP中获取<select>标签的选定索引值

3
我希望您能够将 PHP 相关的 <select> 标签中的选定值获取出来,但是我遇到了错误。

这是我的操作步骤:

HTML:

<select name="gender">
<option value="select">  Select </option>
<option value="male">    Male   </option>
<option value="female">  Female </option>
</select>

PHP脚本

$Gender  = $_POST["gender"];

但我收到了这些错误。
Notice: Undefined index: gender in C:\xampp\htdocs\omnama\signup.php on line 7

php脚本

$Gender  = isset($_POST["gender"]); ' it returns a empty string ? why ?

HTML

<form name="signup_form"  action="./signup.php" onsubmit="return validateForm()"   method="post">
<table> 
  <tr> <td> First Name    </td><td> <input type="text" name="fname" size=10/></td></tr>
  <tr> <td> Last Name     </td><td> <input type="text" name="lname" size=10/></td></tr>
  <tr> <td> Your Email    </td><td> <input type="text" name="email" size=10/></td></tr>
  <tr> <td> Re-type Email </td><td> <input type="text" name="remail"size=10/></td></tr>
  <tr> <td> Password      </td><td> <input type="password" name="paswod" size=10/> </td></tr>
  <tr> <td> Gender        </td><td> <select name="gender">
  <option>                Select </option>    
  <option value="male">   Male   </option>
  <option value="female"> Female </option></select></td></tr> 
  <tr> <td> <input type="submit" value="Sign up" id="signup"/> </td> </tr>
 </table>
 </form>

这是我的php脚本

  <?php
  $con     = mysql_connect("localhost","root","");
  $fname   = $_POST["fname"];
  $lname   = $_POST["lname"];
  $email   =  $_POST["email"];
  $paswod  = $_POST["paswod"];
  $Gender  = $_POST["gender"];
  mysql_select_db("homepage");

  if(mysql_num_rows(mysql_query("SELECT Email FROM users WHERE Email = '$email'",$con)))
  {
  echo "userid is already there";
  }
  else
  { 
  $sql= "INSERT INTO users (FirstName, LastName,Email,Password,Gender)
  VALUES
  ('$fname','$lname','$email','$paswod','$Gender')";

  if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
  echo "created";
  }
 ?> 

请帮我处理以下问题。我需要在PHP中获取选定的索引值。
我已经阅读了链接,以使用<select>标签在PHP中进行操作。

$Gender = isset($_POST["gender"]); 这段代码“不能”返回 null,根据定义。 - zerkms
空!我的意思是,当我打开并查看MySQL时,我在数据库中看到一个空字符串! - niko
2
@niko:空字符串和null不是同一件事。使用var_dump($Gender);var_dump($_POST);查看实际情况(无需进一步猜测)。 - zerkms
尝试这个,看看输出是什么: $Gender = isset($_POST["gender"])?$_POST["gender"]:""; - Amila
4
鲍比·桶又来了。 - Quentin
显示剩余8条评论
3个回答

6

您的表单是有效的。我看完您的完整html后,唯一想到的是,您正在传递“默认”值(未设置!)而不是选择某些内容。 建议按照@Vina在评论中建议的方式尝试,即给它一个已选选项或编写默认值。

<select name="gender">
<option value="default">Select </option>    
<option value="male">   Male   </option>
<option value="female"> Female </option>
</select>

或者

<select name="gender">
<option value="male" selected="selected">   Male   </option>
<option value="female"> Female </option>
</select>

当获取$_POST变量时,请检查它们是否已设置;您可以分配默认值,或者只是为空字符串,以防它们不存在。

最重要的是,避免SQL注入:

//....
$fname   = isset($_POST["fname"]) ? mysql_real_escape_string($_POST['fname']) : '';
$lname   = isset($_POST['lname']) ? mysql_real_escape_string($_POST['lname']) : '';
$email   = isset($_POST['email']) ? mysql_real_escape_string($_POST['email']) : '';
you might also want to validate e-mail:
if($mail = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
  $email = mysql_real_escape_string($_POST['email']);
}
else
{
  //die ('invalid email address');
  // or whatever, a default value? $email = '';
}
$paswod  = isset($_POST["paswod"]) ? mysql_real_escape_string($_POST['paswod']) : '';
$gender  = isset($_POST['gender']) ? mysql_real_escape_string($_POST['gender']) : '';

$query = mysql_query("SELECT Email FROM users WHERE Email = '".$email."')";
if(mysql_num_rows($query)> 0)
{
  echo 'userid is already there';
}
else
{
 $sql = "INSERT INTO users (FirstName, LastName, Email, Password, Gender)
         VALUES ('".$fname."','".$lname."','".$email."','".paswod."','".$gender."')";
$res = mysql_query($sql) or die('Error:'.mysql_error());
echo 'created';

2

就像你所说的一样...

$Gender  = isset($_POST["gender"]); ' it returns a empty string 

因为你没有提及使用POST还是GET方法,所以默认会使用GET方法。另一方面,你尝试使用POST方法检索值,但在表单中没有提到POST方法。这意味着不匹配的方法将导致为空。
尝试使用以下代码...
<form name="signup_form"  action="./signup.php" onsubmit="return validateForm()"   method="post">
<table> 
  <tr> <td> First Name    </td><td> <input type="text" name="fname" size=10/></td></tr>
  <tr> <td> Last Name     </td><td> <input type="text" name="lname" size=10/></td></tr>
  <tr> <td> Your Email    </td><td> <input type="text" name="email" size=10/></td></tr>
  <tr> <td> Re-type Email </td><td> <input type="text" name="remail"size=10/></td></tr>
  <tr> <td> Password      </td><td> <input type="password" name="paswod" size=10/> </td></tr>
  <tr> <td> Gender        </td><td> <select name="gender">
  <option value="select">                Select </option>    
  <option value="male">   Male   </option>
  <option value="female"> Female </option></select></td></tr> 
  <tr> <td> <input type="submit" value="Sign up" id="signup"/> </td> </tr>
 </table>
 </form>

在注册页面上
$Gender  = $_POST["gender"];

我确信,现在你将获得这个值。

我在HTML中使用了method="post"。抱歉,可能你没有看到它,在滚动条后面!不管怎样,谢谢。 - niko

-1
$gender = $_POST['gender'];
echo $gender;  

它将会输出所选择的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接