dush93 Ответов: 2

Как получить изображение профиля пользователя через имя пользователя в PHP?


Я разработал Профиль пользователя, в который он может загрузить свою фотографию при первом входе в систему. Его фотография профиля сохраняется в папке, а путь к изображению сохраняется в базе данных. Теперь я хочу получить это изображение, используя его имя пользователя, которое у меня есть, чтобы сделать его уникальным. когда пользователь сохраняет свою фотографию профиля, через скрытую кнопку отправки, я сохраняю его имя пользователя в базе данных.
Но эта выборка кода изображения не работает

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

Это мой полный прием. php-файл, в котором пользователь может изменить свою фотографию профиля и увидеть его детали профиля.
<?php include('config.php');?>
<?php
    // index.php
    session_start();
    if(!isset($_SESSION['username']))

     {
        header("Location: login.php");
        exit();
    }
    $username = $_SESSION['username'];
    $sql = "SELECT *  FROM services WHERE user_name = '".$_SESSION['username']."'";
    $result = $con->query($sql);

    if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        ?>
 <!-- Save username and profile picture-->   

<link rel="stylesheet" type="text/css" href="css/welcome_php.css">
<?php include('header.php');?>

<div class="container">
    <div class="row">
        <div class="col-md-7 ">
            <div class="panel panel-default">
                <div class="panel-heading">
                  <a style="float: right" href="logout.php">  Logout</a>
                 <center> <h4 >User Profile</h4></center>

               </div>
                    <div class="panel-body">

                        <div class="box box-info">

                            <div class="box-body">
                                <div class="col-sm-6">
                                    
                                        <form method="post" action="ajaxupload.php" enctype="multipart/form-data">
                                          <h5 style="color:#a66a6a;">Set your profile picture</h5>
                                          <input type="file" name="Filename"> 
                                          <input type="hidden" name="Description"  value="<?php echo $row ['user_name']; ?>" />
                                          <br/>
                                          <input TYPE="submit" name="upload" value="Submit" class="btn1" />
                                        </form>

   
                                    

              
                                </div>
                                

            <div class="col-sm-6">
            <h4 style="color:#a66a6a;"><?php echo $row ['name']; ?></h4></span>
              <span><p><?php echo $row ['service']; ?></p></span>            
            </div>
            <div class="clearfix"></div>
            <hr style="margin:5px 0 5px 0;">
  
              
<div class="col-sm-5 col-xs-6 tital " >Name</div><div class="col-sm-7 col-xs-6 "><?php echo $row ['name']; ?></div>
     <div class="clearfix"></div>
<div class="bot-border"></div>

<div class="col-sm-5 col-xs-6 tital " >User Name</div><div class="col-sm-7"> <?php echo $row ['user_name']; ?></div>
  <div class="clearfix"></div>
<div class="bot-border"></div>

<div class="col-sm-5 col-xs-6 tital " >Password</div><div class="col-sm-7"> <?php echo $row ['password']; ?></div>
  <div class="clearfix"></div>
<div class="bot-border"></div>

<div class="col-sm-5 col-xs-6 tital " >email</div><div class="col-sm-7"><?php echo $row ['email']; ?></div>

  <div class="clearfix"></div>
<div class="bot-border"></div>

<div class="col-sm-5 col-xs-6 tital " >District</div><div class="col-sm-7"><?php echo $row ['district']; ?></div>

  <div class="clearfix"></div>
<div class="bot-border"></div>

<div class="col-sm-5 col-xs-6 tital " >City</div><div class="col-sm-7"><?php echo $row ['city']; ?></div>

 <div class="clearfix"></div>
<div class="bot-border"></div>

<div class="col-sm-5 col-xs-6 tital " >Address</div><div class="col-sm-7"><?php echo $row ['address']; ?></div>

<div class="clearfix"></div>
<div class="bot-border"></div>

<div class="col-sm-5 col-xs-6 tital " >Service</div><div class="col-sm-7"><?php echo $row ['service']; ?></div>
<div class="clearfix"></div>
<div class="bot-border"></div>

<div class="col-sm-5 col-xs-6 tital " >Years</div><div class="col-sm-7"><?php echo $row ['years']; ?></div>
<div class="clearfix"></div>
<div class="bot-border"></div>

<div class="col-sm-5 col-xs-6 tital " >Details</div><div class="col-sm-7"><?php echo $row ['details']; ?></div>

<center><a href="update_userinfo.php" class="btn" role="button">Update</a></center>


<?php
        }
        }
        ?>

<?php

 $sql="SELECT image_path FROM images where user_name = '".$_SESSION['username']."'";
 
      $result = $con->query($sql);

      $file_name=$row['file_name'];
      $image_path=$row['image_path'];//here you get path where you store image for user1

    ?>    
          
  <img src=<?php echo"$image_path";?> width=500 height=400> <br>      

Это ajax upload file который сохраняет изображение в ddatabse
<?php
	$fileExistsFlag = 0; 
	$fileName = $_FILES['Filename']['name'];
	$link = mysqli_connect("localhost","root","","construction") or die("Error ".mysqli_error($link));
	/* 
	*	Checking whether the file already exists in the destination folder 
	*/
	$query = "SELECT file_name FROM images WHERE file_name='$fileName'";	
	$result = $link->query($query) or die("Error : ".mysqli_error($link));
	while($row = mysqli_fetch_array($result)) {
		if($row['filename'] == $fileName) {
			$fileExistsFlag = 1;
		}		
	}
	/*
	* 	If file is not present in the destination folder
	*/
	if($fileExistsFlag == 0) { 
		$target = "uploads/";		
		$fileTarget = $target.$fileName;	
		$tempFileName = $_FILES["Filename"]["tmp_name"];
		$fileDescription = $_POST['Description'];	
		$result = move_uploaded_file($tempFileName,$fileTarget);
		/*
		*	If file was successfully uploaded in the destination folder
		*/
		if($result) { 
			echo "Your file <html>".$fileName."</html> has been successfully uploaded";		
			$query = "INSERT INTO images(image_path,file_name,user_name) VALUES ('$fileTarget','$fileName','$fileDescription')";
			$link->query($query) or die("Error : ".mysqli_error($link));			
		}
		else {			
			echo "Sorry !!! There was an error in uploading your file";			
		}
		mysqli_close($link);
	}
	/*
	* 	If file is already present in the destination folder
	*/
	else {
		echo "File <html>".$fileName."</html> already exists in your folder. Please rename the file and try again.";
		mysqli_close($link);
	}	
?>

Jochen Arndt

Ваше сообщение об ошибке выглядит следующим образом
"Неопределенная переменная: image_src ..."
но ваш опубликованный код не содержал этой переменной.

Проверьте полное сообщение об ошибке. Он содержит имя файла и номер строки, в которой используется эта неопределенная переменная. Затем проверьте исходный код в указанном файле.

Если вы все еще застряли, обновите свой вопрос с полным сообщением об ошибке и соответствующим кодом.

dush93

@Jochen я обновил вопрос

Jochen Arndt

Смотрите мое решение, которое я опубликовал тем временем.

2 Ответов

Рейтинг:
4

dush93

Большое вам спасибо за вашу помощь @Jochen. После рассмотрения ваших комментариев я сделал код следующим образом
Я

<?php

 $sql="SELECT * FROM images where user_name = '".$_SESSION['username']."'";
 $result = $con->query($sql);

    if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        ?>
      
      <?php echo '<img src="' . $row['image_path']. '" width="500" height="400">'; ?>

    
   <?php
        }
        }
        ?> 


Рейтинг:
15

Jochen Arndt

В дополнение к моему комментарию о том, что он не показывает никакого кода, содержащего img_src переменная.

Значения атрибутов HTML должны быть заключены в кавычки (браузеры обычно принимают их также без кавычек, но это недопустимый HTML) и должны быть заключены в кавычки, если они содержат пробелы или зарезервированные символы:

<?php echo '<img src="' . $image_path . '" width="500" height="400">'; ?>

[РЕДАКТИРОВАТЬ]
Этот код кажется скопирован и вставлен вместе и не будет работать должным образом:
$sql="SELECT image_path FROM images where user_name = '".$_SESSION['username']."'";

// Executing the query and assigning to $result
// OK so far but it misses checking for errors
$result = $con->query($sql);

// What is $row?
// The query result has been stored in $result!
// There is probably something missing like
//$row = $result->fetch_row(); 
// Finally, the above SQL query returns only one field: image_path
// So 'file_name' will never be present
$file_name=$row['file_name'];
$image_path=$row['image_path'];//here you get path where you store image for user1

Если вышеизложенное было исправлено для возврата пути из базы данных (или печати некоторой обратной связи, если нет), то этот путь можно использовать для img тег при условии, что файлы существуют и представляют собой путь относительно корня документа веб-сервера (начинающийся с '/') или относительно текущей страницы.
[/РЕДАКТИРОВАТЬ]


dush93

Спасибо за ваше внимание,но это не приносит изображения.

Jochen Arndt

Он не извлекает изображение, но показывает его, когда $image_path является допустимым путем, к которому может получить доступ веб-сервер.

Ваш код не будет этого делать, даже если путь действителен.

Однако поместите весь код в один PHP-блок (то есть поместите команду echo сразу после запроса из базы данных).

Вы также должны проверить, был ли запрос успешным.

Все остальное требует полного сообщения об ошибке (до сих пор неясно, где происходит ошибка и что делает соответствующий код).

Кроме того, ваш код выглядит вообще недействительным. Я обновлю свой ответ.

dush93

@jochen большое вам спасибо за ваши комментарии. Я обновил код с завершенными версиями.Пожалуйста, взгляните.

Jochen Arndt

Но вы все равно не дали нам подробного описания ошибки (какая именно ошибка произошла и где). "Не работает" не помогает нам помочь вам.

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

Именно это я и сделал в своем обновленном ответе. Но вы можете просто проверить это шаг за шагом:
Является ли запрос успешным?
Если нет, то есть ли сообщение об ошибке?
Если да, то каково значение "пути изображения"?
Является ли это допустимым путем для веб - сервера?
Существует ли этот файл?

Описанный выше процесс называется отладкой. Но это можете сделать только вы. Мы можем только дать несколько советов / подсказок и найти явно неправильный код.