upload image σε πεδίο της mysql

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

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

Απάντηση
Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

upload image σε πεδίο της mysql

Δημοσίευση από vassilism » 11 Ιούλ 2007 01:30

Γεια σας παιδία.
Γνωρίζει κάποιος αν γίνετε upload image σε πεδίο της mysql?
Δηλαδή θέλω να αποθηκεύω μια εικόνα στην βάση δεδομένων.
Αν θέλετε γίνετε λίγο αναλυτικοί γιατί είμαι αρχάριος στην php.

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

upload image σε πεδίο της mysql

Δημοσίευση από soteres2002 » 11 Ιούλ 2007 03:24

vassilism έγραψε:Γεια σας παιδία.
Γνωρίζει κάποιος αν γίνετε upload image σε πεδίο της mysql?
Δηλαδή θέλω να αποθηκεύω μια εικόνα στην βάση δεδομένων.
Αν θέλετε γίνετε λίγο αναλυτικοί γιατί είμαι αρχάριος στην php.
kaneis ena field tipou BLOB, LONGBLOB, TINYBLOB se ena table stin mysql sou. Meta i oli fasi einai na stileis me POST to arxeio ston server, opote gia auto prepei na grapseis tin HTML form sou kai ena exei ena input field tipou file. Elegxeis an exei apostalei to arxeio meso POST HTTP, kai meta afou breis to path sto local filesystem, kaneis ena INSERT query stin mysql sou pou ektos apo alla pedia, tha prepei na exeis kati san to: insert into images(.., imagedata) values(.., load_file("pathnamestofilesystem"));

den boro na sou olokliroso to script oute na grapso pliri kodika gia to pos ginetai auto oste na to kano post etoimatzidiko, pantos me elaxisti prospathia kai xoris na exeis polles gnoseis gia tin PHP, to script tha sou bgei ok.

episis, to na pernas se mia database eikones kai eidika otan theleis na tis anaktiseis arketa sixna troei arketous porous apo to sistima sou, kai otan iparxoune eidika polles etisis gia anaktisi borei na iparksoun kai problimata..

mia enallaktiki se auto p zitas einai men na kanei upload se kapoio merous tou filesystem sou, alla na kratas ta paths ton eikonon stin database. fisika tha prepei na exeis kai ena unique id, oste na boreis na ksexorizeis ti mia apo tin alli. kai ena hint: epeidi sinithos ta uploads grafontai se kapoio temporary file, kalo einai na kaneis move ta arxeia sou apo auto to temporary directory se kapoio diko sou fakelo (pou ennoeitai oti tha einai kato apo to root directory p blepeei o webserver sou).

simbouli: min ksehnas na sbineis tis eikones p anebainoun ston server, borei na sou gemisei to partition p topothetountai!!!!

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

upload image σε πεδίο της mysql

Δημοσίευση από vassilism » 13 Ιούλ 2007 14:00

Soteres πρώτα απ όλα θα ήθελα να σε ευχαριστήσω για την άμεση απάντηση σου.
Ο δεύτερος τρόπος που μου είπες (να κρατάω μόνο τα paths στην database) μου φαίνεται πολύ καλύτερος και φυσικά το σύστημα δουλεύει πολύ ποιο γρήγορα έτσι.

Το θέμα είναι :
1: Τι είδους πεδίο πρέπει να δηλώσω στην mysql ώστε να κρατάω τα path?
2: Στην φόρμα που θα φτιάξω για το upload, θα πρέπει να φτιάξω ένα php script που να στέλνει στην βάση το path και θα πρέπει να το γράφω ολόκληρο εγώ?

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

upload image σε πεδίο της mysql

Δημοσίευση από soteres2002 » 14 Ιούλ 2007 13:19

prepei mesa se enan pinaka pou tha ftiakseis ena exeis oposdipote ena pedio px to path tipou px TINYTEXT (min orizeis explicitly varchar gia na exeis megalitero euros mias kai ta onomata den exoune fixed mikos). Anagkastika tha prepei na valeis kai ena pedio pou tha pernei monadiki timi gia kathe grammi, to opoio tha to kaneis primary key. Dld tha exeis kati san to:

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

CREATE TABLE imageuploads
(
id int(10) not null auto_increment primary key,
path tinytext
)engine=innodb;
to innodb boreis na to antikatastiseis me myisam, mias kai i database sou borei na min einai i pio teleftaia kai na min ipostirizei kan innodb. Opote vale esi myisam, gia na eisai ok.

to PHP script aplos tha prepei na elegxei an exei ginei i apostoli tou arxeiou (auto to elegxeis meso tou global array $_FILES tis PHP, des to online manual gia perissotera, mazi me paradeigmata), kai an exei ginei pernas apla to path stin MySQL meso enos query (ousiastika pernas mono to pedio path).

Epeidi omos sou eixa pei oti sinithos oi apostoles apothikebontai se ena temporary directory sto filesystem, oi eikones endoxomenos na sbistoun. Gia auto tha prepei na tis metakiniseis me tin sinartisi move_uploaded_file(). des ayto to snippet:

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

<?php
$uploaddir = ''/path/to/uploads";
$uploadfile = $uploaddir . basename&#40;$_FILES&#91;'upfile'&#93;&#91;'name'&#93;&#41;;

if &#40;move_uploaded_file&#40;$_FILES&#91;'upfile'&#93;&#91;'tmp_name'&#93;, $uploadfile&#41;&#41; &#123;
   echo "File is valid, and was successfully uploaded.\n";
&#125; else &#123;
   echo "Possible file upload attack!\n";
&#125;

//
// enimerose ti MySQL edo, pernontas tis timi tis $uploadfile
// 
?>
pare auto to snippet etsi, kai ennoeitai "asfalise" to ligo gia na pianei sfalmata ktlp.

ftiaxeneis kai ena HTML form p exei ena pedio me onoma upfile, kai einai tipou file (fisika kai ena koubaki ipobolis) kai eisai ok. :wink:

Άβαταρ μέλους
papatzas
Δημοσιεύσεις: 227
Εγγραφή: 03 Δεκ 2005 14:23

upload image σε πεδίο της mysql

Δημοσίευση από papatzas » 14 Ιούλ 2007 14:11

Αν κατάλαβα καλα.. γιατί να καταχωρεί το Path στη βάση, σε περίπτωση που θα ήθελε να αλλάξει την ονομασία ενός φακέλου-υποφακέλου για άγνωστη αιτία? , δεν είναι προτιμότερο να προσθέτει στη βάση μόνο την ονομασία και το extension του file ?
:-)

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

upload image σε πεδίο της mysql

Δημοσίευση από vassilism » 14 Ιούλ 2007 17:23

Ρε παιδία αυτήν τη στιγμή το δουλεύω και έχω ένα πρόβλημα και μια απορία.

1: Το path πρέπει να γραφτεί τύπου:

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

$upload_path = 'http&#58;//www.lernijuices.com/fotos/';
Με την μεταβλητή $upload_path μου το περνάει σωστά στην βάση αλλά δεν ανεβάζει την εικόνα.
Μήπως είναι λάθος η σύνταξη?
Αν βάλω:

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

$upload_path = $_SERVER&#91;'DOCUMENT_ROOT'&#93; . "/fotos/";
Μου ανεβάζει την εικόνα αλλά έχω πρόβλημα στο path στη βάση.

2: Όταν καλώ εγγραφές από την βάση θέλω να μου εμφανίζει την εικόνα και όχι το path της εικόνας.

Μήπως είναι λάθος ο τρόπος και χρειάζεται να αποθηκεύω την εικόνα στην βάση?

Άβαταρ μέλους
papatzas
Δημοσιεύσεις: 227
Εγγραφή: 03 Δεκ 2005 14:23

upload image σε πεδίο της mysql

Δημοσίευση από papatzas » 14 Ιούλ 2007 17:29

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

print "<img src=".$upload_path."/".$row&#91;thumbnail&#93;." />";
:-)

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

upload image σε πεδίο της mysql

Δημοσίευση από vassilism » 14 Ιούλ 2007 17:34

Δεν το κατάλαβα με την εντολή

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

print "<img src=".$upload_path."/".$row&#91;thumbnail&#93;." />";
τι να κάνω?

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

upload image σε πεδίο της mysql

Δημοσίευση από vassilism » 14 Ιούλ 2007 21:49

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

upload.php

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

<?php 
       // 
      	$upload_path = $_SERVER&#91;'DOCUMENT_ROOT'&#93; . "/fotos/";
		$upload_url = "http&#58;//www.lernijuices.com/fotos/";
	  // 
    
   if &#40;count&#40;$_FILES&#91;'file'&#93;&#41;&#41; &#123; 
      $tmp_name = $_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;; 
      $name = $_FILES&#91;'file'&#93;&#91;'name'&#93;; 
      $size = $_FILES&#91;'file'&#93;&#91;'size'&#93;; 
      $size = &#40;$size >= 5024&#41; ? floor&#40;$size / 5024&#41; . "kbytes" &#58; $size . "bytes"; 
       
    
         if &#40;file_exists&#40;$upload_path . "/" . $name&#41;&#41; &#123; 
            echo "Error&#58; File already uploaded..."; 
            exit; 
         &#125; 
         if &#40;move_uploaded_file&#40;$tmp_name,$upload_path . "/" . $_FILES&#91;'file'&#93;&#91;'name'&#93;&#41;&#41; &#123; 
            echo "File uploaded<br /><br />Name&#58; " . $name . "<br />Size&#58; " . $size; 
         &#125; else &#123; 
            echo "Error&#58; Unable to move &#58;&#40;"; 
         &#125; 
      &#125; else &#123; 
         echo "Error&#58; Unable to upload &#58;&#40;"; 
      &#125; 
  
 
    $kodikos = $_POST&#91;"kodikos"&#93;;
 
  			//Create a connection to MySQL and select "my_db" database
$con = mysql_connect&#40;"localhost","user","pas"&#41; 
             or die&#40; 'Could not connect to DB&#58; ' . mysql_error&#40;&#41; &#41;;
mysql_select_db&#40;"lernijui_epafes", $con&#41; or die&#40;mysql_error&#40;&#41;&#41;;
mysql_query&#40;"SET NAMES 'utf8'", $con&#41;;

			
            //Create query
         $query = "insert into imageuploads values &#40;'".$kodikos."','".$upload_url."".$name."'&#41;";    
         $result = mysql_query&#40;$query&#41;; 
          
           &#123; 
                        echo&#40; "<P>&#919; &#949;&#947;&#947;&#961;&#945;&#966;&#942; &#954;&#945;&#964;&#945;&#967;&#969;&#961;&#942;&#952;&#951;&#954;&#949;.</P>" &#41;; 

             &#125; 
  
    
?> 


lista.php

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

<?php

$upload_path = $_SERVER&#91;'DOCUMENT_ROOT'&#93; . "/fotos/";

//Create a connection to MySQL and select "my_db" database
$con = mysql_connect&#40;"localhost","user","pas"&#41; 
             or die&#40; 'Could not connect to DB&#58; ' . mysql_error&#40;&#41; &#41;;
mysql_select_db&#40;"lernijui_epafes", $con&#41; or die&#40; mysql_error&#40;&#41; &#41;;
mysql_query&#40;"SET NAMES 'utf8'", $con&#41;;

            // query        
		
			$result = mysql_query&#40;"SELECT kodikos,path FROM imageuploads "&#41;;

            if &#40;!$result&#41; &#123;

                        echo&#40;"<P> &Euml;&Uuml;&egrave;&iuml;&ograve; &oacute;&ocirc;&ccedil;&iacute; &aring;&ecirc;&ocirc;&Yacute;&euml;&aring;&oacute;&ccedil; &ocirc;&iuml;&otilde; &aring;&ntilde;&ugrave;&ocirc;&THORN;&igrave;&aacute;&ocirc;&iuml;&ograve; &#40;query&#41; &#58; " .

                        mysql_error&#40;&#41; . "</P>"&#41;;

                        exit&#40;&#41;;

            &#125;

$num_results = mysql_num_rows&#40;$result&#41;;
echo "<p>&#914;&#961;&#941;&#952;&#951;&#954;&#945;&#957; ".$num_results." &#949;&#947;&#947;&#961;&#945;&#966;&#941;&#962;</p>";


            // print

            while &#40; $row = mysql_fetch_array&#40;$result&#41; &#41; &#123;

                        echo&#40;"<p>". $row&#91;"kodikos"&#93; ."</p>"&#41;;
						echo&#40;"<p>". $row&#91;"path"&#93; ."</p>"&#41;;
				
						
						

             &#125;
           

?>


Καμιά ιδέα?

Άβαταρ μέλους
tix-3-
Δημοσιεύσεις: 827
Εγγραφή: 25 Μαρ 2004 05:12
Τοποθεσία: Θεσσαλονικη-Καβαλα-βεροια(το τριγωνο της καταρας)
Επικοινωνία:

upload image σε πεδίο της mysql

Δημοσίευση από tix-3- » 15 Ιούλ 2007 05:06

εκει που κανεις echo το Path βαλε ενα <img src = "
Τελευταία επεξεργασία από το μέλος tix-3- την 15 Ιούλ 2007 06:44, έχει επεξεργασθεί 1 φορά συνολικά.
Αν δεν υπήρχανε οι κνίτες κι'η ηρωίνη...

Prince Elrik
Δημοσιεύσεις: 6
Εγγραφή: 24 Απρ 2006 16:51

upload image σε πεδίο της mysql

Δημοσίευση από Prince Elrik » 15 Ιούλ 2007 05:11

Mε την προϋπόθεση ότι στην βάση αποθηκεύεις το όνομα μαζί με την κατάληξη της εικόνας (για παράδειγμα image1.jpg) μπορείς να χρησιμοποιήσεις στο σημείο εδώ:

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

echo&#40;"<p>". $row&#91;"path"&#93; ."</p>"&#41;;
αυτό

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

echo&#40;"<p><img src=fotos/".$row&#91;"path"&#93; ." alt='' ></p>"&#41;;
όπου fotos είναι ο φάκελος των φωτογραφίων σου, αν το path είναι διαφορετικό το προσαρμόζεις ανάλογα, και αμα θες ρυθμίζεις και το alt.

--edit--
με πρόλαβε ο φίλος tix-3-
--/edit--


Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

upload image σε πεδίο της mysql

Δημοσίευση από vassilism » 17 Ιούλ 2007 16:31

Θα ήθελα να σας ευχαριστήσω όλους για τις απαντήσεις σας.
Πρόσθεσα την γραμμή που μου είπατε και το script δουλεύει μια χαρά.

Τώρα προσπαθώ να κάνω link το path

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

while &#40; $row = mysql_fetch_array&#40;$result&#41; &#41; 
                &#123;

                        echo&#40;"<p>foto&#58;". $row&#91;"kodikos"&#93; ."</p>"&#41;;
		echo&#40;"<p>". $row&#91;"path"&#93; ."</p>"&#41;;					
		echo&#40;"<p><img src=".$row&#91;"path"&#93; ." ></p>"&#41;;
		echo&#40;"<p><a href=".$row&#91;"path"&#93; ." ></p>"&#41;;

                 &#125;
Το πρόβλημα είναι ότι μου τα κάνει όλα link ενώ εγώ θέλω να μου κάνει link μόνο το path.
Μήπως φταίει η while?

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

upload image σε πεδίο της mysql

Δημοσίευση από soteres2002 » 17 Ιούλ 2007 17:36

vassilism έγραψε: Τώρα προσπαθώ να κάνω link το path

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

while &#40; $row = mysql_fetch_array&#40;$result&#41; &#41; 
                &#123;

                        echo&#40;"<p>foto&#58;". $row&#91;"kodikos"&#93; ."</p>"&#41;;
		echo&#40;"<p>". $row&#91;"path"&#93; ."</p>"&#41;;					
		echo&#40;"<p><img src=".$row&#91;"path"&#93; ." ></p>"&#41;;
		echo&#40;"<p><a href=".$row&#91;"path"&#93; ." ></p>"&#41;;

                 &#125;
einai logiko na sou bgazei link, afou den exeis klisei to tag <a>. Me liga logia, tha eprepe na kaneis auto:

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

while &#40; $row = mysql_fetch_array&#40;$result&#41; &#41; 
                &#123;

                        echo&#40;"<p>foto&#58;". $row&#91;"kodikos"&#93; ."</p>"&#41;;
		echo&#40;"<p>". $row&#91;"path"&#93; ."</p>"&#41;;					
		echo&#40;"<p><img src=".$row&#91;"path"&#93; ." ></p>"&#41;;
		echo&#40;"<p><a href=".$row&#91;"path"&#93; ." >&#123;$row&#91;"path"&#93;&#125;</a></p>"&#41;;

                 &#125;

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

upload image σε πεδίο της mysql

Δημοσίευση από vassilism » 18 Ιούλ 2007 16:38

Σευχαριστώ soteres.
Τελικά ήταν πολύ εύκολο.

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

Μήπως μπορεί κάποιος να βοηθήσει?

Upload.php

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

<?php 
       // 
      	$upload_path = $_SERVER&#91;'DOCUMENT_ROOT'&#93; . "/fotos/";
                $upload_url = "http&#58;//www.lernijuices.com/fotos/";
      // 
    
   if &#40;count&#40;$_FILES&#91;'file'&#93;&#41;&#41; &#123; 
      $tmp_name = $_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;; 
      $name = $_FILES&#91;'file'&#93;&#91;'name'&#93;; 
      $size = $_FILES&#91;'file'&#93;&#91;'size'&#93;; 
      $size = &#40;$size >= 19024&#41; ? floor&#40;$size / 19024&#41; . "kbytes" &#58; $size . "bytes"; 
   
    
    if &#40;move_uploaded_file&#40;$tmp_name,$upload_path . "/" . $_FILES&#91;'file'&#93;&#91;'name'&#93;&#41;&#41;
     &#123; 
        echo "&#932;&#959; &#945;&#961;&#967;&#949;&#943;&#959; &#954;&#945;&#964;&#945;&#967;&#969;&#961;&#942;&#952;&#951;&#954;&#949;.<br /><br />&#908;&#957;&#959;&#956;&#945; &#945;&#961;&#967;&#949;&#943;&#959;&#965;&#58; " . $name . "<br />&#924;&#941;&#947;&#949;&#952;&#959;&#962;&#58; " . $size; 
     &#125; 
	 else //Den epilexthike arxeio
	 &#123; 
        echo "&#916;&#949;&#957; &#949;&#960;&#953;&#955;&#941;&#958;&#945;&#964;&#949; &#945;&#961;&#967;&#949;&#943;&#959;.<br />"; 
     &#125; 
     &#125; 
	 else //Adinati kataxorisi 
	 &#123; 
         echo "&#916;&#949;&#957; &#949;&#943;&#957;&#945;&#953; &#948;&#965;&#957;&#945;&#964;&#942; &#951; &#954;&#945;&#964;&#945;&#967;&#974;&#961;&#951;&#963;&#951; &#964;&#959;&#965; &#945;&#961;&#967;&#949;&#943;&#959;&#965;."; 
     &#125; 
  
 
        $kodikos = $_POST&#91;"kodikos"&#93;;
		 
    	//Create a connection to MySQL and select "my_db" database
        $con = mysql_connect&#40;"localhost","user","****"&#41; 
        or die&#40; 'Could not connect to DB&#58; ' . mysql_error&#40;&#41; &#41;;
        mysql_select_db&#40;"lernijui_epafes", $con&#41; or die&#40;mysql_error&#40;&#41;&#41;;
        mysql_query&#40;"SET NAMES 'utf8'", $con&#41;;

			
         //Create query        
		 $query = "insert into imageuploads values &#40;'".$kodikos."','".$upload_url."".$name."'&#41;"; 
		 $result = mysql_query&#40;$query&#41;; 
            

           &#123; 
		  
              echo&#40; "<P>&#919; &#949;&#947;&#947;&#961;&#945;&#966;&#942; &#954;&#945;&#964;&#945;&#967;&#969;&#961;&#942;&#952;&#951;&#954;&#949;.</P>" &#41;; 

           &#125;     
?> 

Απάντηση

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

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

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