Я следую книгу о филиппинских и MySQL, но следующий код не работает должным образом:Query выводит PHP код
<html>
<head>
<title>Book-O-Rama Search Results</title>
</head>
<body>
<h1>Book-O-Rama Search Results</h1>
<?php
//short variables
$searchtype = $_POST['searchtype'];
$searchterm = trim($_POST['searchterm']);
echo $searchterm;
if(!$searchtype || !$searchterm) {
echo 'You have not entered search details.';
exit;
}
if(!get_magic_quotes_gpc()) {
$searchtype = addslashes($searchtype);
$searchterm = addslashes($searchterm);
}
@ $db = new mysqli('localhost', 'root', '', 'books');
if(mysqli_connect_errno()) {
echo 'Error: could not connect to the database. Please try again later.';
exit;
} else {
echo "All right";
}
$query = "select * from books where ".$searchtype." like '%".$searchterm."%";
$result = $db->query($query);
$num_results = $result->num_rows;
echo "<p>Number of books found: ".$num_results."</p>";
for($i=0; $i < $num_results; $i++) {
$row = $result->fetch_assoc();
echo "<p><strong>".($i+1).". Title: ";
echo htmlspecialchars(stripslashes($row['title']));
echo"</strong><br />Author: ";
echo stripslashes($row['author']);
echo "<br /> ISBN: ";
echo stripslashes($row['isbn']);
echo "<br />Price: ";
echo stripslashes($row['price']);
echo "</p>";
}
$result->free();
$db->close();
?>
</body></html>
Он выводит это:
Book-O-Rama Search Results
query($query); $num_results = $result->num_rows; echo "
Number of books found: ".$num_results."
"; for($i=0; $i < $num_results; $i++) { $row = $result->fetch_assoc(); echo "
".($i+1).". Title: "; echo htmlspecialchars(stripslashes($row['title'])); echo"
Author: "; echo stripslashes($row['author']); echo "
ISBN: "; echo stripslashes($row['isbn']); echo "
Price: "; echo stripslashes($row['price']); echo "
"; } $result->free(); $db->close(); ?>
Я не могу понять, почему, а также echo $searchterm;
в начале не выполняется вообще. P.s. Я запускаю скрипт с Xampp localhost.
К сожалению, здесь существует много программ для создания грузиков. Тестирование магических кавычек и произвольное использование «stripslashes» на самом деле не является чем-то необходимым. Использование 'addslashes' является неправильным способом [правильно экранирующих значений] (http://bobby-tables.com/php). При использовании 'mysqli' вы должны использовать параметризованные запросы и [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить данные пользователя в ваш запрос. ** НЕ используйте ** интерполирование строк, чтобы выполнить это, потому что вы создадите серьезные [SQL-инъекции ошибок] (http://bobby-tables.com/). – tadman
Вы пытались заменить отметки '' "' на одиночные обратные обратки, т. Е. 'Echo '
Количество найденных книг:". $ Num_results. "
"; 'становится' echo''. 'Количество найденных книг:'. $ num_results. '
'; ' – aphextwix@tadman Я просто следую этой книге, так как я новичок в PhP. Этот код показан в книге, чтобы научить, как использовать базу данных с PhP, что-то для новичков. Темы о SQL-инъекции приходят позже. – stephjiayi