0

データベースから「LIKE」キーワード(クエリ)のすべてを選択して表示する単純なphp、sql検索エンジンを作成しようとしています。ただし、機能しません。「問題」というテキストのみが表示され(32行目を参照)、何時間ものトラブルシューティングを行った後でも、これを理解できません。

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Search Engine Test</title>
</head>
<body>
<script language="php">
// Create a database connection
$connection = mysql_connect("*****","*****","*****");   
if (!connection) {
    die ("Please reload page. Database connection failed: " . mysql_error());
}

// Select a databse to use
$db_select = mysql_select_db("*****",$connection);
if (!$db_select) {
    die("Please reload page. Database selection failed: " . mysql_error());
}

// Search Engine
// Only execute when button is pressed
if (isset($_POST['search'])) {
// Filter
//$keyword = trim ($keyword);
echo $keyword;
// Select statement
$search = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'");
// Display
$result = @mysql_query($search);
if (!$result){
echo "problem";
exit();
}


while($result = mysql_fetch_array( $search )) 
 { 
 echo $result['cause_name']; 
 echo " ";
 echo "<br>"; 
 echo "<br>"; 
 }
 $anymatches=mysql_num_rows($search); 
 if ($anymatches == 0) 
 { 
 echo "Nothing was found that matched your query.<br><br>"; 
 }
}
</script>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="keyword">
<input type="submit" name="search" value="Search">

</body>
</html>
4

2 に答える 2

1

コードを展開すると、次のことがわかります。

$result = @mysql_query($search);

になる:

$result = @mysql_query(mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'"));

これはあまり意味がありません。

最初の行を次のように変更します。

$search = "SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'"

$searchまたは、値をまったく割り当てる代わりに、現在$resultの値の割り当てにスキップし$searchます。

編集:あなたが説明するのを助けるために:

これを変える:

$search = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'");
// Display
$result = @mysql_query($search);
if (!$result){
    echo "problem";
    exit();
}

これに:

$result = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'");
// Display
if (!$result){
    echo "problem";
    exit();
}
于 2013-07-26T22:55:37.837 に答える
1

試して変更してください:

if (isset($_POST['search'])) { //$_POST['search'] just tells that there are a submit-button when submitting (and the name of it)
// Filter
//$keyword = trim ($keyword);
echo $keyword; //You're echoing out value of $keyword which hasn't been set/assigned
// Select statement

//You're always searching for the word keyword with leading and/or trailing characters
//You're not searching for a dynamically assigned value which I think is what you want
$search = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'");

//You're executing an already defined query (assigned in $search)
$result = @mysql_query($search); //You're suppressing errors, it's bad practice.
if (!$result){
echo "problem";
exit();
}

に:

if (isset($_POST['keyword'])) {
// Filter
$keyword = trim ($_POST['keyword']);

// Select statement
$search = "SELECT * FROM tbl_name WHERE cause_name LIKE '%$keyword%'";
// Display
$result = mysql_query($search) or die('query did not work');

重要! <script language="php">無効です。<?phpphp-code の先頭に入力し、php-code を終了する必要があり?>ます。

更新: このコードも変更する必要があります。

while($result = mysql_fetch_array( $search )) 
    { 
    echo $result['cause_name']; 
    echo " ";
    echo "<br>"; 
    echo "<br>"; 
 }
 $anymatches=mysql_num_rows($search); 
 if ($anymatches == 0) 
 { 
     echo "Nothing was found that matched your query.<br><br>"; 
 }
}

に:

while($result_arr = mysql_fetch_array( $result )) 
{ 
echo $result_arr['cause_name']; 
echo " ";
echo "<br>"; 
echo "<br>"; 
}
$anymatches=mysql_num_rows($result); 
if ($anymatches == 0) 
{ 
   echo "Nothing was found that matched your query.<br><br>"; 
}
}

新しいコードを作成するときは、 mysql_ functions*を使用しないでください。これらは推奨されていないためです。代わりに PDO または mysqli を調べてください。

于 2013-07-27T00:08:43.947 に答える