Solved

PHP upload script with MySQL

Posted on 2003-12-09
4
737 Views
Last Modified: 2007-12-19
Hello, I've made an upload script for uploading my images to a database. But in soem strange way it fails. This is my code:

CImageUpload.php
[code]
<?
/**
 * Image Upload Class
 *
 * @author Sander Stad <swstad@xs4all.nl>
 * @version 0.1
 * @copyright Sander Stad
**/

// Importeren van de code van de class CDatabase.
include("classes/CDatabase.php");

class CImageUpload{
      /**
       * @var            $photoFileName            De naam van de afbeelding
       * @var            $photoFileSize            De grootte van de afbeelding
       * @var            $acceptedExtension      Array met de toegelaten extensies
       * @var            $fileNameParts            Data van de verschillende stukken afbeelding url
       * @var            $fileExtension            De extensie van de afbeelding
       * @var            $tempFileName            De locatie van het tijdelijke bestand
       * @var            $photoOriginal            De afbeelding opnieuw gegenereerd
       * @var            $photoThumbNail            De afbeelding naar een miniatuur gemaakt
       * @var            $tempFile                  Tijdelijk locatie voor het opslaan van de afbeelding
       * @var            $srcImage                  De bron waaruit de afbeelding wordt geladen
       * @var            $binaryPhoto            De ingelezen data van de afbeelding
       * @var            $binaryThumbNail      De ingelezen data van de miniatuur
      **/
      var $photoFileName;      // naam van de foto
      var $photoFileSize;      // grootte van de foto
      var $acceptedExtension = array("jpg", "jpeg");      // array van de toegestane extensies
      var $fileNameParts = "";      // data van de verschillende stukken van de foto string
      var $fileExtension = "";      // de extensie van het foto bestand
      var $tempFileName;      // de tijdelijke locatie op de server van het bestand
      var $photoOriginal;            // de data van de originele foto
      var $photoThumbnail;      // de verkleinde versie van de originele foto
      var $tempFile;                  // tijdelijk bestand voor het inladen van de foto
      var $srcImage;                  // de bron van de foto
      var $binaryPhoto;            // de ingelezen data van de foto      
      var $binaryThubmNail;      // binaire versie van de thumbnail
      
      /**
       * Dit is de constructor van deze class. In deze constructor worden een
       * aantal belangrijke variabelen voorzien van waardes van de parameters.
       * In deze cinstructor worden ook de methodes uitgevoerd die nodig zijn
       * voor de balangrijke checks van het geuploade bestand en om het uit-
       * eindelijke afbeeldingsbestand te maken met de miniatuur.
       *
       * @param string       $fileName      Naam van de afbeelding
       * @param string      $fileSize      Grootte van de afbeelding
       * @param string      $tempName      De tijdelijke locatie van de afbeelding
      **/
      function CImageUpload($fileName, $fileSize, $tempName){
            $this->photoFileName = $fileName;
            $this->photoFileSize = $fileSize;
            $this->tempFileName = $tempName;
      }
      
      /**
       * Deze functie scheidt de extensie van de bestandsnaam, zet de
       * extensie in een variabele.
       * Dan wordt er een if statement aangeroepen waarmee gekeken wordt
       * of de desbetreffende extensie toegestaan is.
       * Zo ja dan wordt er een 1 (goed) terug gegeven en anders wordt er
       * een fout gegeven.
       *
       * @return integer      Betekent dat alles goed is gegaan
       * @return string      Betekent dat er iets niet goed is gegaan.
      **/
      function clsCheckExtension(){
            $this->fileNameParts = explode(".", $this->photoFileName);      // haal alles weg van de string voor de "."
            $this->fileExtension = end($this->fileNameParts);      // haal uit het einde van de array de uiteinelijke extensie
            
            // checken of de desbetreffende extensie toegestaan is
            if( !in_array(strtolower($this->fileExtension), $this->acceptedExtension)){
                  die ("deze extensie is niet toegestaan");
            } else{
                  return 1;
            }
      }
      
      /**
       * Functie om de extensie van het bestand terug te geven
       *
       * @return string $fileExtension      De extensie van het geuploadde bestand
      **/
      function clsReturnFileExtension(){
            return $this->fileExtension;
      }
      
      /**
       * Functie voor het teruggeven van de naam van het bestand.
       * Er handig om even te kijken of de class wel goed geinitialseerd is
       *
       * @return string      De naam van het bestand
      **/
      function clsReturnImageFileName(){
            return $this->photoFileName;
      }
      
      /**
       * Functie om de locatie van het tijdelijke bestand op te halen
       *
       * @return string Locatie van het tijdelijke bestand op de server
      **/
      function clsReturnTempImageLocation(){
            return $this->tempFileName;
      }
      
      /**
       * Deze method kijkt of het bestand niet te groot is.
       * Doormiddel van een if statement wordt gekeken of de
       * grootte van de foto geen 0 is en of de foto niet groter
       * is dan 2000000 bytes
       *
       * @return integer      Als alles goed is gegaan komt er een 1 terug
       * @return string      Er is iets fout gegaan. Dit kan of zijn dat er
       *                  geen data is of dat het bestand te groot is
      **/
      function clsCheckSize(){
            if($this->photoFileSize == 0){
                  return "NO_IMAGE_DATA_FAILURE";
            } elseif($this->photoFileSize > 2000000){
                  return "TOO_MUCH_IMAGE_DATA_FAILURE";
            } else{
                  return 1;
            }
      }
      
      /**
       * Deze methode leest het tijdelijke bestand van de server
       * maakt er een afbeeldings bestand van.
       *
       * @return string      De compilatie van de foto is mislukt
      **/
      function clsCreatePhoto(){
            // openen van het tijdelijke bestand op de server in "READ" status
            $this->tempFile = fopen($this->tempFileName, "r");
            // het inlezen van het binary bestand op de server
            $this->binaryPhoto = fread($this->tempFile, filesize($this->tempFileName));
            // als er iets fout gaat dan wordt er een error gegeven
            $old_error_reporting = error_reporting(E_ALL & ~ (E_WARNING));
            // het terugzetten van de afbeelding data vanuit een string
            $this->srcImage = imagecreatefromstring($this->binaryPhoto);
            // mocht er een error zijn, geef dan een error
            error_reporting($old_error_reporting);
            
            // als er iets fout is gegaan in het terug zetten van het bestand
            // dan wordt er een interne foutmelding gegeven in dit script
            if(!$this->srcImage){
                  return "CORRUPT_IMAGE_DATA_FAILURE";
            } else{
                  $this->originalPhoto = $this->srcImage;
            }
      }
      
      /**
       * Deze functie geeft de data van de photo terug. Op deze manier kan de photo
       * naar een ander PHP bestand gekopieerd worden om daar bijvoorbeeld naar de
       * database te kopieren.
       *
       * @return      byte      De afbeelding die opnieuw in elkaar is gezet
      **/
      function clsGetPhoto(){
            $this->originalPhoto;
      }
      
      /**
       * Deze methode verkleind de originele foto naar een thunmbail
       * zodat mensen niet gelijk een lelijke afbeelding zien of veel
       * te lang moeten wachten tot eindelijk de foto verschijnt.
      **/
      function clsCreateThumbNail(){
            $imageWidth = imagesx($this->srcImage);      // verkrijgen van de breedte van de foto
            $imageHeight = imagesy($this->srcImage); // verkrijgen van de hoogte van de foto
            $sizeFactor = 0;      // de factor waarmee de originele photo vermenigvuldigd wordt
            $maxHeight = 100;
            $maxWidth = 100;
            
            // hier wordt gecontroleerd welke factor er gebruikt moet worden
            // om een afbeelding zo te verkleinen dat het allemaal qua
            // proporties gaat.
            if(($imageHeight > $maxHeight) || ($imageWidth > $maxWidth)) {  
                  // als de hoogte groter is dan de breedte
                  if($imageHeight > $maxHeight) {
                        // dan wordt de hoogte gebruikt om aan de $max te komen
                        $sizeFactor = (double) ($maxHeight / $imageHeight);
                } else{
                        // anders wordt de breedte gebruikt om tot de $max te komen
                        $sizeFactor = (double) ($maxWidth / $imageWidth) ;
                }
              }    
            
            // het instellen van de nieuwe hoogte en breedte
              $newWidth = (int) ($imageWidth * $sizeFactor);
              $newHeight = (int) ($imageHeight * $sizeFactor);
            
            // maken van de uiteindelijke thumbnail
            $destImage = imagecreate($newWidth, $newHeight);      // de variabele waar de afbeelding even in geladen wordt
            imagecopyresized($destImage, $this->srcImage, 0, 0, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight);
            
            ob_start();      // starten van het opvangen van de data
            imagejpeg($destImage); // wegschrijven de data naar een bestand of browser
            $this->photoThumbNail = ob_get_contents(); // the raw data van de jpeg
            ob_end_clean(); // leegmaken van de std out zodat andere output niet fout gaat
      }
      
      /**
       * Deze functie geeft de waarde van de net gegenereerde miniatuur terug.
       * Zo kun je gemakkelijk de waardes doorgeven aan andere classes.
       *
       * @return       byte      De miniatuur van de afbeelding      
      **/
      function clsGetThumbNail(){
            return $this->photoThumbNail;
      }
      
      /**
       * Deze functie voert de uiteindelijke opdracht uit om de photo naar de database te
       * kopieren.
       *
       * @param      $title            De titel van de afbeelding
       * @param      $photo            De afbeelding die geupload moet worden
       * @param      $thumbNail      De miniatuur die geupload moet worden
       * @param      $userId            Het gebruikers ID van degene die mag uploaden
       * @param      $userName      De gebruikersnaam voor de database server
       * @param      $userPass      Het wachtwoord voor de database server
       * @param      $hostName      De hostnaam van de database server
       * @param      $database      De database waar hetgeen naar geupload moet worden
      **/
      function clsWriteToDatabase($title, $userId, $userName, $userPass, $hostName, $database){
            $query = "INSERT INTO photo(title, thumbnail, original, user_id) " .
                  "VALUES('$title', '$this->photoThumbNail', '$this->originalPhoto', '$userId');";            // query opzetten
            
            $query2 = "INSERT INTO photo2(kolom1, kolom2) VALUES('$this->photoThumbNail', '$this->originalPhoto');";
            
            echo "$query2";
            
            // Uitvoeren van de constructor van de class CDatabase
            $dbase = new CDatabase($hostName, $userName, $userPass, $database, $query2);
      }
}

?>
[/code]

CDatabase.php
[code]
<?
/**
 * Database Class
 *
 * @author Sander Stad <swstad@xs4all.nl>
 * @version 0.1
 * @copyright Sander Stad
**/
class CDatabase{
      
      function CDatabase($host, $user, $pass, $dbase, $query){
            $connection = mysql_connect($host, $user, $pass);
            mysql_select_db($dbase, $connection);
            mysql_query($query);
            mysql_close($connection);
            echo "Uitvoeren van de query is geslaagd";
      }
      
      function clsExecuteQuery(){
            $connection = mysql_connect($host, $user, $pass);
            mysql_select_db($dbase, $connection);
            mysql_query($query);
      }
      
      function clsClose(){
            mysql_close($this->connection);
      }
      
}

?>
[/code]
0
Comment
Question by:treshr
  • 2
4 Comments
 
LVL 1

Expert Comment

by:Rayni
Comment Utility
Try changing

class CImageUpload{

to

class CImageUpload extends CDatabase {

- Daniel
0
 
LVL 13

Expert Comment

by:lozloz
Comment Utility
i don't see how that would help personally unless you're not calling CDatabase at all.. which leads me to ask where are you creating these objects and what methods are you calling?

loz
0
 

Author Comment

by:treshr
Comment Utility
I call both the constructor from the CimageUpload and the constructor from the Cdatabase.
I've made these because I want to use as less code as possible in other scripts.

But I checked the query and get this out of it:
INSERT INTO photo2(kolom1, kolom2) VALUES('ÿØÿàJFIFÿþ>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀd…"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?óK¯k÷̍s¨‰ Œ À€ã܁Í:?_…Ã%»R‡úÍkIPòØ⟬²3ezñþsX{Hïsoe-¬jÇâ{‚ØšÒÞUô_皘x†?ä öÿ²ÖTvNêcŸZ§{9²vfCž§N÷ØžS¤‡_ÑÑ7ÝéóÃëå8aú‘Vcm;PÓþÙk± ™‡ïó.{ûםK+ÊÛÜ’k¶Ð›oƒäcÈJN?ÞJU#h1ÁÞHõ?=²¨‰U6… :tÛÜø—KÐôèg¸‘ F“g˜èHC‚A uä~µåˆd·Ò®ÖHî$k…XÚFºR9Çã8êsƒÍRñž¹6£a )l³yŒOÙ—@ড়c#'5ò0Ë«{uQì{5ªÓ¨¹_Kž¢|@½ñ‚]Û\ÚA¤q‚dX|ð'`ëÚ|NîPïæ¹½ÄÒYiðÛ4±26†Å]¹Öc˜<²ŸÝð¥‰…yb\ߧs¢‚„)Ùu0J=³ Q•P1•ÎçïM¸el¬bːwËúÔ7RÃ>èX¨qÈnsÉëš®·N„ùj«»ï2ç^ʝ]5èŽ_ewná>Ÿ D¶‘†TîÈ?LY÷úlvÞZË)UÜ¡À<~]kIï–Ë1¡2gp'ñéG‰¥2µœ„ã}ºç©í]4+Tr´ŽZô!ts“éËü%éÇòªrX08 ?­]q¹A%”t\ëZZ"$q•¹@³4ù‹yå,€:¸{]n«ŒokœªšnÇ)"lr 5ÐýûžôVé˜ØÝ#Ÿ¥ yl‡›@~ŠÆ–Ý–âTGUȇ8Í4Âê2΃ð5ãýZ |G±õ‰)~ß:dõúÖ³´Ž?ˆÖÂ]EªË;…^™=ëž½»Šöft þ21Á¯M-)½Ì÷ûÆ»M#À÷$uûH#þúJâÛïÆ» :å"ð#ÝÓÍtR(ÇV9CZKb÷#’V 9ê=ýª¯œ[ äÐãŠé¬|12À…ÙáÜ)fèÀ遞à甶ºcÌ •Ü1¼®lñϸÏÓ¯Ö¸ôZ#µ·-Nj9Áÿ°—LŒÀ4íGO6W/ÉU }22?J¤Çã>µ.‘Q©(£\*MLd;ÊŸ”.sól‘ÀdÙÇ\ç5Nh$¹ÓáòÜ(H·‚Iççp@÷ÿ š™šUVVD+’äpO°ô¬*Ò’Õ3¢dôbìÜ€:ÕÝaÃa°¿ü{¯ Û{Ϋ_ÌCü½z~5£|¨ðYy®£÷+Ã)çùTFN>÷bêEI¨¾¦ŠI\!—ÌcÀ ªáÅbÜ;Úê‹ÎÇ‚WBB€xõÅw0¥É‹mœ{8È+"È¿÷ËWª#¥ä‚CóùògåÛßüóǵuak{I4Î,U%š ºpndãbçE-È{ñüGùš+½F¬Éoq|ìÀ~õ€$g¹­š7·24«´)|• ÅbLËx¡•A·=²h‡x±ÁL sô®YROÞô:ÕgÇÔM]Ã}›àÄ™ÍT·RVB!pN;S$s4à à(ÇN8«Z|ž]½òïÆøãÝûÄ8öéŸÂºmdr_R®ÜÈÃÐúWCᨥ{ÄœäÇh•zí‘ý:ûV´·>Z!v`ÁT ’pq]ÿ‡t«ÍK©fUÜÊ0¤œIüú~ui%Räw`Š¹·o1‰;cÉ9ç'¦;õ±¯Ï`“ámÕD¨åR 0¸õÿúˆª:{É&n#€¼—Iû¦ÚNÒy#ŒàŽk@Ú@°Ë ™FPÉ‚ÀŽpN;ò (§Ëbd×5Ï;Ô,¢»Ö„1Ö蘎NIÈñ9úq\íàjZ2yFž=¹À÷>½ýëÓt GüTž§éI#˜ï/Ù@$1#r†|v5)¹`ï* ¤*®r3ýkz;_S0Æñ8ܤcŸLŠ½ øû+DÐFImÞa8Æ1Óñ¢ãt¬­­±GÓ#ÿ×QÜÛÉ&æÊž€véZs'£2±«àù™/œþKn‡ÊQ§–‘܃ùý*œ‘»êÀÁŒ!ÂyÀ)sè}O°íSMÍA)ï±I͵ê\šÚYÒÚâîp­&Ц2 E?{Œuë׺šÂñ5é°fÞâQR8àdÀéÏL‘šÔ»Õd:†E’ùü¯*>AŽÉã>µ‹¨øwPÔ­îQ'e' áÕ@8çsÔg’jžº!ÇM^‡œO(‘OË÷›y;³ÉíõëUX ‘Ï5Q°ŸO¢¸B§9èjƒ äÆ©XnäMÂŽüj¼ª1ó0#Þ§wP=G|ÕI¥V^•¤LÙ O  aÝGåIÉÀ$œ:šk¬WŒƒŽEh@¤Œð´S€ÀÅ·,I¦#‚Xþ<Ó…°ùÆ:S&qÌÈHÈfó¨Zý!B@ËvçŠå´­¡ÔÜov6ýW;W–ځPß1d‹•éžø\KpîìsŽƒÐfºxu¼S®Á!6¸{ƒÏÍþÏãÈÞ1wF[§ÃÓ¤Ö5"Ûo,6Üa“®ãõì= õã¡—Om#Sœ˜dFäöôÏr:~^µÙÆ>Ίc²à ^6úb£»ÓF§jÖî‰ä2®Jžƒ©­'I5uº"3kNŒÀÓt ë˦¹³w0w2°œçü+jO ªÇö‹§ó à d,F~µoJ‹Sµ·û,vDÌX¡‘H : ãŒÓ®ä¬>Ó#(Îv`ýöæ¹Õ)óh•ŠsÓ]Ìxí-­Á) ÁÏ¥U¿žâ"’Ao!õ|íg¦øw®ŽÐEhKyk#yÔÓüôÇjuÔ°ÌŒfÚÊüu'ñ­$¤Ÿ-¬B¶çŽxéíî´ï>heYË~#ƒ^vÄyÝéœ×¡|UK;G³hY¼×'OlsŸNÕæ&åÛqã®=*#j䬬I8,ç ©€dÛœPió+ã”ǍÀüÙûØ=qú~[”°ùsŒV‹b"íÝéœT|g V——» TÓ^ÉBnÝ´úi…Œü*Y (ÜãIÆh¦Qö½æ?ç³ÿ3UÈ ÍXÔŽuK³ÿMßÿB5XR[ <˜‰fb¨$ú ú/Àz^ðäV́rÊ&¸Éçy À…yÃ=5oý¢d-’yÞÅòƒúŸø {ì6ØÉŸ÷{V]H“!Óå›P™Ýßj  ø֪﷙Xä:œ‘•#×ñ V0(mÉò7¨ÿ ½§Î‘\=G”À«ð ÁpzŽ½ªõHF¶w“Íwq,i,±T^¼úúdúV…õ¬wv¬’¶À>`ùû¤wª6únŸylZ6glá¤\¯=NAùTZMävç˸iÔ. ȯ ü«g-ì3T1I±ˆÝ€xúõê¶Ϙ¡”Ö¦p›œÆNÝß(o½å\÷‹5uÑt›ÆlyhHòÇ…nö»$ð^­ïŒuI7Eˆv] íÈ5În8ëÅ,ŒdrÎı9$õ&·¼¯éþñ5¾¥¨é‚ú(ÈÚ3ÌGpÌŠ:3Ý€p2AÈ W-I8ÅÊ*ﱪÞÇ< –Åh[àcý[ñÿ&¥×uíß_ê¦Ú;oµÊÒ¢ žÜ“êp2r{Õx9ÎRõ¦›qM«0/+ çòªó>Ö$`žOéšsÉÔúŠ†nÞ§çþ4Æ<HG pzõ¢¢Tó#S’=¨ ÔÀ¥Ðÿ¦üê²ò P#Ðþ\2êú° ²Kužà«`èGòí–™ò'‚x¢ŠÚr, d#éEb5ô(Í3yŽ…výÂAÎFzþ_ÐWE°ù{w¶qÜgëéEÏSâ9[OŠÇÊò™ÎýÙÜGl{{׊|c¼ž;{KDr!•‹¸ʁçü¨¢´—Â5¹ãÄç?Z3œ“ÖŠ+2„õ«vüÈúÑED²uÿ€ŸéL˜å”z(¤2vÁÅQ@ÿÙ', 'Resource id #5');

The first part is normal because that's all binary but I don't understand the "Resource id #5". This was suppost to be the original photo I uploaded. What the heck happened with loading the data into a variable.

If someone knows the answer because I've been trying almost everything for the last week and a half.
Thanx in advance.
0
 
LVL 13

Accepted Solution

by:
lozloz earned 125 total points
Comment Utility
you usually see that string when trying to print a resource id from mysql_query rather than readable data from mysql_fetch_array/assoc/row

like
$query = "SELECT column FROM mytable LIMIT 1";
$result = mysql_query($query);
print $result; // returns resource id

you need after that
$row = mysql_fetch_array($result);
print $row["column"]; // returns the column

loz
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Consider the following scenario: You are working on a website and make something great - something that lets the server work with information submitted by your users. This could be anything, from a simple guestbook to a e-Money solution. But what…
Since pre-biblical times, humans have sought ways to keep secrets, and share the secrets selectively.  This article explores the ways PHP can be used to hide and encrypt information.
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now