gpt4 book ai didi

PHP 表单转储整个 MySQL 数据库,除非数据库中不存在任何输入变量

转载 作者:行者123 更新时间:2023-11-29 01:23:20 27 4
gpt4 key购买 nike

我有一个使用 PHP 搜索 MySQL 数据库的表单。目前,当用户在两个字段之一中输入搜索时,会显示数据库的全部内容。此外,如果用户将两个字段都留空,将再次显示数据库的全部内容。

但是,如果用户在两个字段中输入随机信息,则结果页面将为空白。

此表单的假定用法是用户可以根据文章标题、文章作者或组织或文章标题其作者或组织搜索文章,方法是填写一个或两个字段。

我想弄清楚的是:

为什么结果页面一直显示所有数据库内容。

如何确保数据库确实被查询而不是仅仅被编码错误转储。

代码如下:

搜索.php:

<div class="content">
<form id="form1" name="form1" method="post" action="searchdb.php">
<table width="100%" border="0" cellpadding="6">
<tr>
<td width="29%" align="right">Article Title:</td>
<td width="71%" align="left"><input name="articletitle" type="text" id="articletitle" size="50" /></td>
</tr>
<tr>
<td align="right">Author or Organization:</td>
<td align="left"><input name="articleorganization" type="text" id="articleorganization" size="50" /></td>
</tr>
</table>


<table width="100%" border="0" cellpadding="6">
<tr>
<td><input type="submit" name="submit" value="Submit" /></td>
</tr>
</table>
</form>
</div>

搜索数据库

<?php

include('settings.php');
$query = "select * from articles";
$where = array();
if (!empty($_POST['articletitle'])) {
$where[] = "articletitle LIKE '%".mysql_real_escape_string($_POST['articletitle'])."%'";
}
if (!empty($_POST['articleorganization'])) {
$where[] = "articleorganization LIKE '%".mysql_real_escape_string($_POST['articleorganization'])."%'";
}
if (!empty($where)) {
$query .= " WHERE " . implode(" OR ", $where);
$sql = mysql_query($query);
} else {
// No results
}
while ($row = mysql_fetch_array($sql)){
echo '<br/> Article Title: '.$row['articletitle'];
echo '<br/> Article Organization: '.$row['articleorganization'];
echo '<td><a href="edit.php?id=' . $row['id'] . '">Edit</a></td>';
echo '<td><a href="delete.php?id=' . $row['id'] . '">Delete</a></td>';
echo '<td><a href="entry.php?id=' . $row['id'] . '">View Full Entry</a></td>';
echo '<br/><br/>';
}

?>

最佳答案

当两者都为空时,您的查询说明:

WHERE 字段 LIKE '%%'

匹配所有内容。

当其中任何一个为空时也会发生同样的情况,因为您正在使用 OR 来连接 where 子句。

您可以通过检查输入是否为空来防止这种情况发生:

<?php
if (!((empty($_POST['field1']) || empty($_POST['field2']))) {
//run your query
}

关于PHP 表单转储整个 MySQL 数据库,除非数据库中不存在任何输入变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11027294/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com