2012-04-25 3 views
0

Я пытаюсь понять, как заставить мой скрипт search.php работать с mySQL. Я не могу получить информацию. Не знаю, где проблема.Seach.php не работает и не показывает никаких результатов

СТР 1:

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

СТР 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' и если его ложный вызов' mysql_error() ', чтобы увидеть, что произошло. – drew010

+1

Убедитесь, что все XXXXXXXXXXXX соответствуют фактическим значениям –

+0

Первой проблемой, которую я вижу, является то, что вы используете (скоро устаревшее) ['mysql_ *' функции] (http://us.php.net/manual/en/mysqlinfo.api .choosing.php). Либо используйте mysqli_ * или PDO. – PeeHaa

ответ

0

вы форма метод GET и в вашем PHP использовать это:

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

Как вы получите POST ['record'], если ваша форма имеет метод GET?

Я думаю, вы должны или изменить форму:

method="POST" 

или изменить $ запись в РНР:

$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 someh ERE:

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

Это просто неправильно:

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

и должно быть:

$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, I * do * согласен с тем, что PDO в любом случае является лучшим выбором API, но провозглашение подготовленных заявлений как решения всех проблем с экранированием является неправильным в моих глазах. Особенно учитывая, что PDO по умолчанию эмулирует подготовленные операторы, используя функцию escaping, которая до недавнего времени не была распознана символом (поддержка charset была добавлена ​​в 5.3.6, я думаю, и вы должны явно указать ее в DSN). real_escape_string, с другой стороны, * задан набор символов, если вы правильно настроили его. – NikiC

+0

Я обновил свой вопрос с исправлениями. Я до сих пор не могу получить результат. Я чувствую, что я так близко. – Erik

0

Синтаксис mysql_result() неверен. Согласно manual, она должна быть

строка mysql_result (ресурс $ результат, Int $ строка [, смешанные $ поле = 0])

ТАК правильный способ использовать это было бы, как

mysql_result($result, 1, "first_name"); 
Смежные вопросы