divinity02 Ответов: 2

Как я могу исправить этот код, я в отчаянии


пытаясь вставить и отобразить изображения в БД с помощью php, у меня есть три ошибки.

Ошибка № 1.
 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\wamp64\www\luana_itec244\php\dashboard.php on line 32
Call Stack


ошибка № 2:
Warning: move_uploaded_file(images/bhaji_n_pigtails.jpg): failed to open stream: No such file or directory in C:\wamp64\www\luana_itec244\php\dashboard.php on line 80



пожалуйста помогите и очень ценю

Что я уже пробовал:

<pre><?php

		
		$db_host='localhost';
		$db_username='root';
		$db_password="";
		$con=mysqli_connect($db_host,$db_username, $db_password) or die (mysqli_connect_error());
		
		mysqli_select_db($con, 'food') or die (mysqli_error($con));
		if(isset($_POST['submit']) && isset($_GET['img_id']))
		{
			$sql= "SELECT * FROM tbl_images  WHERE img_id={$img_id}";
			$result=mysqli_query($con, $sql) or die("Error:" .mysql_error($con));
			$rowcount=mysqli_num_rows($result);
		}
		
			
?>
<html>
<body>	

	
		<div id="content">
			<?php
				$db_host='localhost';
				$db_username='root';
				$db_password="";
				$con=mysqli_connect($db_host,$db_username, $db_password) or die (mysqli_connect_error());
				
				$sql ="SELECT * FROM tbl_images";
				$result = mysqli_query($con, $sql);
				while($result = mysqli_fetch_array($result))
				{
					echo "<div id=img_div";
						echo "<img src='images/" .$row['image']. "'>";
							echo "<p>" .$row['text']. "</p>";
					echo "<div>";
					
					
				}
			?>
		</div>
		<form  method="post" enctype="multipart/form-data" >
			<br/>
				<input type="hidden" name="size" value="100000">
				<br/><br/>
				<div>
					<input type="file" name="image" value="Upload">
				</div>
				<div>
					<textarea name="text" cols="40" rows="4" placeholder="say something"></textarea>
				</div>
				<div>
					<input type="submit" name="upload" value="Upload" />
				</div>
		</form>
			
	

<?php
		$msg="";
		if(isset($_POST['upload']))
		{
			
			$image_text = mysqli_real_escape_string($con,$_POST['text']);
			
			$target="images/" .basename($_FILES['image']['name']);
			
			$db_host='localhost';
			$db_username='root';
			$db_password="";
			$con = mysqli_connect($db_host, $db_username, $db_password);
			
			$image = $_FILES['image']['name'];
			$text = $_POST['text'];
			
			$sql = "INSERT INTO tbl_images ('image', 'text') values($text, $image)";
			mysqli_query($con, $sql);
			
			if(move_uploaded_file($_FILES['image']['tmp_name'], $target))
			{
				$msg ="Image upload successfully";
			}
			else
			{
				$msg = "Error uploading image";
			}
			 $result = mysqli_query($con, "SELECT * FROM tbl_images");
			
			
		}

	
?>		
		
</body>
</html>

Kornfeld Eliyahu Peter

Отладьте свой код!!!
http://php.net/manual/en/mysqli-да.query.php

"Возвращает FALSE при сбое. Для успешного выбора, показа, описания или объяснения запросов mysqli_query() вернет объект mysqli_result. Для других успешных запросов mysqli_query() вернет TRUE."

Richard MacCutchan

1. Пожалуйста, прочтите документацию MySQL, где она объясняет, какие значения могут быть возвращены по каждому запросу.

2. либо имя файла неверно, либо путь не существует. Только вы можете проверить и то, и другое.

2 Ответов

Рейтинг:
2

Mohibur Rashid

Здравствуйте Отчаянии,

Проблема вызвана отсутствием базы данных;

Вы можете проверить mysqli_error после выполнения запроса. если вы это сделаете, то увидите, что ваша база данных Не выбрана. Но вы скажете, что выбрали сами. Ответ-и да, и нет. Вы установили две связи, в которых не было необходимости. Для первого соединения, в var $против, вы выбрали db. Но во втором соединении, которое вы тоже назвали $против, не выбирал БД

Решения:
Решение 1. добавьте команду mysqli_select_db после второго подключения
Решение 2. Убрать второй mysqli_connection


Рейтинг:
1

Jochen Arndt

Вы используете переменную $row в пределах вашего цикла выборки, но назначил mysqli_fetch_array() возвращаемое значение в $result:

$result = mysqli_query($con, $sql);
while($result = mysqli_fetch_array($result))
Вышеописанное также завершится неудачей, когда запрос завершится неудачно.

Поскольку запрос может завершиться неудачей, вы также должны проверить это (тогда $result является логическим значением, как указано в сообщении об ошибке).

Таким образом, ваш код должен быть
/* Always check for success before using $result as object */
if ($result = mysqli_query($con, $sql)) {
    /* Use a new variable here for the fetch result */
    while ($row = mysqli_fetch_array($result)) {
        /* Use $row here */
    }
}

Я не могу помочь в решении проблемы перемещения файлов. По какой то причине файл images/bhaji_n_pigtails.jpg не существует или каталог, указанный в $target пути не существует. Решение этой проблемы требует некоторого исследования вашей системы (настройка PHP и веб-сервера) и / или отладки.