簡體   English   中英

使用PHP表單中的2個字段來從MySQL數據庫中檢索信息

[英]Issue using 2 fields in PHP form to retrieve information from a MySQL Database

我有一個包含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創建的表,盡管表中沒有任何結果。

基本上,當你有幾個具有相同名稱的項目引用某種類型的數組時,你得到的是一個實際的數組。

也就是說,如果輸入框中填充了“a”和“b”,則變量$_POST['term']將等於array("a", "b")

關於縮進,它是您的代碼風格的一部分,只要您在整個代碼庫中保持一致,就可以以您感覺舒適的方式執行。

編輯 :我同意其他人的意見,你應該更加小心用戶輸入以及如何將這些數據添加到查詢中

如果您回顯查詢,它將打印如下內容:

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);

$ _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元素塊。 所以是的,我會進一步縮進表格一個標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM