Я хотел, чтобы в автоматической таблице отображались все товары из базы данных, где вы можете нажать на ее название и просмотреть всю информацию о товаре. И моя идея состояла в том, что это не приведет вас к другому файлу .php, но вы все равно будете находиться на той же странице, чтобы не тратить время на создание нескольких файлов .php для каждого продукта.
Проблема в том, что всякий раз, когда я нажимаю на продукт, он не загружает информацию о продукте (кстати, единственное описание — это описание).
ошибка
Неустранимая ошибка: невозможно использовать объект типа mysqli_result в качестве массива в C: \ wamp \ www \ goldenrod \ index.php в строке 56
Это соединение с базой данных:
<?php
//Database Connections
$dbc = mysqli_connect('localhost', 'root', '', 'lionsierra_db') or die("Cannot find specified server");
//Product Database
$db_products = "SELECT * FROM `products`";
$products = mysqli_query($dbc, $db_products);
?>
И это функция:
<?php
//View product
if(isset($_GET['view_product'])) {
while($product=mysqli_fetch_assoc($products)) {
$products['ID'] = $_GET['view_product'];
//Display a product
echo "<p><span>
<span style='font-weight:bold;'>" . $products['ID']['name'] . "</span><br/>
<span>$" . $products['ID']['price'] . "</span><br/>
<span>" . $products['ID']['category'] . "</span><br/>
<span>" . $products['ID']['description'] . "</span>
</p>";
}
}
//View all products
echo '<table width="600" border="1" cellpadding="1" cellspacing="1">
<tr>
<th>Name</th>
<th>Price</th>
<th>Category</th>
</tr>';
while($product=mysqli_fetch_assoc($products)) {
echo "<tr>
<td><a href='./index.php?view_product=" . $product['ID'] . "'>". $product['name'] . "</a></td>
<td>" . $product['price'] . "</td>
<td>" . $product['category'] . "</td>
</tr>";
$ID = $product['ID'];
}
?>
Я все еще довольно плохо знаком с PHP и SQL, и я был бы признателен, если бы вы, ребята, смогли мне помочь.
Проблема находится здесь:
if(isset($_GET['view_product'])) {
while($product=mysqli_fetch_assoc($products)) {
Похоже, вы просто повторно используете MySQLI
запрос здесь. Вместо этого вы должны изменить запрос в зависимости от productID
, Давайте посмотрим, как это выглядит:
if(isset($_GET['view_product'])) {
//now let's build out our query
$view_product_statement = mysqli_prepare($conn, "SELECT * FROM products WHERE ID = ?");
mysqli_stmt_bind_param($view_product_statement, 'i', $_GET['view_product']);
mysqli_stmt_execute($view_product_statement);
mysqli_stmt_bind_result($view_product_statement);
while($product=mysqli_fetch_assoc($view_product_statement)){
//now $product holds reference to the one we're trying to view.
}
mysqli_stmt_close($view_product_statement);
}
Я использовал prepared statements
в моем выше, чтобы помочь дезинфицировать ваш пользовательский ввод таким образом, чтобы вы помогли избежать SQL Injection
,
Других решений пока нет …