Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

PHP image resizen

Pagina: 1
Acties:
  • 436 views

  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Hallo allemaal,

Ik ben bezig om een foto die geüpload word te rezisen zodat hij op de website op de juiste manier getoond word.
Hiervoor gebruik ik het volgende script:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php      
        $errors = array( );
        ini_set( 'display_errors', 1 );
        error_reporting( E_ALL );
        
        echo "<form action='admin.php' method='post' enctype='multipart/form-data' />                   
                <p><input type='file' name='foto' value='' size='30' /></p>
                
                <p><label>Korte beschrijving:</label><br>
                <input type='text' name='alt' class='field' value='' /></p>
                
                <p><label>Project naam:</label><br>
                <input type='text' name='project' class='field' value='' /></p>
                
                <input type='hidden' name='formtype' value='uploadfile' />
                <p><input type='submit' name='submit_top' class='uploaden' value='Uploaden' /></p>
            </form>";   
        
        $UploadMap = 'images/projecten/';
    
        $FotoNaam = '';
        $MaxFotoSize = 5000000;
        
        $FotoExt = array('.jpg', '.jpeg', '.gif', '.png');      
        $FotoMIME = array ('image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png', 'image/gif');       
    
        if (isset($_POST['submit_top']) &&  isset($_POST['formtype'])) {        
        if (!isset($_FILES['foto']['name'])) {
            echo "<p class='error'>Geen foto geselecteerd.. <span class='close'>X</span></p>";                
        } elseif (empty($_POST['alt'])) {
            echo "<p class='error'>Er moet een beschrijving ingevuld worden! <span class='close'>X</span></p>";
        } elseif (empty($_POST['project'])) {
            echo "<p class='error'>Er moet een project naam ingevuld worden! <span class='close'>X</span></p>";
        } else {
            $Foto = $_FILES['foto']['tmp_name'];
            $FotoNaam = $UploadMap . $Foto['name'];
            //$FotoNaam = $UploadMap . $_FILES['name'];
                    
            if (file_exists($FotoNaam)) {
                echo "<p class='error'>Er bestaat al een foto met deze naam! <span class='close'>X</span></p>";                            
            } else {
                $width = 466;
                $height = 140;
                
                list($width_orig, $height_orig) = getimagesize($Foto);
                
                $ratio_orig = $width_orig/$height_orig;
                
                if ($width/$height > $ratio_orig) {
                   $width = $height*$ratio_orig;
                } else {
                   $height = $width/$ratio_orig;
                }
        
                $image_p = imagecreatetruecolor($width, $height);
                $image = imagecreatefromjpeg($Foto['tmp_name']);
                imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
                
                imagejpeg($image_p, $FotoNaam, 100);    
                
                $alt = empty($_POST['alt']) ? die ("") : mysql_real_escape_string($_POST['alt']);
                $project = empty($_POST['project']) ? die ("") : mysql_real_escape_string($_POST['project']);
                
                $p_query = "INSERT INTO top (src, title, alt) VALUES ('$FotoNaam', '$project', '$alt')";
                $p_result = mysql_query($p_query) or die ("<p class='error'>Error in query: $p_query.<span class='close'>X</span></p>".mysql_error());
                echo "<p class='update'>De gekozen foto is geupload en toegevoegd aan de website! <span class='close'>X</span></p>";

                }
            }   
        }
?>


Echter krijg ik het hiermee niet werkend en word de afbeelding niet gerezised.
Ik heb al verschillende manier geprobeerd met het aanroepen van de file die geupload word etc, echter blijkt niets te werken en weet ik niet wat ik fout doe.

Een ding waar ik onder andere over twijfel is of ik dit wel goed doe:
PHP:
1
2
 $FotoNaam = $UploadMap . $Foto['name'];
//$FotoNaam = $UploadMap . $_FILES['name'];


Ik heb het idee dat de tweede beter is, maar daarbij krijg ik een foto melding.
De eerste werkt wel maar op dit moment krijg ik telkens de error dat de bestandsnaam al in gebruik is.
De volgende error dus:

PHP:
1
2
3
 if (file_exists($FotoNaam))    {
                echo "<p class='error'>Er bestaat al een foto met deze naam! <span class='close'>X</span></p>";                            
            }


Als ik dan in de map kijk waar het geüpload hoort te worden zie ik geen foto's staan.
Iemand nog enig idee wat ik hieraan zou kunnen doen?

Iemand enig idee wat ik fout doe en hoe ik dit kan oplossen?
Ik hoor het graag, bij voorbaat dank!

Verwijderd

Ik zie wel wat er fout gaat ja. Maar dit noem je toch niet debuggen?
De foutmelding die je gegarandeerd krijgt lijkt me erg helder. Je hebt hopelijk al eens nagedacht over de waarde van $FotoNaam? Je krijgt de melding dat "die al bestaat". Maar wat is "die" eigenlijk? Ik weet het wel.

  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Ja dat is
PHP:
1
2
$FotoNaam = $UploadMap . $Foto['name']; 
//$FotoNaam = $UploadMap . $_FILES['name']; 


Dus et volledige path naar de afbeelding!?

  • EagleTitan
  • Registratie: Januari 2004
  • Niet online
PHP:
1
2
3
4
$Foto = $_FILES['foto']['tmp_name']; 
$FotoNaam = $UploadMap . $Foto['name'];
...
$image = imagecreatefromjpeg($Foto['tmp_name']);


spoiler:
Je slaat de tmp_name op in $Foto, maar gezien de rest van je code wil je waarschijnlijk het hele object opslaan (dus $_FILES['foto']).

Dat verklaart ook meteen waarom je steeds dezelfde foutmelding krijgt: je controleert altijd of $UploadMap al bestaat, want $Foto['name'] is een lege variabele.


Wat cheatah zegt dus... :X

[ Voor 26% gewijzigd door EagleTitan op 07-10-2012 20:04 . Reden: Extra duiding ]


  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Nou ik ben door jullie een beetje het overzicht kwijtgeraakt en zie door de bomen het bos niet meer..
Heb het nu op tig verschillende manier geprobeerd maar niks werkt.. Krijg of een hele waslijst met foutmeldingen omdat er geen breedte en hoogte doorgegeven word of weer dezelfde error dat het bestand al bestaat. Kan er niet iemand wat tips geven waar ik extra op moet letten oid of wat ik fout doe?

Zover ben ik nu

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$Foto = $_FILES['foto']['tmp_name']; 
            $Upload = $_FILES['foto'];
            $FotoNaam = $UploadMap . $Foto['name'];
            //$FotoNaam = $UploadMap . $_FILES['name'];
                    
            if (file_exists($FotoNaam)) {
                echo "<p class='error'>Er bestaat al een foto met deze naam! <span class='close'>X</span></p>";                            
            } else {
                $width = 466;
                $height = 140;
                
                list($width_orig, $height_orig) = getimagesize($Foto);
                
                $ratio_orig = $width_orig/$height_orig;
                
                if ($width/$height > $ratio_orig) {
                   $width = $height*$ratio_orig;
                } else {
                   $height = $width/$ratio_orig;
                }
        
                $image_p = imagecreatetruecolor($width, $height);
                $image = imagecreatefromjpeg($Foto);
                imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
                
                imagejpeg($image_p, $FotoNaam, 100);    
                
                $alt = empty($_POST['alt']) ? die ("") : mysql_real_escape_string($_POST['alt']);
                $project = empty($_POST['project']) ? die ("") : mysql_real_escape_string($_POST['project']);
                
                $p_query = "INSERT INTO top (src, title, alt) VALUES ('$FotoNaam', '$project', '$alt')";
                $p_result = mysql_query($p_query) or die ("<p class='error'>Error in query: $p_query.<span class='close'>X</span></p>".mysql_error());
                echo "<p class='update'>De gekozen foto is geupload en toegevoegd aan de website! <span class='close'>X</span></p>";

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 21-11 18:12
Copy / paste eens de foutmeldingen die je allemaal krijgt, want aan "Van alles en nogwat" hebben we echt helemaal niets.

Als je begint met PHP moet je alles in stapjes doen. Voordat je de image gaat resizen ga je eerst de checks e.d. doen. Als dat werkt ga je verder, stapje voor stapje. Een héél script schrijven voor een beginner is leuk, maar dan moet je wel in één keer 300 zaken gaan debuggen.

Deze link wil lik je tevens niet onthouden, staan veel tips in.
Programming FAQ - Algemeen

[ Voor 66% gewijzigd door RedHat op 07-10-2012 21:20 ]


  • EagleTitan
  • Registratie: Januari 2004
  • Niet online
Als je alleen de declaratie van $Foto had aangepast, was je er al grotendeels geweest. Nu maak je calls op een array, waar PHP een string verwacht.

  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Bedankt voor de antwoorden.
Ik moet inderdaad zeggen dat PHP voor mij vaak nog abacadabra is, maar ik het probeer te leren.
Ook bedankt voor de link over het debuggen, ik zal deze aandachtig doorlezen!

Foutmeldingen die ik krijg zijn als volgt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
Warning: getimagesize() expects parameter 1 to be string, array given in link* on line 307

Warning: Division by zero in link* on line 309

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in link* on line 317

Warning: imagecreatefromjpeg() expects parameter 1 to be string, array given in link* on line 318

Warning: imagecopyresampled() expects parameter 1 to be resource, boolean given in link* on line 319

Warning: imagejpeg() expects parameter 1 to be resource, boolean given in *link* on line 321


Deze meldingen krijg ik als ik het volgende heb gedaan:

PHP:
1
2
$Foto = $_FILES['foto'];
            $FotoNaam = $UploadMap . $Foto['name'];


Lines zijn als volgt:
Line 307 =
PHP:
1
list($width_orig, $height_orig) = getimagesize($Foto);

Line 309 =
PHP:
1
$ratio_orig = $width_orig/$height_orig;

Line 317 t/m 319 =
PHP:
1
2
3
$image_p = imagecreatetruecolor($width, $height);
                $image = imagecreatefromjpeg($Foto);
                imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

Line 321 =
PHP:
1
imagejpeg($image_p, $FotoNaam, 100);
EagleTitan schreef op zondag 07 oktober 2012 @ 21:22:
Als je alleen de declaratie van $Foto had aangepast, was je er al grotendeels geweest. Nu maak je calls op een array, waar PHP een string verwacht.
Dit is dus, als ik de fout melding lees ook gelijk waar het fout gaat met strings/arrays. Echter snap ik niet waarom dit is..

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-11 22:23

Creepy

Tactical Espionage Splatterer

Kom op hoor. De foutmeldingen zijn toch echt duidelijk, zeker in combinatie met je code. De eerste geef ik hier alvast weg: $Foto is een ARRAY, en niet een string en getimagesize() werkt niet met een array. Vandaar de melding
"Warning: getimagesize() expects parameter 1 to be string, array given in link* on line 307"
. Rara, waar komen de andere foutmeldingen dan vandaan?... juist...

De rest laat ik toch echt een jezelf over. Dit soort souten zou je toch echt zelf moeten weg kunnen werken i.p.v. dat maar aan ons over te laten.

[ Voor 6% gewijzigd door Creepy op 07-10-2012 22:06 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.