使用PHP表单中的2个字段来从MySQL数据库中检索信息

时间:2012-06-14 02:03:12

标签: php mysql

我有一个包含3列的MySQL数据库:

id  |  articletitle  | articleorganization

一个简单的PHP表单,包含2个字段和一个提交按钮:search.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="title" type="text" id="articletitle" size="50" /></td>
    </tr>
    <tr>
      <td align="right">Author or Organization:</td>
      <td align="left"><input name="organization" 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>

表单连接到searchdb.php:

<?php

include('settings.php');

$title = mysql_real_escape_string($_POST['title']);
$organization = mysql_real_escape_string($_POST['organization']);

$sql = "SELECT * FROM articles WHERE 1 "
     . (isset($title) ? "AND articletitle LIKE '$title%' " : "")
     . (isset($organization) ? "AND articleorganization LIKE '$organization%'" : "");

while ($row = mysql_query($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/>';
    }

?>

在评论者的帮助下进行了一些修改后,问题发生了变化。

现在,在提交搜索后,结果页面开始一遍又一遍地滚动通过searchdb.php创建的表格,但表格中没有任何结果。

3 个答案:

答案 0 :(得分:1)

基本上,当你有多个具有相同名称的项目引用某种数组时,你得到的是一个实际的数组。

也就是说,如果输入框中填充“a”和“b”,则变量$_POST['term']将等于array("a", "b")

关于缩进,它是您的代码风格的一部分,只要您在整个代码库中保持一致,就可以随意使用它。

修改:我同意其他人的意见,您应该对用户输入以及如何将这些数据添加到查询中更加谨慎

答案 1 :(得分:1)

如果您回显查询,它将打印如下内容:

select * from articles where articletitle like '%%'

这就是为什么你的代码从表中返回所有行的原因。要使其按您希望的方式运行,请更改<input>的名称以与列匹配。

<input type="text" name="title" />
<input type="text" name="organization" />

鉴于这些标记,您将$_POST包含如下数组:

Array
(
  [title] => 'some value',
  [organization] => 'another value',
)

你必须在查询中执行一些逻辑。如果仅提供title

SELECT * FROM articles WHERE articletitle LIKE '%$title%'

如果仅提供organization

SELECT * FROM articles WHERE articleorganization LIKE '%$organization%'

如果两者都提供,

SELECT * FROM articles
WHERE articletitle LIKE '%$title%' AND 
      articleorganization LIKE '%$organization%'

这是上面提到SQL的PHP​​:

// Don't forget to properly escape your input
$title = mysql_real_escape_string($_POST['title']);
$organization = mysql_real_escape_string($_POST['organization']);

// Build the SQL
// Echo this string to make sure the SQL is correct
$sql = "SELECT * FROM articles WHERE 1 "
     . (strlen($title) ? "AND articletitle LIKE '%$title%' " : "")
     . (strlen($organization) ? "AND articleorganization LIKE '%$organization%'" : "");

$qry = mysql_query($sql);

答案 2 :(得分:0)

$ _ POST [term]成为一个数组,其键如0,1。丢失SQL查询的字段引用。

在输入字段中使用这些名称:

<input name="articletitle" type="text" id="articletitle" size="50" />
<input name="articleorganization" type="text" id="articleorganization" size="50" />

您可以像这样构建查询:

$sql = mysql_query("select * from articles WHERE articletitle LIKE '%".mysql_real_escape_string($_POST['articletitle'])."%' OR articleorganization LIKE '%".mysql_real_escape_string($_POST['articleorganization'])."%'");

注意:永远不要在查询中使用$ _POST(用户输入)变量而不首先转义以防止mysql注入。

PS我个人对缩进的品味是:始终缩进每个匹配的HTML元素块。所以,是的,我会进一步缩进表格。