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

Posted

技术标签:

【中文标题】在php中获取<select>标签的选定索引值【英文标题】:get the selected index value of <select> tag in php 【发布时间】:2011-10-08 08:11:23 【问题描述】:

我试图从 php 中的 &lt;select&gt; 标记中获取选定的值,但出现错误。

这就是我所做的,

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 中获取选定的索引值。

我已阅读此 link 以在 PHP 中使用 &lt;select&gt; 标记。

【问题讨论】:

$Gender = isset($_POST["gender"]); ' it returns a null string ? why ? --- 此代码不能根据定义返回null 空!我的意思是当我打开并看到 mysql 时,我在数据库中看到一个空字符串! 您的表格是有效表格吗?意思是,在&lt;form&gt;&lt;/form&gt; 标签之间并带有提交按钮 @niko:空字符串与null 不同。使用var_dump($Gender);var_dump($_POST); 来查看您实际拥有的东西(无需进一步猜测 然后Bobby Tables 再次骑行 【参考方案1】:

您的表格有效。我唯一想到的是,在看到您的完整 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.sorry 中使用了 method="post" 但你错过了它,在滚动后面!总之谢谢【参考方案3】:
$gender = $_POST['gender'];
echo $gender;  

它将回显所选值。

【讨论】:

以上是关于在php中获取<select>标签的选定索引值的主要内容,如果未能解决你的问题,请参考以下文章

怎么在servlet中获取单个<select>标签的值

php 下拉列表 怎么获取key value

获取select标签中option的value值

JavaScript怎样获取select标签当前选择的值呢?

4种方法获取select下拉框标签中的值

怎么在js中获得select标签被选中的值