2015-12-03 5 views
0

Я новичок в кодировании и продолжаю получать эту ошибку, и я не уверен, в чем причина ... Я пытаюсь искать/извлекать данные из базы данных Mysql ... Идея в том, что кто-то выбирает категорию поиска (например, имя) и вводит имя, а затем код извлекает все соответствующие соответствия из таблицы базы данных Customers.call to undefined function php mysql

Я получаю следующее сообщение об ошибке:

Fatal error: Call to undefined function query() in ..../search.php on line 36

Может кто-нибудь помочь.

 <html> 
<head> 
<title>pageName</title> 
<style type="text/css"> 
table { 
background-color: #ADD8E6; 
border: 1px solid black; 
font-family: Arial; font-size: 14px; 
} 
th { 
text-align: left; 
} 
</style> 
</head> 
<body> 
<h1>MEMBERS SEARCH</h1> 
<form method="post" action="search.php"> 
<input type="hidden" name="submitted" value="true"/> 
<label> Search Category: 
<select name="category"> 
<option value="firstname">First NAME</option> 
<option value="lastname">Last NAME</option> 
</select> 
</label> 
<label> Search Criteria:<input type="text" name="criteria" /></label> 
<input type="submit" /> 
</form> 
<?php 
if (isset($_POST['submitted'])){ 
// connect to the DB 
include('connect.php'); 
$category = $_POST['category']; 
$criteria = $_POST['criteria']; 
$query = "SELECT * FROM Customers WHERE $firstname LIKE '%" . $criteria ."%'"; 
$result = $query ($con, $query) or die ('error getting data from database'); 
$num_rows = mysql_num_rows ($result); 
echo "$num_rows results found"; 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
?> 
<table> 
<tr> 
<td width="300" ><font face="Arial Black" size="2"><?php echo $row['firstname']?> <?php echo $row['lastname']?></font></td> 
</tr> 
</table> 
<table> 
<tr> 

?> 
</body> 
</html> 
+0

код не является полным, вы можете предоставить нам полный код, а также более подробные сведения об ошибке – Standej

+1

Обновите код, чтобы показать изменения, внесенные вами на основе уже полученных ответов. Вы также открыты для SQL-инъекций. Знать, что находится в 'connect.php' или что' $ con' также было бы полезно. – chris85

ответ

1

Попробуйте изменить код, чтобы выглядеть так.

<form method="post" action="search.php"> 
<input type="hidden" name="submitted" value="true"/> 
<label> Search Category: 
<select name="category"> 
<option value="firstname">First NAME</option> 
<option value="lastname">Last NAME</option> 
</select> 
</label> 
<label> Search Criteria:<input type="text" name="criteria" /></label> 
<input type="submit" /> 
</form> 

<?php 
if (isset($_POST['submitted'])){ 
// connect to the DB 
include('connect.php'); 
$category = mysqli_real_escape_string($con, $_POST['category']); 
$criteria = mysqli_real_escape_string($con, $_POST['criteria']); 

$query = "SELECT * FROM Customers WHERE firstname LIKE '%" . $criteria ."%'"; 
$result = mysqli_query($con, $query); 
$num_rows = mysqli_num_rows($result); 
echo "$num_rows results found"; 

Краткое объяснение изменений:

  • 'real_escape_string' функция добавлена ​​к Вашему пользователю представлены переменные , чтобы помочь предотвратить SQL инъекции
  • Изменено '$ Firstname' в запросе к «FirstName '
  • Вынул' или die() 'часть после запроса и использовал функции mysqli_ для обрабатывать данные.
+0

Это работало блестяще. И другие, которые предлагали изменения, помогли многим. С моим незнающим новичком я забыл изменить настройки в файле connect.php из $ con = mysql_connect (DB_HOST, DB_USER, DB_PSWD, DB_NAME); to $ con = mysqli_connect (DB_HOST, DB_USER, DB_PSWD, DB_NAME); – mush

+0

Я забыл упомянуть, что при переключении с mysql_ на mysqli_ –

1

У вас вместо запроса запрос $ query, он должен быть функцией не переменной. Это может решить вашу проблему, если есть больше, дайте мне знать.

$result = $query ($con, $query) or die ('error getting data from database'); 

должно быть:

$result = query($con, $query) or die('error getting data from database'); 
+0

Спасибо за помощь ... Изменение запроса $ query к запросу не решило проблему, к сожалению ... – mush

+0

@mush Измените его на 'mysql_query ($ query)', но я должен предупредить вас, что mysql_ устарел и больше не поддерживается. Я бы предложил использовать функции mysqli_. –

+0

@DiddleDot. Это приводит к: Неустранимая ошибка: нельзя использовать возвращаемое значение функции в контексте записи в ../search.php в строке 35 – mush

1

Также у Вас есть ошибка запроса:

$query = "SELECT * FROM Customers WHERE $firstname LIKE '%" . $criteria ."%'"; 

Должно быть:

$query = "SELECT * FROM Customers WHERE firstname LIKE '%" . $criteria ."%'"; 

Должно быть Firstname и не $ Firstname.

Также

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 

В то время как петля оленьей кожи есть закрывающие скобки Это должно быть, как:

<table> 
<?php 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
?>  
<tr> 
<td width="300" ><font face="Arial Black" size="2"><?php echo $row['firstname']?> <?php echo $row['lastname']?></font></td> 
</tr> 

<table> <---- This is html mistake also remove it 
<tr> <----- This is html mistake also remove it 
<?php 
} 
?> 
</table> 

Я переместил свой тег таблицы вокруг петли, потому что это логичный способ каждой строку из цикла генерирует строка в таблице, но в некоторых примерах вы можете также комбинировать целые таблицы, так как вы получите много таблиц в своем html-коде.

0

Линия

$result = $query ($con, $query) or die ('error getting data from database'); 

не имеет смысла вообще. $ query - это переменная, содержащая инструкции SQL, а не функцию. И переменная $ con не определена, по крайней мере, не в коде, который вы указали. Кроме того, вы должны использовать функцию mysqli_query() - http://php.net/manual/en/mysqli.query.php

Так линия должна быть:

$result = mysqli_query($query) or die ('error getting data from database'); 

Если вы используете процедурный стиль и $ CON является идентификатор соединения, возвращаемый mysqli_connect() или mysqli_init(), использование:

$result = mysqli_query($con,$query) or die ('error getting data from database'); 
+0

спасибо за ваш комментарий. Я включил файл connect.php, который имеет $ con = mysql_connect (DB_HOST, DB_USER, DB_PSWD, DB_NAME); – mush

+0

Да, это то, что метамило и я уже уже догадались. : -D Затем используйте вторую строку. –

+0

Я получаю эту ошибку после ... Это потому, что другой код - это mysql, а не mysqli? Должен ли я изменить их все на mysqli? Еще раз спасибо. Предупреждение: mysqli_query() ожидает, что параметр 1 является mysqli, ресурс указан в /search.php в строке 36 ошибка получения данных из базы данных – mush

1

Я думаю, что вы ищете mysqli_query ($ con, $ query).

Попробуйте заменить вызов функции запроса() с mysqli_query()

Обратите внимание, что mysql_query() является depricated в пользу mysqli_query() по соображениям безопасности.

Смотрите документацию для него здесь: http://php.net/manual/en/mysqli.query.php

Если это не поможет, то я хотел бы предложить изучение кода в «connect.php», что вы в том числе. Также было бы полезно получить точный текст ошибки, это поможет нам отладить ваш код.

+0

Вот итог жалобы OP, IMJ. Могут также потребоваться другие исправления, но главное - сказать $ query, когда вы имеете в виду $ mysqli_query. –

0

Предполагая, что вы используете расширение php mysql, ниже приведено исправленное решение вашей проблемы.

<?php 
if (isset($_POST['submitted'])){ 
    include('connect.php'); 
    $category = $_POST['category'];//I guess it is search category(e.g. firstname) 
    $criteria = strtolower($_POST['criteria']); 
    $query = "SELECT * FROM Customers WHERE LOWER({$category}) LIKE '%{$criteria}%'"; 
    $result = mysql_query($query) or die (mysql_error()); 
    $num_rows = mysql_num_rows($result); 
    echo "{$num_rows} results found"; 
    echo '<table>'; 
    while ($row = mysql_fetch_assoc($result)) { 
    ?> 
     <tr> 
     <td width="300" > 
      <font face="Arial Black" size="2"><?php echo "{$row['firstname']} {$row['lastname']}"?></font> 
     </td> 
    </tr> 
    <?php } echo '</table>'; ?> 
Смежные вопросы