0

PHP と MYSQL の学習を始めたばかりで、Web ページの検索エンジンを作成するためのチュートリアルに従っていますが、フォームを送信しても結果が返されないという問題が発生しました。問題がどこにあるのか、それを試してトラブルシューティングする場所があるので、ここに問題を投稿する価値があると考えました。うまくいけば、誰かが私を助けてくれることを願っています。

PHP

<?php   

    mysql_connect("localhost","root","123")or die("Could not connect to Db");
    mysql_select_db("members") or die("Could not find db");

if(isset($_POST['submit'])){
    $searchq = $_POST['submit'];
    $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
    $query = mysql_query("Select * FROM memberlist WHERE Fname LIKE '%$searchq%' OR Lname LIKE '%$searchq%'  ") or die(mysql_error());
    $count = mysql_num_rows($query);


 if($count == 0){
    $output = "No results were found, sorry.";
}

else{
    while($row = mysql_fetch_array($query)){
        $firstname = $row['Fname'];
        $lastname = $row['Lname'];
        $output .= "<div>".$firstname." ".$firstname."</div>";
    }
}
}

?>

HTML

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Search</title>
</head>
<body>

<form action="index.php" method="post">
<input type="text" name="searchfname" placeholder="Enter first name">
<input type="text" name="searchlname" placeholder="Enter last name">
<input type="submit" name="submit" value="Submit">
</form>

<?php print($output);?>

</body>
</html>
4

5 に答える 5

6

フォームが送信されたかどうかを確認するために使用できますが$_POST['submit']、すべてのフォーム値を保持しているわけではありません。それぞれの名前で個別のフォーム値にアクセスできます。

$_POST['searchfname']そのため、最初のテキスト ボックスと 2 番目のテキスト ボックスの値に使用します$_POST['searchlname']

コードは次のようになります。

$searchqf = $_POST['searchfname'];
$searchql = $_POST['searchlname'];
$searchqfreplace = preg_replace("#[^0-9a-z]#i","",$searchqf);
$searchqlreplace = preg_replace("#[^0-9a-z]#i","",$searchql);
$query = mysql_query("Select * FROM memberlist WHERE Fname LIKE '%$searchqf%' OR Lname LIKE '%$searchql%'  ") or die(mysql_error());
$count = mysql_num_rows($query);

クエリを作成するこの方法は非常に安全ではなく、SQL インジェクションに対して脆弱であることに注意してください。

また、トラブルシューティングの方法も求めています。おそらく と を調べたいと思うでしょechoprint_r

于 2013-10-07T14:10:12.277 に答える
0

$searchq 変数を送信ボタンに割り当てました。この行を変更

$searchq = $_POST['submit'];

$searchq = $_POST['searchfname'];

また

$searchq = $_POST['searchlname'];

または両方:

$searchq = $_POST['searchfname'].$_POST['searchlname'];
于 2013-10-07T14:11:31.207 に答える
0

$searchq = $_POST['submit']; は使用できません。submit という名前の値が投稿されていないため

次のいずれかを使用する必要があります....

$searchq = $_POST['searchfname'];

また

$searchq = $_POST['searchlname'];

于 2013-10-07T14:13:08.337 に答える
0

コードでは、フォームの値ではなく「送信」値を検索しています。

次のように置き換えます$searchq = $_POST['submit'];

$searchq = $_POST['searchfname'];
$searchq2 = $_POST['searchlname'];

およびクエリ:

Select * FROM memberlist WHERE Fname LIKE '%$searchq%' OR Lname LIKE '%$searchq2%'   
于 2013-10-07T14:14:00.630 に答える
0

まず、

で検索するsearchfnameか、searchlnameまたは両方で検索します。

次に、次のように変更します$count = mysql_num_rows($query);

if($count == 0){
    $output = "No results were found, sorry.";
}
else{
    $output = '';
    while($row = mysql_fetch_array($query)){
        $firstname = $row['Fname'];
        $lastname = $row['Lname'];
        $output .= "<div>".$firstname." ".$firstname."</div>";
    }

第三に、 ではなく で使用print $outputします。Second page(where database is fetched)First page(Page with FORM)

最初のページに結果を表示したい場合は、jQuery/Ajax関数を使用してください

于 2013-10-07T14:14:18.197 に答える