Аватара не се рефрешва веднага след ъплоуд, нужен е рефреш

taxi

Registered
Има ли начин, след като кача снимката, да се покаже, без да се налага ръчно да рефрешвам страницата?

PHP:
<?php
include("../config.php");
if(isset($_SESSION['username']) & ($_SESSION['userid']))
{
$id = $_SESSION["userid"];	
$selectimage = "SELECT `image` FROM `users` WHERE `id`='$id' limit 1";
$imgresult = mysqli_query($con, $selectimage);
$findimage = mysqli_fetch_row($imgresult);
	?>
	
<img height="100" width="100" src="<?php echo ($findimage[0]);?>?nocache=<?php echo time(); ?>">

  <form enctype="multipart/form-data" action="upload.php" method="POST">
    <p>Upload your file</p>
    <input type="file" name="uploaded_file"></input><br /><br />
    <input type="submit" value="Upload"></input>
  </form>

<?PHP
  if(!empty($_FILES['uploaded_file']))
  {
    $path = "images/snimki/";
	$name = time() . "" . rand(1,99999) . '.' . basename($_FILES['uploaded_file']['type']);
	$image= "images/snimki/$name";
    $path = $path . $name;
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) {
    //$query=("UPDATE users set image='".$image."' WHERE id=".$_SESSION['userid']);
	$query=("UPDATE users set image='".$image."' WHERE id='".$id."' limit 1");
    $result = mysqli_query($con, $query);
	//header('Location:index.php#t1');
      echo "The file ".  basename( $_FILES['uploaded_file']['name']). 
      " has been uploaded";
    } else {
        echo "There was an error uploading the file, please try again!";
    }
  }
}
?>
 
Има ли начин, след като кача снимката, да се покаже, без да се налага ръчно да рефрешвам страницата?

Точно така поставен въпросът, отговорът му е Да. Можеш да презаредиш страницата *автоматично*, а не *ръчно*. Едва ли имаш предвид това, но все пак е възможно решение.

На file input-а му закачаш onchange слушалка, с която submitваш formата:

HTML:
    <input type="file" name="uploaded_file" onchange="submit_form"></input><br /><br />

[js]function submit_form(e) {
e.parentNode.submit();
// по-добре дай id на формата и я достъпвай така:
// document.getElementById('form_id') или
// document.forms.namedItem('form_id')
}
[/js]
https://www.w3schools.com/jsref/coll_doc_forms.asp

По този начин при избор на файл от компютъра, формата автоматично ще се изпрати, т.е. ефектът при потребителя ще е какъвто очакваш.
 
Измислих друго решение, тъй като мисълта ми беше, просто да не рефрешвам аз с мишката, а ако кода сам рефрешва страницата, не е проблем. Въпроса е да не го прави постоянно, а само веднъж след ъплоуд за да зареди новата снимка/данни. Беше късно и явно, не съм го обяснил, като хората, съжалявам. В края на крайщата се оправих.

Благодаря Ви за времето.

PHP:
<?php
include("../config.php");
if(isset($_SESSION['username']) & ($_SESSION['userid']))
{
$id = $_SESSION["userid"];	
$selectimage = ("SELECT `image` FROM `users` WHERE `id`='$id' limit 1");
$imgresult = mysqli_query($con, $selectimage);
$findimage = mysqli_fetch_row($imgresult);
	?>
	
<img height="100" width="100" src="<?php echo ($findimage[0]);?>?nocache=<?php echo time(); ?>">

  <form enctype="multipart/form-data" action="upload.php" method="POST">
    <p>Upload your file</p>
    <input type="file" name="uploaded_file"></input><br /><br />
    <input type="submit" value="Upload"></input>
  </form>

<?PHP
  if(!empty($_FILES['uploaded_file']))
  {
    $path = "images/snimki/";
	$name = time() . "" . rand(1,99999) . '.' . basename($_FILES['uploaded_file']['type']);
	$image= "images/snimki/$name";
    $path = $path . $name;
	$refresh = "yes";
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) {
	$query=("UPDATE users set image='".$image."', refresh='".$refresh."' WHERE id='".$id."' limit 1");
    $result = mysqli_query($con, $query);
      echo "The file ".  basename( $_FILES['uploaded_file']['name']). 
      " has been uploaded";
    } else {
        echo "There was an error uploading the file, please try again!";
    }
  }
	$refreshsql= ("SELECT `refresh` FROM `users` WHERE `id`='$id' limit 1");
    $check_refresh = mysqli_query($con, $refreshsql);
	$refreshpage = mysqli_fetch_object($check_refresh);
	if($refreshpage->refresh === 'yes'){
	$refresh2 = "no";
	$query2=("UPDATE users set refresh='".$refresh2."' WHERE id='".$id."' limit 1");
    $result2 = mysqli_query($con, $query2);
	header("Refresh:0");
  }
}
?>
 
Принципно не би трябвало да можеш да пратиш header след като си print-нал нещо.

Само не разбирам защо не рефрешнеш директно след този ред:

if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) {

вместо да правиш заявка до базата за запис на стойност yes, а после нова заявка за проверка на това поле и още една за обновяването му до "no".

Можеш да си спестиш двете излишни операции като извикаш refresh веднага след качването на файла и обновяването на базата, т.е. веднага след това:

PHP:
$query=("UPDATE users set image='".$image."', refresh='".$refresh."' WHERE id='".$id."' limit 1");

    $result = mysqli_query($con, $query);

/// Тук Refresh
 

За бога... Бях дал header към същата страницата и не искаше да презареди новата снимка...
Сега сложих рефреш и стана... Благодаря!
 
Защо с бинарният оператор?

PHP:
if(isset($_SESSION['username']) & ($_SESSION['userid']))

Това може да ти докара много главоболия...

PHP:
echo true & 1; // Works
echo true & 2; // Doesn't work as expected

Проверката ти ще работи само ако userid е нечетно число.
 
pix3l каза:
Защо с бинарният оператор?

PHP:
if(isset($_SESSION['username']) & ($_SESSION['userid']))

[/php]

Проверката ти ще работи само ако userid е нечетно число.

Той сигурно е искал да напише && :lol: :lol:
 
deam0n каза:
Той сигурно е искал да напише && :lol: :lol:

Предполагам... което ще му докара двойно повече главоболия. :)
 

Горе