Incarcare imagine in formular

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Monica
Mesaje:21

Incarcare imagine in formular

Vreau sa fac un formular de anunt publicitar (vanzare ceva, de ex.) care sa functioneze cam asa:
-utilizatorul introduce date despre produs
-selecteaza o imagine pt produsul respectiv care sa apara in formular imediat dupa selectie
-inregistreaza anuntul

Din cat stiu eu si am gasit pe net pana acum exista separat tutoriale pt formular anunt si unul pt incarcare imagini. Dar cum fac sa fie 2 in 1 ca sa zic asa. Am incercat ceva dar nu e functional. Acesta e codul

Cod: Selectaţi tot

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
 
<title>Formular cu imagine</title> 
<style type="text/css"> 
	#uploadframe { display:none; } 
</style> 

<script type="text/javascript" src="functii.js"></script> 
</head> 

<script>
function fverif(){
var frm = window.document.FormularAnunt;
var lung1=frm.titlu.value.length;
var lung2=frm.anunt.value.length;
if (lung1==0 || lung2==0){
	alert('Nu ati completat toate campurile');
}
}   
</script>
 
 
<body> 
<form id="FormularAnunt" name="FormularAnunt" action="" method="POST" onsubmit="fverif();" >
	<input name="titlu" type="text" maxlength="70" value="<?php echo (isset($_POST['titlu'])) ? $_POST['titlu'] : ''; ?>" /><br />
	<input name="anunt" type="text" maxlength="70" value="<?php echo (isset($_POST['anunt'])) ? $_POST['anunt'] : ''; ?>" /><br /><br />

	<input name="seleimg" type="file" size="40"/>
	<input name="adimg" type="button" value="Incarca imaginea" /><br /><br />
	
	<input name="Inregistrare" type="submit" value="Inregistrare anunt" />
</form>


</body> 
</html>

<?php
if (isset($_POST['Inregistrare']) && $_POST['titlu']!=='' && $_POST['anunt']!=='') {
	include('inreganunt.php');
}
?>
cand utilizatorul apasa pe incarca imaginea, in caz ca selecteaza una, sa-i apara in formular imaginea selectata (sa execute codul din upload_img.php, tutorialul Incarcarea imaginilor pe server si afisarea lor) si abia dupa aceea sa treaca la inregistrare anunt. Am gasit ceva in javascript dar eu as vrea sa rezolv situatia in php. Va rog sa ma ajutati cu o solutie.

Multumesc anticipat.

MarPlo Mesaje:4343
Ideea ar fi aplicare Ajax (adica si cu JavaScript). Cand utilizatorul apasa pe butonul "Incarca imaginea", cu "onclick" se apeleaza o functie Ajax care sa trimita imaginea printr-un <iframe> la "upload_img.php".
E destul de complicat, mai multe despre Upload imagine cu Ajax e la pagina: Incarcarea imaginilor pe server si afisarea lor folosind Ajax.

Alta solutie:
- In pagina sa apara doar un formular pt. incarcare imagine, apoi, dupa incarcare, fisierul "upload_img.php" sa afiseze imaginea si formularul pt. adaugarea restului de date.

Monica Mesaje:21
pana la urma am rezolvat problema, dar acum apar altele asa ca voi scrie tot aici.

1. dupa submit 'Incarca imaginea' testez dimensinile (width, height), daca sunt mai mari decat 100X100 aplic redimensionarea.
codul

Cod: Selectaţi tot

	            $size = getimagesize($thefile);
	            if ($size[0]>100 || $size[1]>100){
	            	$img1 = imagecreatefromjpeg('$thefile');
	            	$img2 = imagecreatetruecolor(100, 100);
					imagecopy($img2, $img1, 0, 0, 0, 0, 100, 100);
					header('Content-Type: image/jpeg');
					imagegd($img2,'fisredim.jpeg');
}
asta nu inseamna ca obtin o copie a imaginii initiale, redimensionata, cu numele fisredim, extensia jpeg, in directorul curent ? N-o gasesc nici in directorul curent nici pe c:\, niciunde. Fisierul obtinut dupa redimensionare, fisredim.jpeg , vreau sa-l salvez pe server in acel director Imgs si sa-l vizualizez in formular in acel iframe.

2. daca 2 utilizatori incarca fiecare cate o imagine cu aceeasi denumire dar continut diferit (se poate intampla si situatia asta) am vazut ca peste prima imagine se copiaza cea de-a doua, ca urmare primul utilizator se poate trezi maine ca la reclama lui e atasata alta imagine. Nu ar trebui ca procesul de incarcare a imaginilor sa fie insotit si de o redenumire a lor, ca un fel de contor, sa se evite suprapunerea ?

Multumesc anticipat !

MarPlo Mesaje:4343
Daca vrei sa faci redimensionarea imaginii, incearca cu functia imagecopyresized(), exemplu si expicatii cum se foloseste e la lectia Functii utile pentru lucrul cu imagini (la sfarsit).

In loc de: imagegd() incearca cu imagejpeg($img2,'fisredim.jpeg');

Dupa cum e codul, imaginea ar trebui salvata cu numele 'fisredim.jpeg' in directorul in care e scriptul, daca tot nu merge, probabil PHP nu are permisiuni de creare fisiere in el. Ai putea crea pt asta un nou director in cel curent.

2. Daca nu sunt 2 utilizatori cu acelasi nume, poti adauga la numele imaginii pe cel al utilizatorului, iar daca salvezi intr-un director separat, ar fi cam asa:
imagejpeg($img2, 'dir/numeuser_fisredim.jpeg');

Monica Mesaje:21
3. Cum fac sa pastreze imaginea in formular dupa ce dau submit ? Am incercat asa

Cod: Selectaţi tot

<input type="file" id="poza" name="poza" value="<?php echo (isset($_POST['poza'])) ? $_POST['poza'] : ''; ?>" style="width: 214px"> 
dar nu functioneaza, pagina se reincarca cu iframe-ul si input-ul goale. Cum se poate rezolva ?

am rezolvat cu imagejpeg(), am vazut unde greseam, de fapt erau 2 greseli care se legau intre ele, acum merge copierea, dar rezultatul nu e cel dorit pt ca imi copiaza doar o bucata din imagine, cat corespunde coordonatelor date in imagecopy(). Eu vreau a redimensionare o intregii imagini, cu pastrarea proportiilor. Se poate face in php ?

MarPlo Mesaje:4343
Nu stiu daca se poate, si cum, pastrare valorii in caseta de tip "file" dupa trimitere.
Pentru redimensionare, incearca functia imagecopyresized(). E mai sus link spre pagina unde este exemplu de folosire imagecopyresized().

Monica Mesaje:21
am rezolvat cu redimensionarea, n-am observat ca am folosit imagecopy() in loc de imagecopyresized() desi stiu ca cea de-a doua face redimensionarea. Asa e cu incepatorii, ne mai scapa unele chestii, nu le observam chiar daca sunt sub nasucul nostru :oops: :)

Asa ... am terminat cu incarcare imagine, acum pot avea situatia in care utilizatorul se razgandeste si nu mai vrea (momentan) sa ataseze o poza anuntului. Pt asta am facut un buton [sterge imagine] si codul urmator

Cod: Selectaţi tot

<script>
function del_img() { 
document.uploadframe.reset;
} 
</script>

<form id="uploadframe" action="upload_img1.php" method="post" enctype="multipart/form-data" target="uploadframe" >
	<iframe id="uploadframe" name="uploadframe" src="upload_img1.php" width="300" height="120" scrolling="yes" frameborder="0" marginwidth="0" marginheight="0"></iframe><br>
	<input type="reset" name="delimg" value="[ Sterge imaginea ]" style=" background-color:#D7EBFF; border:0px; width: 120px; margin-top:0px; font-size:11px;" onclick="del_img();">
	<br>
	Imaginea incarcata va fi redimensionată automat daca depăşeşte limita setată de administrator
	<br><br>
	<input type="file" id="poza" name="poza" value="" style="width: 214px"> 
	<input type="submit" value="Incarca imaginea"> <br>
</form>

care imi reseteaza campul file dar nu si iframe-ul. Cum pot rezolva situatia ?

Marplo mii de multumirii pentru ajutorul, rabdarea si timpul acordat !

MarPlo Mesaje:4343
Poti ascunde iframe-ul, cu: document.getElementById('uploadframe').style.display = 'none'; .
Sau poti adauga acel <iframe> intr-un DIV, ( <div id="cifrm"><iframe ...></iframe></div> ), si cand vrei stergi continutul acelui DIV, cu:
document.getElementById('cifrm').innerHTML = ''; .

Subiecte similare