我在html中有一个简单的选项标签,它列出了当用户点击捐赠时数据库上的所有用户我想要输入的值并使用用户在捐赠中输入的值更新dontate_Total行relvant到该用户标签部分。
这是我的HTML
<table>
<form>
<tr><td><label>User:</label></td>
<td>
<select>
<?php do{?>
<option> <?php echo $rsNames['first_Name'];?> <?php echo $rsNames['last_Name'];?></option>
<?php } while ( $rsNames= mysql_fetch_assoc($names_query))?>
</select>
</td>
</tr>
<tr><td><label>Donation £</label></td><td><input type="text" maxlength="9" value="0.00"/></td></tr>
<tr><td><input id="submit" type="submit" value="DONATE" /></td></tr>
</form>
</table>
以上工作正常,但现在我想在用户点击DONATE输入字段时运行并更新查询。这是我的sql语句,我相信在一些建议之后不会工作
$donate_sql =UPDATE `donate` SET donate_Total= donate_Total + $_GET['value'] WHERE first_Name = 'first_Name' AND last_Name ='last_Name';
感谢
答案 0 :(得分:3)
你好吗?
在HTML中,您必须为字段命名,以便从PHP脚本中检索它们,即为<select>
元素指定名称(属性),如下所示:
<select name="fullname">
此外,嵌套的<option>
元素应该具有“value”属性,这是因为您几乎总是希望将字段标识为唯一ID(因此在引用表行时没有错误)但是您希望向用户显示有用的信息,例如全名。
如果您打算使用ID,那么您的代码(以HTML格式)应更新为:
<option value="<?php echo $rsNames['id']; ?>"> <?php echo $rsNames['first_Name'];?> <?php echo $rsNames['last_Name'];?></option>
这将被视为:
<option value="1">John Doe</option>
<option value="2">Jane Doe</option>
然后在您的PHP文件中,编写一个完全更新所需用户的查询会更容易。
<?php
$id = $_GET['fullname'];
$donate_sql = "UPDATE `donate` SET donate_Total = donate_Total + {$_GET['value']} WHERE id = $id";
mysql_query($donate_sql);
?>
如果您不打算使用身份证,那么您必须面对这样一个事实,即如果2名用户被称为John Doe,您将更新两者的“总”捐赠金额,并且它将会你要解析信息会有点复杂。
说你不要想要使用ID并且你想要坚持你的姓名,那么你会写下这样的话:
<option value="<?php echo $rsNames['first_Name'] . '||' . $rsNames['last_Name'];?>"><?php echo $rsNames['first_Name'];?> <?php echo $rsNames['last_Name'];?></option>
这会产生类似于:
的输出<option value="John||Doe">John Doe</option>
<option value="Jane||Doe">Jane Doe</option>
<option value="Mary Jane||Doe">Mary Jane Doe</option>
第三个<option>
标记是一个为什么你不能依赖空格来解析名字和姓氏的例子;一个人可以有双重姓名或双姓(或两者兼有),就像我的情况一样; - )
分隔符||是一个任意的,想法是使用一个或多个不太可能被用作名称或姓氏的字符。
这种方法(又是一个非常错误一个)会要求你之后单独解析名字和姓氏,所以你的脚本最终会成为:
<?php
$name = $_GET['fullname']; //'fullname' is the name of our <select>
$name = explode('||',$name); //this returns an array, with each position defined by the || token
//$name is now an array(0=>'John',1=>'Doe') - for example.
//Get the first name
$firstName = $name[0]; //John
//Get the last name
$lastName = $name[1]; //Doe
//Finally, your SQL would be updated to be:
$donate_sql = "UPDATE `donate` SET donate_Total= donate_Total + {$_GET['value']} WHERE first_Name = '$firstName' AND last_Name ='$lastName'";
mysql_query($donate_sql);
?>
快速回答是:
$donate_sql = "UPDATE `donate` SET donate_Total = donate_Total + {$_GET['value']} WHERE first_Name = 'first_Name' AND last_Name ='last_Name'";
然后使用mysql_query($donate_sql);
函数。
然而,正如@ hjpotter92指出的那样,你应该(除其他外)在该表中添加一个ID列并将其设置为主键。
此外,您应该记住请求中转义的值($_POST
和$_GET
),因此不会对您的查询应用SQL注入。
希望这有帮助!
干杯。
答案 1 :(得分:1)
不要直接使用mysql_query函数,而是尝试构建mysql语句,如fsodano在此构建的$donate_sql
,然后使用echo $donate_sql;
进行检查,然后在备份表上使用该语句。我更喜欢这样做,然后搞乱原创作品。
在旁注中,您的表单包含'ALL'的名字和姓氏组合(我猜!),因此$_GET['first_name']
请考虑以下陈述!
$donate_sql = "UPDATE `donate` SET donate_Total = donate_Total + {$_GET['value']} WHERE first_Name = '{$_GET['first_Name']}' AND last_Name = '{$_GET['last_Name']}'";
echo $donate_sql;
答案 2 :(得分:1)
<?php
//code at the top of the document
if(isset($_POST['donation']) && $_POST['donation'] != '')
{
$donation = mysql_real_escape_string($_POST['donation']);
$fname = mysql_real_escape_string($_POST['first_name']);
$lname = mysql_real_escape_string($_POST['last_name']);
$donate_sql = "UPDATE `donate` SET donate_Total = donate_Total + '{$donation}' WHERE first_Name = '{$fname}' AND last_Name = '{$lname'";
}
?>
<table>
<form method="POST" accept-charset="utf-8">
<tr><td><label>User:</label></td>
<td>
<select>
<?php do{?>
<option> <?php echo $rsNames['first_Name'];?> <?php echo $rsNames['last_Name'];?></option>
<?php } while ( $rsNames= mysql_fetch_assoc($names_query))?>
</select>
</td>
</tr>
<tr><td><label>Donation £</label></td><td><input name="donation" type="text" maxlength="9" value="0.00"/></td></tr>
<tr><td><input id="submit" type="submit" value="DONATE" /></td></tr>
</form>
</table>
答案 3 :(得分:0)
$value = mysql_real_escape_string($_GET['value']);
$donate_sql = "UPDATE `donate` SET donate_Total = donate_Total + {$value}
为您的查询添加了一小部分安全性,但是对@fsodano表示赞赏,这只是对其答案的补充