我刚接触php,我现在正在学习如何从sql中检索数据。 我遇到了一些问题,我无法在网上找到任何答案。
我想创建一个包含许多复选框的html表单(与我的数据库供应一样多),并且每个复选框我想分配一个包含db中所有行数据的关联数组。 例如,如果我在我的数据库列中有名字'名字','姓氏'和'年龄',则复选框值将为['名字'=>'xx','姓氏'=>'yy ',age'14'];
到目前为止,我只设法将其作为字符串传递:
value="<?php echo implode(array('key'=>$row['first name'], 'name'=>$row['last name'],'type'=>$row['age']));?>"/>
但是当我用post方法传递它时,我得到常规的String,我不能再格式化为数组..这是我的表单代码:
function deleteRow(){
global $conn;
if(!$conn){
die("connection failed: ".mysqli_connect_error());
}else{
$query = "SELECT * FROM salary.collage ";
$result=mysqli_query($conn, $query);
echo "<table border='1'>";
echo "<form method='post' id='form_delete_rows' action='test.php'";
while($row = mysqli_fetch_assoc($result)) {
?>
<tr>
<td><input type="checkbox" name="key[]" value="<?php echo implode(array('key'=>$row['key'], 'name'=>$row['name'],'type'=>$row['type']));?>"/></td>
<td><?php echo $row['key']?></td>
<td><?php echo $row['name']?></td>
<td><?php echo $row['type']?></td>
</tr>
<?php
}
echo"<input type='submit' name='deleteRows' value='delete selected rows'/>";
echo "</form>";
echo "</table>";
这是处理检索数据的函数:
if(!empty($_POST["deleteRows"])){
if(isset($_POST["key"])){
var_dump($_POST["key"]);
echo "are you sure you want to delete these records?<br/>";
echo "<pre><table border='1'>";
foreach ($_POST['key'] as $select=>$value) {
echo "<tr>";
echo "<td>{$select}</td>";
echo "<td>{$value}</td>";
echo "</tr>";
}
}echo "</table></pre>";
}
答案 0 :(得分:0)
如果数据库tabe有一个唯一的键,例如索引使用它:
name="delete[]" value="<?php echo $row['indexname'];?>"
选中复选框并将$ row字段作为$ k =&gt; $ v int相同的td:
<input type="hidden" name="key[<?=$row['indexname'];?>][<?php echo $k;?>]" value="<?php echo $v;?>"/>
但是带有空格的索引不会起作用,在删除时你可以找到所选的索引,例如ids wg keys,无论
如果你想看到它确实为&lt;中的每个$行创建了一个小表。 TD&GT;水平或垂直
tr th $k /th td $v/td /tr
答案 1 :(得分:0)
您没有指定&#34;胶水&#34;您正在呼叫implode()
字符,所以
$foo = array('a','b',c');
echo implode($foo);
会给你
abc
只需指定一个胶水char:
echo implode($foo, '|');
-> a|b|c
但总的来说,不要这样做。您只是假设数组中的文本不包含分隔符。如果只是通过表单传递此文本,则应使用更好的封装方法,例如: json_encode()
,它不会遭受注射攻击&#34;问题。