如何仅更新表格中非空白的字段

时间:2012-03-13 22:55:31

标签: php

我对MySQL和PHP非常陌生,并且一直在教自己。我不希望任何人为我编写代码,但我正在寻找一些关于如何最好地继续使用此脚本的建议。

我有一组用户可以更新他们在特定产品系列上的“技能水平”。目前,我已经完成了所有工作。但是,我不希望用户每次提交时都必须更新每个技能级别。

所以,换句话说,我希望他们能够将一个字段留空,但是用他们的技能水平填充其他字段,从而只更新他们输入的字段。

我在开发服务器上执行此操作,因此这是我正在使用的代码。

mysql_connect("127.0.0.1","root","time2start") or die("Connection Failed");
mysql_select_db("joomla_dev_15") or die ("Database Connection Failed");
$user = $_POST['user'];
$USP = $_POST['USP'];
$USPV = $_POST['USPV'];
$VSP = $_POST['VSP'];
echo "$user<br />";
echo "$USP<br />";
echo "$USPV<br />";
echo "$VSP<br />";

$query = "UPDATE `joomla_dev_15`.`enterprise_storage` SET  `$user` =  '$USP' WHERE `enterprise_storage`.`id` = 1;";
if(mysql_query($query))
{
    echo "updated<br />";
}else{
    echo "FAILURE";
}

$query = "UPDATE  `joomla_dev_15`.`enterprise_storage` SET  `$user` =  '$USPV' WHERE  `enterprise_storage`.`id` =2;";
if(mysql_query($query))
{
    echo "updated<br />";
}else{
    echo "FAILURE";
}

$query = "UPDATE  `joomla_dev_15`.`enterprise_storage` SET  `$user` =  '$VSP' WHERE  `enterprise_storage`.`id` =3;";
if( mysql_query($query) )
{
    echo "updated<br />";
}else{
    echo "FAILURE";
}

非常感谢任何帮助或建议!

3 个答案:

答案 0 :(得分:0)

也许我没有完全理解这一点,但在UPDATE语句之前检查变量就足够了。

$user = $_POST['user'];
$USP = $_POST['USP']; // Make sure to escape this

if (!empty(trim($USP))) { // Added a trim so that when space is entered, it will still be considered empty
  $query = "UPDATE `joomla_dev_15`.`enterprise_storage` SET  `$user` =  '$USP' WHERE `enterprise_storage`.`id` = 1;";
  if(mysql_query($query))
  {
    echo "updated<br />";
  }else{
    echo "FAILURE";
  }
}
else {
  echo "Empty String. Nothing to Do"
}

答案 1 :(得分:0)

我能以一种令我满意的方式弄明白。

请记住,此代码不一定是针对恶意攻击的消毒或安全,这只是一个开发服务器,所以我可以证明这个概念,我会稍后回来并保护它。

另外,我自学了,所以这很可能不是最有效的方法

为了获得用户技能的当前默认值,我必须运行此查询

$result = mysql_query("SELECT id , user FROM enterprise_storage WHERE id =1");
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
$row1 = mysql_fetch_array($result);

这允许我为基于此特定查询返回的每一行分配一个变量。因此,在这种情况下,此人(在此示例中名为“user”)将返回产品ID“1”的技能级别

一旦我为想要分配变量的几个项目运行相同的查询,我就可以将它放在我的html表单中作为每个文本框的默认值:

Please enter your skill level on the following products:</br>
USP: <input type="text" name="USP" value=<?php echo $row1[user]?> /><br />
USPV: <input type="text" name="USPV" value=<?php echo $row2[user]?> /><br />
VSP: <input type="text" name="VSP" value=<?php echo $row3[user]?> /><br />

我省略了HTML的其余部分,因为它现在不相关。 最后,这解决了我的问题,因为它将默认值放入表单字段,因此用户不需要更新该值。

感谢所有的建议!

答案 2 :(得分:-1)

检查表单值是否为空白,如果它们是,则不将它们发布到数据库中 - 另外,在将数据放入数据库之前,您确实需要查看清理用户输入。例如,请参阅http://php.net/manual/en/function.mysql-real-escape-string.php