我正在编写一个显示表格的功能,可以选择编辑和删除数据。我需要这些表几次,所以这就是我创建函数的原因。
这是函数的调用方式:
listSpecific(customer, array("CustomerID", "Forename", "Surname", "Email", "Secret Q", "Secret A", "Street", "City", "Postcode", "Type"), array("customerid", "forename", "surname", "email", "secretQ", "secretA", "address_street", "address_city", "address_postcode", "member_type"));
这是完整的功能:
function listSpecific($DBname, $titles=array(), $values=array()){
$numValues = count($values);
$i=0;
$sql = "SELECT ";
//Construct SQL Statement
foreach ($values as $val)
{
//Last Element of the array
if(++$i === $numValues){
$sql .= $val;
$sql .= " ";
}
else{
//The rest of the array elements
$sql .= $val;
$sql .= ", ";
}
}
$sql .= "FROM $DBname;";
//End of Constructing SQL Statement
// Execute Query
$result = mysql_query($sql) or die("An error has ocured: " . mysql_error() . ":" . mysql_errno());
//Construct table
$list = "<table>";
$list .= "<tr>";
//Cycle through array elements to get table headers
foreach ($titles as $title) {
$list .= "<th>$title</th>";
}
$list .= "<th>";
$list .= "Task";
$list .= "</tr><tr>";
$numValues = count($values);
$i=0;
//Construct the rest of the table [NOT WORKING]
while ($table = mysql_fetch_array($result)) {
$item = array();
foreach($values as $val){
//Last Element of the array
if(++$i === $numValues){
$list .= "<td>";
$item = $table[$val];
$list .= $item;
$list .= "</td>";
//Get the Item ID
$firstElement = reset($table);
$list .= "<td><a href=\"users.php?task=delete&user=$firstElement\">Delete</a></td></tr>";
}
else{
//The rest of the array elements
$list .= "<td>";
$item = $table[$val];
$list .= $item;
$list .= "</td>";
}
}
}
echo $list;
}
问题是创建删除超链接,因为我需要将传递给URL的用户ID。
问题出在这一行:
//Get the Item ID
$firstElement = reset($table);
$list .= "<td><a href=\"users.php?task=delete&user=$firstElement\">Delete</a></td></tr>";
我明白为什么会出错,它会回到数组的第一项,即用户ID。但它必须是排的唯一。
例如,在第一行,用户ID为57。 但是在下一行58并且更改了超链接。
对此的一个便宜的解决方案是每次在while循环中返回11个值,然后从它停止的位置继续。怎么可以实现呢?
谢谢。
答案 0 :(得分:1)
如果您希望主键列始终是$values
数组的第一个元素,那么您可以将其称为$values[0]
。也就是说,
while ($table = mysql_fetch_array($result)) {
foreach($values as $val) {
$list .= '<td>'.$table[$val].'</td>';
}
$list .= '<td><a href="users.php?task=delete&user='.$table[values[0]].'">Delete</a></td></tr>';
}
我还整理了我觉得合适的循环。
答案 1 :(得分:0)
您应该使用array_shift
代替并将$ firstElement赋值放在第一个循环中。
$firstElement = array_shift($table);
array_shift
返回第一个元素而不重置数组中的索引。