【问题标题】:PHP form validation check exising fieldsPHP 表单验证检查现有字段
【发布时间】:2013-02-16 23:30:16
【问题描述】:

目前,如果数据库中存在,用户可以从菜单中选择他们的名字。 如果他们的名字不存在,他们可以将他们的名字添加到表单中。

我希望表单检查是否选择了名称。如果尚未选择名称,则用户可以将其名称插入表单中。关于如何做到这一点的任何想法?提前致谢。

Form 

<html>  
<head>  
<title>Form Input Data</title> 
</head>
<table>  
<body><table border="1">
<table bgcolor="lightblue"></body>

     <form method="post" action="insert_ac.php"> 
    <br>
<tr><td align="left"><strong>Nurse Information</strong></td></tr>
<tr>
<td><font color="red">Please select your name</font></td>
</tr>
<tr>
<td>Fullname</td>
<td><select name="valuelist">;
<option value="valuelist" name="nurse_name" value='<?php echo $nurse_name;  ?>'></option>
<?php
$value=$_POST ["valuelist"];
$con = mysql_connect("localhost","root","") or die('Could not connect:'.mysql_error());
mysql_select_db("a&e", $con) or die('Could not select database.');

$fetch_nurse_name = mysql_query("SELECT DISTINCT Fullname FROM nurse");

while($throw_nurse_name = mysql_fetch_array($fetch_nurse_name)) {
echo '<option   value=\"'.$throw_nurse_name[0].'">'.$throw_nurse_name[0].'</option>';
 }
 echo "</select>";

?>
</td>
</tr>
<tr>
<td>Please register name here:</td>
<tr>  

        <td>Fullname</td>

       <td><input type="text" name="nurse_forename" size="30"> </td>

     </tr>
 </tr>

PHP

  //get NURSE values from form
  $nurse_forename = $_POST['nurse_forename'];
//check ALL fields have values 
if($_POST['nurse_forename']==""){
die('ERROR: Please Register a Nurse');
 }
//insert 
$sql ="INSERT INTO Nurse(Fullname)
VALUES('$nurse_forename')";
mysql_query($sql,$con) or die('Error: ' . mysql_error());
echo "1 record added";
// close connection 
mysql_close($con);
?>

【问题讨论】:

    标签: php html validation required-field


    【解决方案1】:

    我不太明白您在上面的 HTML 中获取 $nurse_name 的位置,但我认为它就在那里..

    因此请执行以下操作以选择当前护士姓名:

    while($throw_nurse_name = mysql_fetch_array($fetch_nurse_name)) {
    echo '<option '. ( $throw_nurse_name[0] === $nurse_name ? 'selected="selected"' : '' ) .'  value=\"'.$throw_nurse_name[0].'">'.$throw_nurse_name[0].'</option>';
     }
     echo "</select>";
    

    哦,我敢肯定,如果您在存储数据库输入之前将其转义,以及在输出之前对其进行转义,护士们会很高兴的。

    //insert 
    $sql ="INSERT INTO Nurse(Fullname) VALUES('". mysql_real_escape_string( $nurse_forename ) ."')";
    

    输出时至少使用htmlspecialchars():

    <option value="valuelist" name="nurse_name" value='<?php echo htmlspecialchars( $nurse_name; )  ?>'></option>
    

    还建议使用mysqli 函数代替mysql,因为不推荐使用mysql。

    【讨论】:

      【解决方案2】:

      更新了一些代码(只是一个例子):

      <?php
      
      $nurses = array() ;
      $nurse_found = false ;
      //Get all nurses from the database and store them in the array before the next step
      
      
      //Print your select input
      echo "<select>" ;
      foreach ($nurses as $nurse){
        $selected = "" ;  
        if (isset($_POST['nurse_forename']) && $nurse['name']===$_POST['nurse_forename']){
          $nurse_found = true ;
          $selected = "selected" ;
        }
        echo "<option value='{$nurse['name']}' {$selected}>{$nurse['name']}</option>" ;
      
      }
      echo "</select"> ;
      
      //NEXT STEP:
      //A nurse is not found. If form is submitted, we can add her into database.
      
      if (!$nurse_found && !empty($_POST['nurse_forename'])){
        $name = mysql_real_escape_string($_POST['nurse_forename']) ;
        $query = "INSERT INTO `nurses` VALUES ('{$name}') ; " ;
        $result = mysql_query($query, $mysql_link) ;
        if (mysql_affected_rows($mysql_link) == 1){
          echo "A new nurse has been added" ;
        }
      }
      ?>
      

      一些提示:

      • 编写结构良好的代码并将逻辑操作与图形操作分开
      • 停止使用 mysql_* 扩展名,因为它是deprecated。请改用mysqliPDO
      • 清理并检查用户输入的所有内容。否则您的数据库容易受到SQL injections 的攻击,而您的网站也容易受到XSS 的攻击。

      祝你好运!

      【讨论】:

      • 用户可以从当前数据库中选择自己的名字。如果他们选择一个空白值,则他们的名字不存在。他们可以将名称插入数据库。
      • 你可以查看SELECT IGNORE
      • 你能给我举个例子吗?
      • 我将不得不玩弄你的代码。但是感谢您的帮助,非常感谢
      猜你喜欢
      • 2018-09-29
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多