抱歉复杂的标题。我正在学习php并且卡住了。我有一个数据库表table_name
id(primary key) name ip
1 a 192.168.0.1,192.168.0.5,171.87.65 //separated by comma's
2 b 192.168.0.1,175.172.2.6,164.77.42
现在我想添加一个值ip [0]和ip [1]的数组,它们来自两个不同的文本区域到每个名称的ip的末尾,只是更新每行的ip列。所以将只添加前一个值的新值。
name a<textarea rows="4" cols="40" name="ip[]"></textarea>
name b<textarea rows="4" cols="40" name="ip[]"></textarea>
<input type="submit" />
这就是它的插入方式
if(isset($_POST['submit'])) {
$ip_details = $_POST['ip'];
$values = array(
array('id' => '"1"', 'name' => '"a"', ip => '"'.$ip_details[0].'"'),
array('id' => '"2"','name' => '"b"', ip => '"'.$ip_details[1].'"'),
);
$columns = implode(', ', array_keys($values[0]));
foreach($values as $value) {
$value = implode(', ', $value);
$statement = "INSERT INTO `center_listt` (id,name,ip) VALUES ($value)";
$res=mysql_query($statement);
echo "success";
}
}
我需要使用来自带有先前值的文本区域的新值更新name
a和b的每一行。
我正在考虑在while循环中从表中获取ip之后的array_push,但实际上并没有这样做。warning: array_push expects parameter 1 to be array integer given
因为在while循环中获取的$ row ['ip']是array_push所期望的有效数组。
并且它每次只会在不同的新行中添加新值,我不想要。有人请帮忙做什么。
答案 0 :(得分:0)
你可以这样做:
$values = array(...); // WARNING: escape `$ip_details` here!!
$to_insert = array();
foreach($values as $row) {
$to_insert[] = "(".implode(", ",$row).")";
}
$statement = "insert into `center_listt` (`id`, `name`, `ip`)
values ".implode(", ",$to_insert)."
ON DUPLICATE KEY UPDATE `ip`=concat(`ip`,',',values(`ip`))
";
mysql_query($statement);
这将执行多插入(远比单个查询更有效),当您尝试两次插入相同的ID时,它将连接值。
应该注意的是,这是糟糕的数据库设计,但是:p
答案 1 :(得分:0)
<?php
if(isset($_POST['submit'])) {
//print_r($ips); die;
$i = 0;
foreach($_POST['ip_details'] as $ipaddr) {
$ips[$i] = $ips[$i].$ipaddr;
$i++;
}
$r = 1;
foreach($ips as $ip){
//echo "UPDATE center_listt SET ipdetails = '$ip' WHERE `id_center` = '$r'"; die;
if(mysql_query("UPDATE center_listt SET ipdetails = '$ip' WHERE `id_center` = '$r'")) echo "IP Address Updated <br />";
else echo 'error occurred';
$r++;
}
}
$sql="select * from center_listt";
$res=mysql_query($sql);
if(!$res) {
die('could not connect'.mysql_error());
}
while($row=mysql_fetch_assoc($res))
{
echo $row['ipdetails']; }
?>
从array中插入表单值是一种不好的做法。你可以从db bcoz中获取它,如果以后你想要添加新的表单值,你需要再次使用数组值重写,而从db中获取只需要你插入新的db。中的值。
我的查询会在您的特定列中添加ip,只在一行中使用新值更新ip。