我有一个只有“value”文本字段的HTML表单。但是用户可以为1个提交按钮生成任意数量的“值”测试字段。这是我的表
CREATE TABLE IF NOT EXISTS `insert` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`insert_operation` int(11) NOT NULL,
`value` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
现在,如果用户生成4个“值”文本字段并输入4个值数据(如a,b,c,d),则应执行4个插入查询,但 insert_operation 跟踪每个提交按钮单击。
它看起来像下面
Id Insert_operation value 1 1 a 2 1 b 3 1 c 4 1 d 5 2 x 6 2 a
我的html表单有值文本字段,其名称为值,提交名称保存的按钮。
我不确定我的PHP代码。 我知道Insert查询必须在PHP循环中。但我该怎么办?
答案 0 :(得分:1)
这是错误的:
mysql_query(INSERT INTO 'insert' VALUES('','$i','$_POST['value']'));
mysql_query期望第一个参数是SQL字符串,因此正确的参数是:
mysql_connect("
INSERT INTO
`insert` (`insert_operation`, `value`)
VALUES
($i, '{$_POST['value']}')
");
添加列也很好,因为您的表可能会在这段时间后发生变化,如果发生这种情况,您的SQL将无法正常工作。
其他错误是您使用的是分配而不是比较
while($_POST['value']=1)
分配值。
您必须使用==
来检查值是否等于1 while($_POST['value'] == 1)
PS使用MySQL函数作为表名并不是一个好主意,并且使用mysql_ *函数不是一个好主意,因为它们从php 5.5开始被弃用并将被删除
答案 1 :(得分:1)
假设您的value
字段都被命名为相同的ie。 <input name="value[]" ... />
尝试这样的事情 -
for($i=0;$i<count($_POST['value']);$i++){
$value = mysql_real_escape_string($_POST['value'][$i]);
if($i == 0){ // if the first increase MAX(insert_operation) by 1
mysql_query("INSERT INTO `insert` SELECT null, IFNULL((SELECT MAX(insert_operation)+1 from `insert`), 1), '{$value}'");
}
else { // if not the first use MAX(insert_operation)
mysql_query("INSERT INTO `insert` SELECT null, IFNULL((SELECT MAX(insert_operation) from `insert`), 1), '{$value}'");
}
}
第一个将获得表中已有的MAX(insert_operation)
,如果为null,则将其设置为1,否则它将增加1.其余的只会将insert_operation
设置为{ {1}}。
请参阅此SqlFiddle示例 - http://sqlfiddle.com/#!2/afdc0/1
MAX(insert_operation)
是一个mysql function/reserved word。重命名你的表会更好,但至少它需要在反引号中 - “。您应该转义任何用户数据(insert
),在这种情况下我展示了mysql_real_escape_string()
。最后,$_POST['value']
函数从php5.5开始折旧。您应该更新为mysql_*
或mysqli_
答案 2 :(得分:1)
<form>
<?php
for ($i=1;$i<=$no_of_text_field;$i++) // no of text fields user can add
{
?>
<input type="text" name="value<?php echo $i ?>">
<?php
}
?>
<input type="text" name="no_of_text_field<?php echo $i ?>" value="<?php echo $no_of_text_field ?>">
<input type="submit" name="submit" value="">
</form>
<?php
if(isset($_REQUEST['submit']))
{
for ($k=1;$k<=$_REQUEST['no_of_text_field'];$k++) //getting values of all text fields
{
mysql_query("INSERT INTO `insert` VALUES('','$i','$_REQUEST[value].$k')");
}
}
?>
检查上面的代码,这应该会给你一些想法