2012-04-25 14 views
0

mySQLでsearch.phpスクリプトを動作させる方法を理解しようとしています。私は情報を表示することができません。問題がどこにあるかわからない。Seach.phpが機能しておらず、結果が表示されない

PAGE 1:

<form action="search_result.php" method="GET"> 
    <input type="text" name="reg" /> 
    <input type="submit" value="Search" /> 
</form> 

はPAGE 2:

<?php 
$host="localhost"; 
$username="XXXXXXXXXXX"; 
$password="XXXXXXXXXXX"; 
$db_name="XXXXXXXXXXXX"; 
$tbl_name="reg_add"; 
mysql_connect("$host", "$username", "$password") or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 


$record = $_POST['record']; // if coming from e.g. a form 
$result=mysql_query(" SELECT * FROM reg_add WHERE reg='" . mysql_real_escape_string($record) . "'"); 


$row = mysql_fetch_assoc($result); 
$first_name = $row['first_name']; 
$last_name = $row['last_name']; 
$reg = $row['reg']; 
?> 

<input name="reg" value="<? echo "$record" ?>"> 

<input name="first_name" value="<? echo "$first_name" ?>"> 

<input name="last_name" value="<? echo "$last_name" ?>"> 
+0

'$ record'は、クエリで使用するときに設定されていないようです。エラーが発生したかどうかを調べるには '$ result'をチェックし、' false 'を呼び出すと 'mysql_error()'を呼び出します。 – drew010

+1

すべてのXXXXXXXXXXXXが実際の値と一致することを確認してください –

+0

私が目にする最初の問題は、間もなく廃止予定です[mysql_ * '関数](http://us.php.net/manual/ja/mysqlinfo.api .choosing.php)。 mysqli_ *またはPDOを使用してください。 – PeeHaa

答えて

0

は、メソッドのGETであり、あなたのPHPには、これを使用します。

$record = $_POST['record']; // if coming from e.g. a form 

フォームにGETメソッドがある場合、POST [レコード]をどのように取得しますか?

私はあなたがすべきかにフォームを変更推測:

method="POST" 

かにPHPのあなたの$レコードを変更:

フォーム:

このバージョンを試してみてください

$record = $_GET['record']; 

<form action="search_result.php" method="POST"> 
    <input type="text" name="reg" id="reg" /> 
    <input type="submit" name="Submit" id="Submit" value="Search" /> 
</form> 

search_result.php:

<?php 

$host  ="localhost"; 
$username ="XXXXXXXXXXX"; 
$password ="XXXXXXXXXXX"; 
$db_name ="XXXXXXXXXXXX"; 
$tbl_name ="reg_add"; 

/* Connect to MySQL database */ 
mysql_connect("$host", "$username", "$password") or die("Error connecting to database"); 
mysql_select_db("$db_name")or die("Error selecting database"); 

$error = ''; 

if (isset($_POST['Submit'])) { 


    if (!empty($_POST['reg'])) { 

     $record = $_POST['reg']; // if coming from e.g. a form 

     $query = mysql_query("SELECT * FROM reg_add WHERE reg='" . mysql_real_escape_string($record) . "'"); 
     $result = mysql_num_rows($query); 

     if ($result != 0) { 

      $row = mysql_fetch_array($query); 

      $first_name = $row['first_name']; 
      $last_name = $row['last_name']; 
      $reg = $row['reg']; 

     } else { 

      $error = 'No result have been found!'; 

     } 

    } else { 

     $error = 'You have not entered the search field, <a href="javascript:history.back(1)">Go back</a>.'; 

    } 
} 

if (!empty($error)) { echo $error; } 
?> 


<input name="reg" value="<? echo $record; ?>"> 

<input name="first_name" value="<? echo $first_name; ?>"> 

<input name="last_name" value="<? echo $last_name; ?>"> 
+0

ありがとう...私は試していますが、動作しません.. – Erik

0
mysql_connect("$host", "$username", "$password") 

なく、あなたの問題はなく、変数の前後に引用符は必要ありません:

mysql_connect($host, $username, $password); 
mysql_select_db($db_name); 

あなたが設定する必要があります変数$record somewh ERE:

$first_name=mysql_result($result,"first_name"); 
$last_name=mysql_result($result,"last_name"); 
$reg=mysql_result($result,"reg"); 

そして、次のようになります:

$record = $_POST['record']; // if coming from e.g. a form 
$result=mysql_query(" SELECT * FROM reg_add WHERE reg='" . mysql_real_escape_string($record) . "'"); 

これは単に間違っている。また

$row = mysql_fetch_assoc($result); 
$first_name = $row['first_name']; 
$last_name = $row['last_name']; 
$reg = $row['reg']; 

:あなたはもうmysql_* functionsを使用しないでください。 mysqli_*またはPDOを使用してください。

また、何かがうまくいかない場合は、mysql_error()をチェックしてクエリを実行中にエラーが発生したことを確認できます。

+0

あなたのお手伝いをお待ちしています。上記のスクリプトを更新しましたが、結果はまだ見つかりません。 – Erik

+0

@Paul Btw、いずれにしてもPDOがより良いAPI選択であることに同意します。しかし、すべてのエスケープ問題の解決策であることを宣言することは私の目には間違っています。特にPDOはデフォルトで、準備された文をエミュレートします。これは、最近までキャラクタセットが認識されていなかったエスケープ関数を使用していることを考慮しています(5.3.6でcharsetサポートが追加されていますので、DSNで明示的に指定する必要があります)。一方、real_escape_stringは*正しく設定した場合、*文字セットに対応しています。 – NikiC

+0

訂正して質問を更新しました。私はまだ結果を得ることができません。私はとても近いと感じる。 – Erik

0

mysql_result()の構文が間違っています。 manualによれば、それを使用するための正しい方法は

ようになる

列mysql_result(リソース$結果、int型$行[、混合$フィールド= 0])

なければなりませんフォーム

mysql_result($result, 1, "first_name"); 
関連する問題