【问题标题】:Php MySQL update html formphp MySQL更新html表单
【发布时间】:2013-02-27 12:40:59
【问题描述】:

有一张桌子:

|id name surname email    |
|1  john surjohn @mail.com|
|2  peter pet    @mail.com|                   
|.........................|

PHP:

<?php
if(isset($_POST['update']))
{
...
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());

}

$id = $_POST['id'];
$name = $_POST['name'];
$surname = $_POST['surname'];
$mail = $_POST['mail'];

$sql = "UPDATE emps ".
       "SET name= '$name', surname'$surname', email='$mail' ".
       "WHERE Id = $id" ;
mysql_select_db('dbase');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not update data: ' . mysql_error());
}
echo "blablablabla ! \n";
mysql_close($conn);
}
else

{
?>
<form method="post" action="<?php $_PHP_SELF ?>">
    <fieldset style="width: 350px" >
<table width="400" border="0" cellspacing="1" cellpadding="2">
<tr>
<td width="100">Id </td>
<td><input name="id" type="text" id="id" value=""></td>
</tr>
<tr>
<td width="100">name</td>
<td><input type="text" maxlength="15" name="name" value="" ></td>
</tr>
<tr>
<td width="100">surname</td>
<td><input type="text" maxlength="40" name="surname" value="" ></td>
</tr>
<tr>

<td width="100"> </td>
<td>
<input name="update" type="submit" id="update" value="update">
</td>
</tr>
</table>
        </fieldset>
</form>
<?php
}
?>
   } 

在这种形式中,我需要更新所有字段,否则更新的表可以有空值。 例如,我想要更新姓名字段,但保留姓氏,通过电子邮件发送现有值。想法?

【问题讨论】:

  • 不确定你在问什么。
  • 最好的方法是用数据库中的值填充输入值,这样如果有人更改了它会更新的信息,如果他们不这样做,它只会用数据库中的任何内容进行更新反正数据库。
  • 你能纠正问题吗?没看懂
  • 他的意思是(我认为)当他提交表单时,如果该人没有填写“姓氏”字段,它将在数据库中更新为空白,而不是保留内容。
  • 您使用的是an obsolete database API,应该使用modern replacement。您也容易受到SQL injection attacks的影响,现代 API 可以让您更轻松地从 defend 中获得。

标签: php html mysql forms


【解决方案1】:

可以试试这样的:

$id = $_POST['id'];
$name = $_POST['name'];
$surname = $_POST['surname'];
$mail = $_POST['mail'];

$sql = "UPDATE emps SET";
$moresql = '';

if(isset($name) && !empty($name)) {
    $moresql .= " name = '$name'";  
}

if(isset($surname) && !empty($surname)) {
    if ($moresql) $moresql .= ',';
    $moresql .= " surname = '$surname'";    
}

if(isset($mail) && !empty($mail)) {
    if ($moresql) $moresql .= ',';
    $moresql .= " mail = '$mail'";  
}

$sql .= $moresql;
$sql .= " WHERE Id = '$id'";

但这是未经测试的。

【讨论】:

    【解决方案2】:

    Karl 的想法是要走的路,但可以这样重构:

    $id = $_POST['id'];
    
    $sql = "UPDATE emps SET";
    $fieldValuePairs = array();
    
    foreach($_POST as $key => value)
        if($key != 'id')
           $fieldValuePairs[] = "'$key' = '$value'";
    
    $sql .= " ". implode(',', $fieldValuePairs)." WHERE id = $id";
    

    注意:这仅在您使用输入名称(在表单中)等于列名称(在数据库中)时才有效。

    祝你有美好的一天。

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 1970-01-01
      • 2013-09-30
      • 2014-01-15
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多