File Fomr Image

dakata__92

Super Moderator
Колеги, опитвам се да подам някакво изображение през формата от дадена директория и да я приравня на променлива. Всичко е ок докато дойде момента в който желая втори път да натисна сюбмит бутона. Искам да изведе същото изображение без да го въвеждам отново в полето за което ползвам и сесия. Не се справям нещо с логистиката на кода, би трябвало да работи, но днес съм след тежък луикенд и доста махмурлук, тааа да попитам къде греша. Искам да заредя изображение след което то да се обработи от код който не показвам и след което пак да натисна и въведа в полето някакви цветове без да въвеждам същото изображение във файл инпута и да връща снимката от сесията. :?:

Код:
<?php
session_start();

if(isSet($_POST['Submit']))
{
	if(isSet($_FILES['userfile'])) // setvam img
	{
		$_SESSION['image'] = "img/".$_FILES['userfile']['name'];
		$Image['path'] =  "img/".$_FILES['userfile']['name'];
	}
	else
	if(isSet($_SESSION['image'])) 
	{
		$Image['path'] = $_SESSION['image'];
	}
	$inputcolor = $_POST['colorstay'];	
}
else
{
	$Image['path'] =  "img/2.png"; // Defaut
	$inputcolor = '';
}
echo "<img src='".$Image['path']."' />";
?>
<br><form name="colorshow" method="post" enctype="multipart/form-data">
<input type="file" name="userfile" accept="image/*" />
<br><input type='tex' id='colorstay' name='colorstay' size='50' value='' />
<input type='Submit' name='Submit' value='Покажи' />
<input type="reset" name="reset" value="Изчисти" />
</form>
 
Сложи едно value = сесията в която запазваш пътя до картинката в
<input type="file" name="userfile" accept="image/*" /> и би трябвало да се получи това което искаш.
 
teroristd каза:
Сложи едно value = сесията в която запазваш пътя до картинката в
<input type="file" name="userfile" accept="image/*" /> и би трябвало да се получи това което искаш.
Може ли примерен код? :)
 
Ето ти пример доста по прост но идеята е ясна.

Код:
<?php
session_start();  
if(isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views']+ 1;
else
    $_SESSION['views'] = 1;

echo "views = ". $_SESSION['views']; 

?>

 <input type="text" name="ses" value="<?php echo $_SESSION['views'] ?>" />
 
teroristd каза:
Ето ти пример доста по прост но идеята е ясна.

Код:
<?php
session_start();  
if(isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views']+ 1;
else
    $_SESSION['views'] = 1;

echo "views = ". $_SESSION['views']; 

?>

 <input type="text" name="ses" value="<?php echo $_SESSION['views'] ?>" />
Нещо не успявам да го съчетая с моят код, който дадох по-горе. :?
 
Ще се опитам да ти обясня за твоя код специално.

В $_SESSION['image'] - запазваш пътя до картинката нали така

Във формата от този ред избираш картинка <input type="file" name="userfile" accept="image/*" />

Същия ред само го правиш така

<input type="file" name="userfile" accept="image/*" value="<?php echo $_SESSION['image'] ?>" />

Ако правилно записваш в сесията пътя до картинката то тя автоматично ще бъде присвоена като value на полето.

Надявам се този път да ме разбра какво имам на предвид. Просто не знам как да го обясня по друг начин.
 
За да ти стане още по ясно направи си един тестов пхп файл и пейстни кода който ти дадох по горе. Ще видиш че в текстовото поле автоматично се въвежда числото от сесията което, при рефреш нараства с +1. Това е защото съм казал $_SESSION['views'] = $_SESSION['views']+ 1; за да можеш да видиш разликата.

В твоя случай е същото. Когато избереш картинка пътя до нея се записва в сесията и когато натиснеш субмит бутона той играе ролята на рефреш и в полето след това остава пътя записан в сесията. А вече ти как ще си структорираш кода и дали правилно записваш пътя не знам.
 
Нещо не се справям с идеята... Като цяло работил съм със сесии но в момента нещо ми куца подредбата на кода за да се получи правилно. Снимката не се качва никъде, не е нужно и за целите ми да се прави това.

Код:
<?php
session_start();

if(isSet($_POST['Submit']))
{
	
	if(isSet($_SESSION['image'])) // setvam img
	{
		$_SESSION['image'] = $_FILES['userfile']['name'];
	}
	else
	{
		$_SESSION['image'] =  "2.png"; // Defaut
	}
	$inputcolor = $_POST['colorstay'];	
}
else
{
	echo "3";
	$_SESSION['image'] =  "2.png"; // Defaut
	$inputcolor = '';
}
echo "<br><img src='img/".$_SESSION['image']."' />";
?>
<br><form name="colorshow" method="post" enctype="multipart/form-data">
<br><input type="file" name="userfile" accept="image/*" value="<?php echo $_SESSION['image'] ?>" />
<br><input type='tex' id='colorstay' name='colorstay' size='50' value='' />
<input type='Submit' name='Submit' value='Покажи' />
<input type="reset" name="reset" value="Изчисти" />
</form>
 
Доколкото разбирам, портебителят натиска "choose file", избира файл от собствения си компютър и изпраща формата. Сега ти искаш да покажеш инпут с изпратения файл. Но няма как да сложиш файла в инпута, защото той се намира на компютъра на потребителя?

Тоест след като потребителя е избрал файл, искаш автоматично да "бръкнеш" в системата му и да извадиш същия този файл. Е ако това беше разрешено... разбираш ли?
Не мисля че е възможно.

или аз не съм разбрал правилно?
 
Следвам идеята на terorista въпреки, че до колкото ми е известно value е забранено на type='file'. Мисля си да я подавам в скрито поле и от там да връщам сесията .
 
Принципно съм го правил нещо подобно преди една две години. Тогава си правех система за ъплоад с джаваскрипт и пхп и идеята ми беше да визуализирам картинките преди да бъдат качени на сървъра (демек потребителя да вижда какво качва). Виждал съм го това в някои сайтове. Тогава ми трябваше точно това да запиша пътя до картинката избрана чрез type='file' в сесия. Бях го постигнал някак но за съжаление при проблем с компютъра изгубих много от старите си скриптове, и сега съм забравил как става. Наистина си прав че, не е толкова просто колкото го описах за което се извинявам. Сега пробвам и аз но и при мен не се получава. Ако намеря някакво решение ще пиша.
 
Като цяло мога да избегна този казус в моят случай, като или подам дефаут изображението и си го сменям ръчно в кода или сменям цветовете като подам дефаут на полето. Но така или иначе ще трябва ръчно да бъркам и ресейхам кода, което е глупаво и ми писна да го правя. :D Просто ми трябва да ловя пътят ако трябва в txt файл да се запаметява и после да връща резултата, като се презаписва нали със смяна на снимката. :) Ако някой може да ми помогне за подобен код ще съм му супер благодарен. :?: :?: :?: teroristd няма защо да ми се извиняваш отворен съм за всякакви идеи просто за да си улесня и ускоря обработката на данните. :)
 
Драснах едно кодче, но защо винаги ми дава, че $Image е сетната дори когато подам само сюбмит след първото качване на снимката. Записва ми пътя в текстовото поле, но за да се изведе не трябва да има сетнато изображение, поради което просто натискам бутона, но уви пак записва в текстовият файл (презаписва с нищо). :shock: Пробвах така: $Image != "" и работи, но защо с isSet() не става?
Код:
<?php
if(isSet($_POST['Submit']))
{
	
	$File = 'name.txt';
	$Image = $_FILES['userfile']['name'];
	if(isSet($Image)) // setvam img
	{
		$Handle = fopen($File, 'w+');
		fwrite($Handle, $Image); 
		print "Data Added"; 
		fclose($Handle);
	}
	else
	{
		print "<br> From txt";
		echo "<br>".file_get_contents("name.txt"); 
	}
	$inputcolor = $_POST['colorstay'];	
	echo "<br><img src='img/".$Image."' /><br>";
}



?>
<br><form name="colorshow" method="post" enctype="multipart/form-data">
<br><input type="file" name="userfile" accept="image/*" />
<br><input type='tex' id='colorstay' name='colorstay' size='50' value='' />
<input type='Submit' name='Submit' value='Покажи' />
<input type="reset" name="reset" value="Изчисти" />
</form>
 
Пробвах така: $Image != "" и работи, но защо с isSet() не става?
Това ме отпрати към една много стара моя тема, в която питах за същото :), откъдето ми дойде едно от "големите прозрения" в php :)

http://web-tourist.net/forum/viewtopic.php?t=124825

Малко обяснение:

Код:
   $Image = $_FILES['userfile']['name'];
   if(isSet($Image)) // setvam img
   {
Обърни внимание на първия ред. Той винаги ще зададе стойност на $Image.
Затова винаги влизаш в if-a. Дори когато е празен низ, то проверката

if(isset ($Image)) е все едно (is $Imgae set or not?)

Единствено изключение прави когато $_FILES['userfile']['name'] върне null (тогава няма да влезеш в иф-а),
но пък тогава ще получиш забележка "Undefined variable at ...".
 
anonimen каза:
Пробвах така: $Image != "" и работи, но защо с isSet() не става?
Това ме отпрати към една много стара моя тема, в която питах за същото :), откъдето ми дойде едно от "големите прозрения" в php :)

http://web-tourist.net/forum/viewtopic.php?t=124825

Малко обяснение:

Код:
   $Image = $_FILES['userfile']['name'];
   if(isSet($Image)) // setvam img
   {
Обърни внимание на първия ред. Той винаги ще зададе стойност на $Image.
Затова винаги влизаш в if-a. Дори когато е празен низ, то проверката

if(isset ($Image)) е все едно (is $Imgae set or not?)

Единствено изключение прави когато $_FILES['userfile']['name'] върне null (тогава няма да влезеш в иф-а),
но пък тогава ще получиш забележка "Undefined variable at ...".

Това обяснява много! :D
 

Back
Горе