PHP MySql-通过复选框选择自定义列显示


PHP MySql - Custom Column Display via Checkbox Select

我是php/mysql的相关新手之一,其背景是支持而非开发。然而,由于有了这样的优秀资源网站,我已经成功地完成了许多我最想实现的事情,因此,提前感谢所有过去、现在和未来的人。然而,我要么无法构建一个合适的谷歌查询来找到我需要的信息,要么我在某个地方错过了一个简单的技巧。

简而言之,我有一个mysqldb,其中有一个大约有15列(字段)的表。我有一个php前端,可以使用它查询数据库,在所有字段中返回所有行或仅返回包含常规搜索项的行。一切都很好,表现很好,工作也很好。但是,我想让用户选择他们希望在结果中返回的列(字段)。因此,我有一个搜索页面,其中显示了列名,并相应地分配了复选框和值(列名)。代码如下:

<form action="result.php" method="post">     Search for* :  <input type="text" name="searchterm" />
<input type="submit" name="submit" value="Search Database" /> <br /><br /><br />
<input type=button value="Select ALL" onclick="select_all( check, true ); return false;">
<input type=button value="Clear ALL" onclick="select_all( check, false ); return false;">
<table>
<tr><th>FirstName<br/><input type="checkbox" id="check" name="field[]" value="FirstName,"></th> 
<th>LastName<br/><center><input type="checkbox" id="check" name="field[]" value="LastName,"></center></th> 
<th>Age<br/><center><input type="checkbox" id="check" name="field[]" value="Age,">        </center></th> 
<th>Instrument<br/><center><input type="checkbox" id="check" name="field[]" value="Instrument,"></center></th>
<th>Grade<br/><center><input type="checkbox" id="check" name="field[]" value="Grade,"></center></th> 
<th>LandlineNo<br/><center><input type="checkbox" id="check" name="field[]" value="LandlineNo,"></center></th>
<th>MobileNo<br/><center><input type="checkbox" id="check" name="field[]" value="MobielNo,"></center></th> 
<th>Email<br/><center><input type="checkbox" id="check" name="field[]" value="Email,"></center></th> 
<th>AddressLine1<br/><center><input type="checkbox" id="check" name="field[]" value="AddressLine1,"></center></th> 
<th>AddressLine2<br/><center><input type="checkbox" id="check" name="field[]" value="AddressLine2,"></center></th> 
<th>Town<br/><center><input type="checkbox" id="check" name="field[]" value="Town,"></center></th> 
<th>County<br/><center><input type="checkbox" id="check" name="field[]" value="County,"></center></th> 
<th>Postcode<br/><center><input type="checkbox" id="check" name="field[]" value="Postcode,"></center></th> 
<th>Price<br/><center><input type="checkbox" id="check" name="field[]" value="Price,"></center></th> 
<th>Paid<br/><center><input type="checkbox" id="check" name="field[]" value="Paid,"></center></th> 
<th>LastUpdated<br/><center><input type="checkbox" id="check" name="field[]" value="LastUpdated,"></center></th>
</tr>
</table>
</form>

所有的复选框都被指定为字段[]作为名称,因此输出到result.php中的数组。经过一点进一步的阅读,我可以让数组以逗号分隔显示(回显)所选列,根据:

for ($i=0; $i<count($_POST['field']); $i++){ 
$columns = addslashes($_POST['field'][$i]); 
echo $columns;
}
// output example
LastName,Age,Instrument,Email

然而,我现在不知道如何在结果视图中只检索选定的列。有谁能帮我把啤酒倒在正确的方向上吗。我得到了这个,但这不起作用,因为所有列都会返回。

$result = mysql_query("select * from TABLE where FirstName like '%$searchterm%' or LastName like '%$searchterm%' or Age like '%$searchterm%' or Instrument like '%$searchterm%' or Grade like '%$searchterm%' or LandlineNo like '%$searchterm%' or MobileNo like '%$searchterm%' or Email like '%$searchterm%' or AddressLine1 like '%$searchterm%' or AddressLine2 like '%$searchterm%' or Town like '%$searchterm%' or County like '%$searchterm%' or Postcode like '%$searchterm%' or Price like '%$searchterm%' or Paid like '%$searchterm%'");
echo '<table>';
while ($row = mysql_fetch_assoc($result)) {
if (empty($columns)) {
    $columns = array_keys($row);
    echo '<tr><th>'.implode('</th><th>', $columns).'</th></tr>';
}
$resultset[] = $row;
echo '<tr><td>'.implode('</td><td>', $row).'</td></tr>';
}
echo '</table>';

最后一步还将根据结果集检索并填充表中的列标题。提前感谢您的指导、建议和改进。

Jim

$result = mysql_query("select * from TABLE where FirstName like '%$searchterm%' or LastName like '%$searchterm%' or Age like '%$searchterm%' or Instrument like '%$searchterm%' or Grade like '%$searchterm%' or LandlineNo like '%$searchterm%' or MobileNo like '%$searchterm%' or Email like '%$searchterm%' or AddressLine1 like '%$searchterm%' or AddressLine2 like '%$searchterm%' or Town like '%$searchterm%' or County like '%$searchterm%' or Postcode like '%$searchterm%' or Price like '%$searchterm%' or Paid like '%$searchterm%'");
$start = FALSE;
echo '<table><thead><tr>';
while ($row = mysql_fetch_assoc($result)) {
foreach ($row as $column => $value)
{
// Now we print the columns if they aren't printed
if ($start === FALSE && !empty($value))
{
echo "<th>$column</th>";
}
}
// And if the columns were printed now we turn start to TRUE.
if ($start === FALSE)
{
echo "</tr></thead><tbody>";
$start === TRUE;
}
echo "<tr>";
// Now for each key and value in the array we verify if the user wanted to print the column and we print it.
foreach ($row as $column => $value)
{
if (!empty($value))
{
echo "<td>$value</td>";
}
echo '</tr>';
}
}
echo '</tbody></table>';

这应该行得通。你可以在评论中看到它是如何工作的。