Portal > Foren > PHP > PHP-Programmierung > Ich bekomme Thumbnail Funktion von Jann Hendrik nicht zum laufen!
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 15.01.2008, 18:02 Nach oben    #1
Neuer Benutzer
 
Registriert seit: 15.01.2008
Beiträge: 4
Standard Ich bekomme Thumbnail Funktion von Jann Hendrik nicht zum laufen!

Hallo ich ahbe mir den Code von dem Tutorial raus kopiert. Verstehe soweit auch was da passiert nur bringe ich es nicht zum laufen. Bekomme eine Fehlermeldung. Ich gebe mal den kompletten Code und die Fehlermeldung.

PHP-Code:
<?php
function mkthumb($pic,     // Dateiname
                   
$img_width  "100",       // max. Größe in x-Richtung
                   
$img_height "100",       // max. Größe in y-Richtung
                   
$folder_scr "org",      // Ordner der normalen Bilder
                   
$des_src    "thumb")    // Ordner der Thumbs
  
{
    
// Größe und Typ ermitteln
    
list($src_width$src_height$src_typ) = getimagesize($folder_scr."/".$pic);

    
// neue Größe bestimmen
    
if($src_width >= $src_height)
    {
      
$new_image_width $img_width;
      
$new_image_height $src_height $img_width $src_width;
    }
    if(
$src_width $src_height)
    {
      
$new_image_height $img_width;
      
$new_image_width $src_width $img_height $src_height;
    }

    if(
$src_typ == 1)     // GIF
    
{
      
$image imagecreatefromgif($folder_scr."/".$pic);
      
$new_image imagecreate($new_image_width$new_image_height);
      
imagecopyresampled($new_image$image0000$new_image_width,$new_image_height$src_width$src_height);
      
imagegif($new_image$des_src."/".$pic100);
      
imagedestroy($image);
      
imagedestroy($new_image);
      return 
true;
    }
    elseif(
$src_typ == 2// JPG
    
{
      
$image imagecreatefromjpeg($folder_scr."/".$pic);
      
$new_image imagecreatetruecolor($new_image_width$new_image_height);
      
imagecopyresampled($new_image$image0000$new_image_width,$new_image_height$src_width$src_height);
      
imagejpeg($new_image$des_src."/".$pic100);
      
imagedestroy($image);
      
imagedestroy($new_image);
      return 
true;
    }
    elseif(
$src_typ == 3// PNG
    
{
      
$image imagecreatefrompng($folder_scr."/".$pic);
      
$new_image imagecreatetruecolor($new_image_width$new_image_height);
      
imagecopyresampled($new_image$image0000$new_image_width,$new_image_height$src_width$src_height);
      
imagepng($new_image$des_src."/".$pic);
      
imagedestroy($image);
      
imagedestroy($new_image);
      return 
true;
    }
    else
    {
      return 
false;
    }
}



$bild_result mysql_query("Select * From $tab_bild where catid='".strip_tags(mysql_real_escape_string($_GET['catid']))."'")or die(mysql_error());

$i=1;
while(
$bild_row = @mysql_fetch_array($bild_result)){
        
        
$bild_id        =    $bild_row['id'];
        
$bild_catid        =    $bild_row['catid'];
        
$bild_bild        =    $bild_row['bild'];
        
$bild_view        =    $bild_row['view'];

    
$pic $bild_bild;
        
if(
$i==1){echo "<tr>";}
echo
"        
<td>
<table cellspacing=\"0\" cellpadding=\"0\" border=\"1\" width=\"140\">
<tr>
<td colspan=\"3\" align=\"center\">1</td>
</tr>
<tr>
<td width=\"10\">2</td>
<td width=\"120\" align=\"center\">
<a href=\"javascript:window.open('show_pic.php?id="
.$bild_row['id']."','fenster','width=600,height=500,left=250,top=150');void(0)\">
"
;

/*
echo mkthumb($pic,     // Dateiname
             $img_width  = "100",       // max. Größe in x-Richtung
             $img_height = "100",       // max. Größe in y-Richtung
             $folder_scr = "org",      // Ordner der normalen Bilder
             $des_src    = "thumb");
*/

echo "".$des_src."/".$pic."";
echo
"
</a>
</td>
<td width=\"10\">3</td>
</tr>
<tr>
<td colspan=\"3\" align=\"center\">4</td>
</tr>
</table
</td>
"
;
if(
$i==3) {echo "</tr>";$i=0;}
$i++;
}
?>
</table>

Ich hoffe sehr das mir jemand helfen kann. Vielen Dank MFG der Litter

Geändert von litterauspirna (15.01.2008 um 20:26 Uhr)
litterauspirna ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.01.2008, 18:04 Nach oben    #2
Neuer Benutzer
 
Registriert seit: 27.11.2007
Beiträge: 5
Standard

du deklarierst die Funktion innerhalb der Schleife, du kannst sie aber nur einmal deklarieren. Einfach vor der Schleife oder sogar in einer extra Datei deklarieren.
Papst ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.01.2008, 18:40 Nach oben    #3
Neuer Benutzer
 
Registriert seit: 15.01.2008
Beiträge: 4
Standard

Ok dankeschön. Nur jetzt zeigt es mir gar kein Bild mehr an. wie muss ich denn die echo Ausgabe jetzt schreiben? Sorry habe mit Thumbnails noch keine Erfahrung
litterauspirna ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.01.2008, 18:57 Nach oben    #4
Christian W. Achatz
 
Benutzerbild von dr.e.
 
Registriert seit: 05.02.2007
Ort: München
Beiträge: 150
Standard

Hallo litterauspirna,

was wird dir statt dessen angezeigt? Bitte präzisiere deine Posts ein wenig, da es sonst sehr schwer für aussenstehende ist den Code zu debuggen.

An sich denke ich, dass am Schleifenkonstrukt liegt. Man kann in einem Request nicht mehrere und vor allem unterschiedliche Bilder an den Browser senden.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> http://adventure-php-framework.org)!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist gerade online  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.01.2008, 19:01 Nach oben    #5
Neuer Benutzer
 
Registriert seit: 15.01.2008
Beiträge: 4
Standard

Ich habe den Code noch mal überarbeitet und bekomme keine Fehlermeldung mehrm,aber es gibt mir kein Bild aus sondern da steht nur die Bilddatei. Irgendwas mache ich bei der echo Ausgabe flasch,ich komme aber einfach nicht dahinter. In den Ordner thumb werden die Beilder aber auch geschrieben.

Geändert von litterauspirna (15.01.2008 um 20:31 Uhr)
litterauspirna ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.01.2008, 20:43 Nach oben    #6
Neuer Benutzer
 
Registriert seit: 15.01.2008
Beiträge: 4
Standard

Warum schreibt er mir nun keine Bilder mehr in den Ordner thumb? Ich verzweifel langsam. erst schreibt er sie rein aber gibt sie net aus,dann gab er sie aus und schreibt nun keine mehr rein!

PHP-Code:
<?php
function mkthumb($pic,     // Dateiname
                   
$img_width  "100",       // max. Größe in x-Richtung
                   
$img_height "100",       // max. Größe in y-Richtung
                   
$folder_scr "org",      // Ordner der normalen Bilder
                   
$des_src    "thumb")    // Ordner der Thumbs
  
{
    
// Größe und Typ ermitteln
    
list($src_width$src_height$src_typ) = getimagesize($folder_scr."/".$pic);

    
// neue Größe bestimmen
    
if($src_width >= $src_height)
    {
      
$new_image_width $img_width;
      
$new_image_height $src_height $img_width $src_width;
    }
    if(
$src_width $src_height)
    {
      
$new_image_height $img_width;
      
$new_image_width $src_width $img_height $src_height;
    }

    if(
$src_typ == 1)     // GIF
    
{
      
$image imagecreatefromgif($folder_scr."/".$pic);
      
$new_image imagecreate($new_image_width$new_image_height);
      
imagecopyresampled($new_image$image0000$new_image_width,$new_image_height$src_width$src_height);
      
imagegif($new_image$des_src."/".$pic100);
      
imagedestroy($image);
      
imagedestroy($new_image);
      return 
true;
    }
    elseif(
$src_typ == 2// JPG
    
{
      
$image imagecreatefromjpeg($folder_scr."/".$pic);
      
$new_image imagecreatetruecolor($new_image_width$new_image_height);
      
imagecopyresampled($new_image$image0000$new_image_width,$new_image_height$src_width$src_height);
      
imagejpeg($new_image$des_src."/".$pic100);
      
imagedestroy($image);
      
imagedestroy($new_image);
      return 
true;
    }
    elseif(
$src_typ == 3// PNG
    
{
      
$image imagecreatefrompng($folder_scr."/".$pic);
      
$new_image imagecreatetruecolor($new_image_width$new_image_height);
      
imagecopyresampled($new_image$image0000$new_image_width,$new_image_height$src_width$src_height);
      
imagepng($new_image$des_src."/".$pic);
      
imagedestroy($image);
      
imagedestroy($new_image);
      return 
true;
    }
    else
    {
      return 
false;
    }
}



$bild_result mysql_query("Select * From $tab_bild where catid='".strip_tags(mysql_real_escape_string($_GET['catid']))."'")or die(mysql_error());

$i=1;
while(
$bild_row = @mysql_fetch_array($bild_result)){
        
        
$bild_id        =    $bild_row['id'];
        
$bild_catid        =    $bild_row['catid'];
        
$bild_bild        =    $bild_row['bild'];
        
$bild_view        =    $bild_row['view'];

    
$pic $bild_bild;
        
if(
$i==1){echo "<tr>";}
echo
"        
<td>
<table cellspacing=\"0\" cellpadding=\"0\" border=\"1\" width=\"140\">
<tr>
<td colspan=\"3\" align=\"center\">1</td>
</tr>
<tr>
<td width=\"10\">2</td>
<td width=\"120\" align=\"center\">
<a href=\"javascript:window.open('show_pic.php?id="
.$bild_row['id']."','fenster','width=600,height=500,left=250,top=150');void(0)\">
"
;
$folder_scr="org";
$img_width  "100";       // max. Größe in x-Richtung
$img_height "100";       // max. Größe in y-Richtung
$folder_scr "org";      // Ordner der normalen Bilder
$des_src    "thumb";

echo 
"<img src=\"".$des_src."/".$pic."\"";

echo
"
</a>
</td>
<td width=\"10\">3</td>
</tr>
<tr>
<td colspan=\"3\" align=\"center\">4</td>
</tr>
</table
</td>
"
;
if(
$i==3) {echo "</tr>";$i=0;}
$i++;
}
?>
</table>

Geändert von litterauspirna (15.01.2008 um 21:07 Uhr)
litterauspirna ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.01.2008, 07:47 Nach oben    #7
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.381
Standard

Ich kann das bei mir nicht nachvollziehen, da ich nicht weiß, welche Daten bei dir in der Datenbank stecken.

Wenn du den Aufbau der Tabelle sowie ein paar Datensätze hier posten würdest, dann könnte ich das mal ausprobieren.


Wenn Probleme auftauchen, die man nicht nachvollziehen kann, dann sind diese oftmals in der Logik des Programmaufbaus begründet.
Wenn das nicht der Fall ist, dann könnten Fehlermeldungen hilfreich sein. Diese unterdrückst du jedoch mit dem @ vor dem mysql_fetch_array.


Daher hier mal die folgenden 3 Hinweise:

error_reporting
Du solltest zu Beginn des Skriptes folgendes stehen haben:
PHP-Code:
<?php
  error_reporting
(E_ALL);
?>
Dann werden dir Fehler im PHP-Code angezeigt. Dann weißt du, was du noch beseitigen musst.
http://de2.php.net/error_reporting
Ebenso kann man das auch in die config-Datei schreiben, wenn diese auf jeder Seite zu Beginn eingebunden wird.
Mögliche Fehler die dann auftreten und wie man sie beheben kann:
Notice: Use of undefined constant ...
Notice: Undefined variable ...


mysql_error
Man sollte bei kritischen Anwendungen immer mysql_error() verwenden. Manchmal ist es ggf. besser darauf zu verzichten, beim debuggen aber sollte es imho dabei sein! Etwa so:
PHP-Code:
<?php
  $sql 
"SELECT
              `feldname`, `nocheinfeldname`, `undnochfeldname`
          FROM
              `tabellenname`
          WHERE
              `feldname` LIKE '%suchwort%'
            AND
              `nocheinfeldname` = 'wert'
          ORDER BY
              `undnochfeldname` ASC
          LIMIT
              0 , 30"
;
  
$result mysql_query($sql) or exit('<h2>Fehler</h2>sql-querry: '$sql.'<br />error: '.mysql_error());
  
// ...
?>
exit
mysql_error


Fehlerunterdrückung
Ein @ vor einer Funktion sorgt dafür, dass die Fehler, die man auf andere Weise auffangen sollte, nicht angezeigt werden.

Zum debuggen (also dem Auffinden von Fehlern) ist das absolut destruktiv.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.01.2008, 09:58 Nach oben    #8
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Unabhängig vom konkreten Fehler: Wie wäre es mal mit „ausklammern“?

PHP-Code:
<?php

    
...

    
$aTypes = array(
        
=> 'gif',
        
=> 'jpeg',
        
=> 'png' 
    
);

    if (!
array_key_exists($src_typ$aTypes))
        return 
false;

    
$sType $aTypes[$scr_typ];

    
$sCreateFunction 'imagecreatecreatefrom' $sType;
    
$sOutputFunction 'image' $sType;

    
$rImage    call_user_func($sCreateFunction"$folder_scr/$pic");
    
$rNewImage imagecreatetruecolor($new_image_width$new_image_height);

    
imagecopyresampled($rNewImage$rImage0000$new_image_width,$new_image_height$src_width$src_height);

    
call_user_func($sOutputFunction$rNewImage"$des_src/$pic"100);

    
imagedestroy($rImage);
    
imagedestroy($rNewImage);

    return 
true;
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.01.2008, 10:37 Nach oben    #9
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.381
Standard

Zitat:
Zitat von Basti Beitrag anzeigen
Unabhängig vom konkreten Fehler: Wie wäre es mal mit „ausklammern“?
wenn ich das richtig verstehe, dann betrifft das nicht das Problem, sondern ist ein Lösungsansatz die Funktion enorm zu verkürzen.

Sehe ich das richtig?
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.01.2008, 11:53 Nach oben    #10
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Zitat:
Zitat von Jann Hendrik Beitrag anzeigen
Zitat:
Zitat von Basti Beitrag anzeigen
Unabhängig vom konkreten Fehler: Wie wäre es mal mit „ausklammern“?
wenn ich das richtig verstehe, dann betrifft das nicht das Problem, sondern ist ein Lösungsansatz die Funktion enorm zu verkürzen.

Sehe ich das richtig?
Ja. Mit dem Problem hier hat das direkt nichts zu tun, aber da bluten einem doch die Augen, wenn da dreimal hintereinander 7 praktisch identische Zeilen stehen. Solcher Copy`n Paste-Code läd ja die Fehler geradezu ein.

Ob mein Code oben von der Funktion her identisch ist und funktioniert hab ich allerdings jetzt nicht getestet.

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.01.2008, 12:37 Nach oben    #11
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.381
Standard

Zitat:
Zitat von Basti Beitrag anzeigen
jetzt nicht getestet.
Ich kannte die Funktion call_user_func() bisher nicht, so dass ich das nicht nutzen konnte...

Ich werde das aber bei Gelegenheit in das Tutorial einarbeiten.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.01.2008, 18:14 Nach oben    #12
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 597
Standard

Der Gedanke mit call_user_func ist gar so schlecht, wirft aber Probleme mit sich.

1. ein GIF-Bild muss nicht unbedingt mit TrueColor erzeugt werden
2. beim Speichern wird der Parameter zur Qualität Fehler verursachen

Somit sind wir wieder bei der ersten Lösung mit Abfrage
Aber müsste man halt mal ausprobieren.

Geändert von CIX88 (16.01.2008 um 18:23 Uhr)
CIX88 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.01.2008, 08:21 Nach oben    #13
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Zuviele Parameter dürften eigentlich keinen Fehler werfen.


PHP-Code:
<?php

    
...

    
$aTypes = array(
        
=> 'gif',
        
=> 'jpeg',
        
=> 'png'
    
);

    if (!
array_key_exists($src_typ$aTypes))
        return 
false;

    
$sType $aTypes[$scr_typ];

    
$sCreateFunction   'imagecreatecreatefrom' $sType;
    
$sOutputFunction   'image' $sType;
    
$sNewImageFunction 'imagecreate';
    if (
$sType !== 1)
        
$sNewImageFunction .= 'truecolor';

    
$rImage    call_user_func($sCreateFunction"$folder_scr/$pic");
    
$rNewImage call_user_func($sNewImageFunction$new_image_width$new_image_height);

    
imagecopyresampled($rNewImage$rImage0000$new_image_width,$new_image_height$src_width$src_height);

    
call_user_func($sOutputFunction$rNewImage"$des_src/$pic"100);

    
imagedestroy($rImage);
    
imagedestroy($rNewImage);

    return 
true;
Basti

PS:
… immer noch ungetestet.

Geändert von Basti (17.01.2008 um 08:25 Uhr)
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.01.2008, 09:10 Nach oben    #14
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 597
Standard

Komisch, komisch es wird auch kein Fehler angezeigt.
Ich habe es jetzt getestet:
http://www.mediacix.de/code/Thumbnai...-174-code.html

Normalerweise wird bei ImageGIF(source, name, parameter) ein Fehler ausgeworfen, weil es gerade bei GIF keine Parameter gibt. Bei PNG ist es von der PHP-Version anhängig.

Interessant, dass es dennoch ohne Fehler funktioniert!
CIX88 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.01.2008, 11:58