Διαγραφή υπάρχουσας εικόνας και upload άλλης

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
zekia
Δημοσιεύσεις: 146
Εγγραφή: 04 Μάιος 2004 16:38
Τοποθεσία: thessaloniki

Διαγραφή υπάρχουσας εικόνας και upload άλλης

Δημοσίευση από zekia » 13 Μάιος 2009 17:39

Γειά σας,
έχω μια βάση πολύ απλή. Για κάθε εγγραφή υπάρχουν διάφορα πεδία, μεταξύ των οποίων και το όνομα μιας εικόνας. Το πεδίο περιέχει το όνομα της εικόνας και το αρχείο της είναι αποθηκευμένο σε συγκεκριμένη θέση στον server.

Έχω καταφέρει να ανεβάζω μια νέα εικόνα για κάθε μια νέα εγγραφή αλλά και να διαγράφω το αρχείο της εικόνας όταν γίνεται διαγραφή της αντίστοιχης εγγραφής. Το τρίτο πράγμα που θέλω να κάνω είναι μια φόρμα όπου θα μπορεί να γίνει επεξεργασία όλων των στοιχείων της εγγραφής, μεταξύ των άλλων και της εικόνας.

Θέλω στη φόρμα αυτή ο χρήστης να μπορεί:
- Είτε να αφήνει την εικόνα ως έχει
- Είτε να την αντικαθιστά με κάποια άλλη. Προφανώς πριν ανέβει κάποια νέα εικόνα, πρέπει να διαγραφεί το παλιό αρχείο απο τον server. (Κάτι σαν την διαγραφή του avatar των χρηστών και την επιλογή ενός άλλου, που υπάρχει στα sites.)

Έχετε κάποια ιδέα ή κάποιο link που μπορεί να με βοηθήσει;

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6230
Εγγραφή: 30 Νοέμ 2004 03:09

Διαγραφή υπάρχουσας εικόνας και upload άλλης

Δημοσίευση από fafos » 13 Μάιος 2009 18:03

ena aplo if einai sthn epeksergasia.. an anebazeis eikona = kane epeksergasia sthn vash kai anevase thn photo - allios mhn kaneis tipota..

Κώδικας: Επιλογή όλων

  	$tmp = $_FILES['file']['name']; 

if($tmp !='') {

unlink("images$data[image]");//svhneis thn palia photo

kane epeksergasia sthn vash kai anevase thn photo

} 

else 

{ echo '';}

Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Διαγραφή υπάρχουσας εικόνας και upload άλλης

Δημοσίευση από korgr » 13 Μάιος 2009 19:59

fafos εχω την εντυπωση πως η τιμη ενος input type=file οταν δεν επιλεξουμε αρχειο δεν ειναι κενη αλλα "none". Δεν εχω χρονο τωρα να το δοκιμασω αλλα κατι τετοιο θυμαμαι...
Πιθανον να κανω λαθος αλλα ας αποκλειστει η περιπτωση καλου κακου.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6230
Εγγραφή: 30 Νοέμ 2004 03:09

Διαγραφή υπάρχουσας εικόνας και upload άλλης

Δημοσίευση από fafos » 13 Μάιος 2009 22:44

korgr έγραψε:fafos εχω την εντυπωση πως η τιμη ενος input type=file οταν δεν επιλεξουμε αρχειο δεν ειναι κενη αλλα "none". Δεν εχω χρονο τωρα να το δοκιμασω αλλα κατι τετοιο θυμαμαι...
Πιθανον να κανω λαθος αλλα ας αποκλειστει η περιπτωση καλου κακου.
to douleuo se polles mou functions xoris provlhma.. alla opos les mporei na apokleisi kai auto to endexomeno:

if($tmp !='' || $tmp !='none') {
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
zekia
Δημοσιεύσεις: 146
Εγγραφή: 04 Μάιος 2004 16:38
Τοποθεσία: thessaloniki

Διαγραφή υπάρχουσας εικόνας και upload άλλης

Δημοσίευση από zekia » 14 Μάιος 2009 16:36

δοκίμασα και τα δυο αλλά δυστυχώς ο έλεγχος φαίνεται να μη λειτουργεί και ο κώδικας λειτουργεί σε κάθε περίπτωση. Η παλιά εικόνα διαγράφεται είτε επιλέξω άλλη είτε όχι. Το Unlink δηλαδή εφαρμόζεται σε κάθε περίπτωση.

αυτός είναι ο κώδικάς μου:

Κώδικας: Επιλογή όλων

<input name="image" type="file"/>
<input name="image_name" type="hidden" value="<?php echo $row_this_machine&#91;'code'&#93;;?>" />

<?php
			//define a maxim size for the uploaded images in Kb
			define &#40;"MAX_SIZE","100"&#41;;
			
			//This function reads the extension of the file. It is used to determine if the file is an image by checking the extension.
			function getExtension&#40;$str&#41; &#123;
			$i = strrpos&#40;$str,"."&#41;;
			if &#40;!$i&#41; &#123; return ""; &#125;
			$l = strlen&#40;$str&#41; - $i;
			$ext = substr&#40;$str,$i+1,$l&#41;;
			return $ext;
			&#125;
			
			//This variable is used as a flag. The value is initialized with 0 &#40;meaning no error found&#41; and it will be changed to 1 if an errro occures. If the error occures the file will not be uploaded.
			$errors=0;
			//checks if the form has been submitted
			if&#40;isset&#40;$_POST&#91;'submit'&#93;&#41;&#41;
			&#123;
				//reads the name of the file the user submitted for uploading
				$image=$_FILES&#91;'image'&#93;&#91;'name'&#93;;
				//if it is not empty
				if&#40;$image !='' || $image !='none'&#41;//if &#40;$image&#41;
				&#123;
					unlink&#40;"../images/machines/".$row_this_machine&#91;'image'&#93;.".jpg"&#41;;
					//get the original name of the file from the clients machine
					$filename = stripslashes&#40;$_FILES&#91;'image'&#93;&#91;'name'&#93;&#41;;
					//get the extension of the file in a lower case format
			
					$extension = getExtension&#40;$filename&#41;;
					$extension = strtolower&#40;$extension&#41;;
					//if it is not a known extension, we will suppose it is an error and will not upload the file, otherwize we will do more tests
					if &#40;&#40;$extension != "jpg"&#41; && &#40;$extension != "jpeg"&#41; && &#40;$extension != "png"&#41; && &#40;$extension != "gif"&#41;&#41;
					&#123;
						//print error message
						echo '<h3>Μη έγκυρος τύπος αρχείου!</h3>';
						$errors=1;
					&#125;
					else
					&#123;
						//get the size of the image in bytes
						//$_FILES&#91;'image'&#93;&#91;'tmp_name'&#93; is the temporary filename of the file in which the uploaded file was stored on the server
						$size=filesize&#40;$_FILES&#91;'image'&#93;&#91;'tmp_name'&#93;&#41;;
						
						
						//we will give an unique name, for example the time in unix time format
						
						
						$img_num1 = $img_num - 1;
						$image_name1= $_POST&#91;'image_name'&#93;.'.'.$extension;
						
						//the new name will be containing the full path where will be stored &#40;images folder&#41;
						$newname="../images/machines/".$image_name1;
						//we verify if the image has been uploaded, and print error instead
						$copied = copy&#40;$_FILES&#91;'image'&#93;&#91;'tmp_name'&#93;, $newname&#41;;
						if &#40;!$copied&#41;
						&#123;
							echo '<h1>Copy unsuccessfull!</h1>';
							$errors=1;
						&#125;
					&#125;
				&#125;
				else
				&#123; echo '';&#125; 
				
			&#125;
			
			
			//If no errors registred, print the success message
			if&#40;isset&#40;$_POST&#91;'submit'&#93;&#41; && !$errors&#41;
			&#123;
			echo "<h3><strong>H νέα εικόνα αποθηκεύτηκε με επιτυχία!</h3>";
			
			&#125;
			
			?>
Αν δεν επιλέξω κάποια άλλη εικόνα στο πεδίο file, και υποβάλλω τη φόρμα, το παλιό αρχείο εικόνας διαγράφεται απο τον server και εκτυπώνεται το "Μη έγκυρος τύπος αρχείου" απο τον php κώδικα.

Κάνω κάτι λάθος;

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6230
Εγγραφή: 30 Νοέμ 2004 03:09

Διαγραφή υπάρχουσας εικόνας και upload άλλης

Δημοσίευση από fafos » 14 Μάιος 2009 17:14

vale ena echo $image; meta to $image=$_FILES['image']['name']; kai prospathise na steileis thn forma xoris na anevazeis eikona.. pes mas an grapsei kati...
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
zekia
Δημοσιεύσεις: 146
Εγγραφή: 04 Μάιος 2004 16:38
Τοποθεσία: thessaloniki

Διαγραφή υπάρχουσας εικόνας και upload άλλης

Δημοσίευση από zekia » 14 Μάιος 2009 17:27

όχι δεν εμφανίζει κάτι. Και λειτουργεί ακριβώς όπως και πριν.

στο php manual γράφει:
"If no file is selected for upload in your form, PHP will return $_FILES['userfile']['size'] as 0, and $_FILES['userfile']['tmp_name'] as none. "

Δεν καταλαβαίνω γιατί ο έλεγχος αποτυγχάνει..

Δοκίμασα και
if ($image)
αλλά πάλι τα ίδια

Άβαταρ μέλους
zekia
Δημοσιεύσεις: 146
Εγγραφή: 04 Μάιος 2004 16:38
Τοποθεσία: thessaloniki

Διαγραφή υπάρχουσας εικόνας και upload άλλης

Δημοσίευση από zekia » 14 Μάιος 2009 18:25

τελικά βρήκα κάτι που να δουλεύει...
if(strlen($image)!=0)

είναι η λύση :)

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης