Jetzt einloggen
kostenlos helfen
Fragen stellen
Punkte sammeln

Beitragsansicht

Bild generieren

  • von Gast
    11.03.2008, 08:37 Uhr
    351 Punkte
    Hiho,

    ich mal wieder

    Ich habe mir folgendes zusammengebastelt:
    PHP-Code:
    <?php

    include ('sqlconfig.inc.php');

    $grafik1 "bild1.PNG";
    $grafik2 "bild2.PNG";
    $grafik3 "bild3.PNG";
    $font "verdana.ttf";
    $font_size 8;


    /* Datenbankverbindung aufbauen */

        
    $connection mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die("Verbindungsversuch fehlgeschlagen");
        
    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht wählen.");
        
        
    $sql = ("SELECT * FROM abteilung"); 
          
    $result mysql_query($sql); 

          while(
    $row mysql_fetch_object($result))
            {
              
    //Header
              
    header("Content-type: image/PNG");
              
    //Grafik einlesen
              
    $img imageCreateFromPNG($grafik3);
              
    //Schriftfarbe
              
    $schwarz imageColorAllocate($img000);
              
    //Grafik erstellen
              
    ImageTTFText($img$font_size01014$schwarz$font"> ".$row->name);
              
    //Ausgeben
              
    imagePNG($img);
              
    //Speicher freigeben
              
    imageDestroy($img);
           }
           
    ?>
    Wie ihr seht, hole ich die Namen der Abteilungen aus einer Datenbank und lasse diese auf einen zuvor definierten Hintergrund schreiben.

    Das Problem allerdings dabei ist, dass immer nur die erste Abteilung (von insgesamt 15 in der DB) auf ein Bild geschrieben wird. Der Rest wird einfach überhaupt nicht angezeigt.

    Bisher habe ich immer alle Daten aus einer DB mit der while-Schleife rausgeholt, die dann solange durchgelaufen ist, bis alle Einträge mindesteins einmal angesprochen wurden.
    Das scheint hier wohl nicht zu funktionieren ?!


    Danke im Voraus
    Grüße


    //edit:
    Ich habe es nun schonmal so weit, dass alle Einträge geschrieben werden. Allerdings leider auf eine Grafik, sodass letzendlich alle Einträge übereinander liegen und man nichts lesen kann
    Das habe ich erreicht, indem ich alles aus der while gepackt habe bis auf ImageTTFtext, also Grafik erstellen.

  • von Gast
    11.03.2008, 09:54 Uhr
    351 Punkte
    versuchs doch mal n bissl anders:

    erstelle eine normale Seite und lasse jeweils die einzelnen Bilder einbinden.

    d.h. mit:
    PHP-Code:
    while(...)
    {
     include(
    'bildgenerator.php?abteilung=XY');

    ich glaube man kann nur ein bild pro Datei erstellen lassen... deswegen spinnt er da a bissl...

  •  
  • von Gast
    11.03.2008, 10:22 Uhr
    351 Punkte
    Danke schonmal für die Antwort

    Habe das nun mal so versucht wie du es gesagt hast (hoffe, habe es richtig verstanden )
    Allerdings kommt bei folgendem Inhalt der Dateien, folgender Fehler:

    index.php
    PHP-Code:
    <?php

    echo "<html>";
    echo 
    "<head>";
    echo 
    "<title>Test</title>";
    echo 
    "</head>";
    echo 
    "<body>";
    echo 
    "<div style='height:800px;width:204px;background:#ec0a0b;float:left;'>";

    /* Hier fängt der PHP-Teil an */

        
    include "sqlconfig.inc.php";

        
    $connection mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die("Verbindungsversuch fehlgeschlagen");
        
    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht wählen.");
        
        
    $sql = ("SELECT id FROM abteilung"); 
          
    $result mysql_query($sql);  


    while(
    $row mysql_fetch_object($result))
    {
    include (
    'abteilungen.php?abteilung='.$row->id);
    }

    /* Hier hört der PHP-Teil auf*/

    echo "</div>";
    echo 
    "</body>";
    echo 
    "</html>";

    ?>
    abteilungen.php
    PHP-Code:
    <?php

    include ('sqlconfig.inc.php');

    $grafik "bild5.PNG";
    $font "verdana.ttf";
    $font_size 8;


    /* Datenbankverbindung aufbauen */

        
    $connection mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die("Verbindungsversuch fehlgeschlagen");
        
    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht wählen.");
        
        
    $sql = ("SELECT * FROM abteilung WHERE id = "$_GET['abteilung']""); 
          
    $result mysql_query($sql);    
        

          while(
    $row mysql_fetch_object($result))
            {
              
    //Header
              
    header("Content-type: image/PNG");
              
    //Grafik einlesen
              
    $img imageCreateFromPNG($grafik);
              
    //Schriftfarbe
              
    $schwarz imageColorAllocate($img999999999);
              
    //Grafik erstellen 
              
    ImageTTFtext($img$font_size01014$schwarz$font,  "> ".$row->name);
              
    //Schrift fett darstellen lassen
              
    ImageTTFtext($img$font_size0914$schwarz$font,  "> ".$row->name);
              
    //Ausgeben
              
    imagePNG($img);
              
    //Speicher freigeben
              
    imageDestroy($img);
           }
              
    ?>
    Die Fehlermeldung
    Code:
    Warning: include(abteilungen.php?abteilung=1) [function.include]: failed to open stream: Invalid argument in C:\Programme\xampp\htdocs\stuff\captcha\Neuer Ordner\index.php on line 23
    
    Warning: include() [function.include]: Failed opening 'abteilungen.php?abteilung=1' for inclusion (include_path='.;C:\Programme\xampp\php\pear\') in C:\Programme\xampp\htdocs\stuff\captcha\Neuer Ordner\index.php on line 23
    
    .... Für alle 15 Einträge die gleiche Fehlermeldung
    Danke!

  • von Gast
    11.03.2008, 10:36 Uhr
    351 Punkte
    ne... so hast du's doppelt gemacht

    ich meinte eigentl dass du gleich den Abteilungsnamen per GET übergibst und in der Bild-Datei keine WHILE-Schleife mehr einbaust!
    ansich is die bei dir ja eh schon sinnlos geworden, aber theoretisch kannst du dir in der Bilddatei dann auch die MySQL-Abfrage sparen!


    arg.. und da hatte ich grad nen gedankl fehler^^
    musst es so machen in der index.php:

    PHP-Code:
    $sql = ("SELECT * FROM abteilung"); 
          
    $result mysql_query($sql);  


    while(
    $row mysql_fetch_assoc($result))
    {
     echo 
    '<img src="abteilungen.php?abteilung='.$row['name'].'" alt="'.$row['name'].'">';



  • von Gast
    11.03.2008, 11:45 Uhr
    351 Punkte
    Super, funktioniert einwandfrei
    Habe beide SQL-Abfragen trotzdem, weil ich das mit der GET-Variable irgendwie nicht schnalle :P Wie dem auch sei, es funktioniert ja!

    Danke erstmal dazu!

    Jetzt habe ich mir überlegt, noch einen hover-Effekt einzubauen.
    Eigentlich ja kein großes Ding. Einfach die Datei nehmen, die das Bild erzeugt und ein anderes Hintergrundbild einpflegen. Schon hat man nen netten Hover.

    So habe ich das dann auch getan. Und nach etwas Tüftelei mit allen " und ' im Code, sieht es nun folgendermaßen aus:

    PHP-Code:
    while($row mysql_fetch_object($result))
    {
     echo 
    '<a href="showabt.php?abteilungen=abt'.$row->id.'" onmouseover="hover'.$row->id.'.src=\'abteilungen_hover.php?abth='.$row->id.'\'" onmouseout="hover'.$row->id.'.src=\'abteilungen.php?abt='.$row->id.'\'" target="content"><img src="abteilungen.php?abt='.$row->id.'" alt="'.$row->name.'" border="0" style="border-bottom:1px solid #f36d6c;" name="hover'.$row->id.'"></a>';

    (wenn ich das mittendrin trennen würde, interpretiert der IE6 einen Zeilenumbruch^^)

    Das Problem ist nun, dass nicht alle Grafiken den hover "annehmen". Die erste geht, dann zwei nicht, dann eine wieder, dann eine nicht, dann gehen wieder zwei und dann vier nicht, dann... Also von den 15 Abteilungen funktioniert bei fünf der hover-Effekt. Allerdings ohne erkennbaren Grund..
    Kann mir jmd von euch auf die Sprünge helfen?

    Danke!
    Grüße

    //edit:
    Das mit dem Hover hätte sich nun auch geklärt
    Ist ganz gut, wenn man ab und zu mal den Cache leert

    Hat aber vll jmd eine Idee, wie ich das nun mit einem "onclick" lösen kann? In der CSS-Datei stand das vorher unter a:active und wurde ausgeführt, wenn jemand auf einen Button geklickt hat.
    Wie kann ich das nun mit JavaScript lösen? Hat da jemand eine Ahnung?
    - onclick
    - onmousedown
    funktionieren irgendwie nicht..

    Grüße!

  • von Gast
    17.03.2008, 07:37 Uhr
    351 Punkte
    Moin Jungs

    Ich habe ein neues Problem und weiß nicht weiter.
    Ich bin nun dabei, eine Übersicht zu basteln, in der man die Abteilungen ordnen kann (quasi wie im WBB die Foren).

    Das baue ich alles auf, klappt auch eigtl wunderbar.
    Nur komme ich jetzt an die Stelle, dass ich das ganze Updaten möchte (UPDATE table SET ...) wenn die Abteilungen neu geordnet wurden.

    Ich bekomme es einfach nicht hin, den Update-Befehl so zu gestalten, dass es funktioniert.

    PHP-Code:
    while($row mysql_fetch_object($result))
    {

    /* Abfrage, ob Nummer zugeordnet oder nicht */
        
        
    if($row->order_id == "0"){ // Wenn Nummer = 0
          
    $style "style='color:red;font-size:8pt;'"// Mach die Schrift rot
        
    }else{ // Ansonsten
          
    $style "style='color:#000000;font-size:8pt;'"// Lass alles beim Alten
        
    }


        echo 
    "<tr>";
        echo 
    "<td width='30%' ".$style."><center>".$row->order_id."</center></td>";
        echo 
    "<td width='20%'><select>";
              for(
    $x=1$x<=$entrys$x++)
                {
                  echo
    "<option name='abt_order'>".$x."</option>";
                }
        echo 
    "</select></td>";
        echo 
    "<td width='50%' ".$style.">".$row->name."<input type='hidden' value='".$row->id."' name='id'></td>";
        echo 
    "</tr>";
        
    }


    /* Abfrage, ob Button gedrück wurde */

    if(isset($_POST['ordnen'])){
        
    mysql_query("UPDATE abteilung SET order_id = "/* ???? */" WHERE id = "/* ???? */"");
        echo 
    mysql_error();
      } 
    Ich habe die Stellen mal mit /* ???? */ gekennzeichnet, die mich zum verweifeln bringen :P

    Vielen Dank schonmal!
    Grüße

    //edit:
    Der Button "ordnen" ist da Nur weiter unten im Script.

  • von Gast
    17.03.2008, 10:48 Uhr
    351 Punkte
    und was genau funktioniert da nicht?
    den query einfach noch mit den neu eingegebenen order_ids und der jeweiligen id füllen und dann sollte das doch gehn...?

  • von Gast
    17.03.2008, 10:55 Uhr
    351 Punkte
    Ja, dachte ich auch Habe dann einfach die Werte mit $_POST['...'] übergeben.
    Aber das funktioniert so leider nicht Denn es sind ja schließlich 14 Updates die gemacht werden müssen. Also, ne Zählschleife um das query - dacht ich mir zumindest so Und das funktioniert nun auch nicht..

    PHP-Code:
    $cnt 1// Hilfsvariable auf 1 setzen (Counter)

    /* Daten aus der Datenbank einbinden */
    while($row mysql_fetch_object($result))
    {

        
        
        echo 
    "<tr>";
        echo 
    "<td width='30%' ".$style."><center>".$spn.$row->order_id."</span></center></td>"// Jetzige Zuordnung
        
    echo "<td width='20%' ".$style.">\n<select name='abt'>\n";
              for(
    $x=1$x<=$entrys$x++) // Zählschleife
                
    {
                  echo
    "<option name='abt_".$cnt."'>".$x."</option>\n"// Zuordnen
                
    }
        echo 
    "</select>\n</td>\n";
        echo 
    "<td width='50%' ".$style.">".$spn.$row->name."</span><input type='hidden' value='".$row->id."' name='id_".$row->id."'></td>";// Name der Abteilung
        
    echo "</tr>";
        
    $tdbg++;
        
    $cnt++;
         
    }


    /* Abfrage, ob Button gedrückt wurde */

    if(isset($_POST['ordnen'])){
        for(
    $x=1$x<=$entrys$x++) // Zählschleife
        
    {
          
    $sql = ("UPDATE abteilung SET order_id = ".$_POST['abt_'.$cnt]." WHERE id = ".$_POST['id_'.$x].""); // SQL-Statement zum Aktualisieren der order_id
            
    $query mysql_query($sql);
        }
      } 
    Ist es denn verständlich was ich will? ?( :P
    Danke!

  • von Gast
    17.03.2008, 12:54 Uhr
    351 Punkte
    bei deinem code hast du ja mal den nachteil, dass es auch sein kann, dass du mehrmals die selbe order-id hast.
    evtl hast du das ja datenbankseitig mit UNIQUE verhindert?
    Außerdem behandelst du die POST-Daten von vorn herein als Zahlen! Evtl liegt da der fehler...
    Versuchs mal so:
    PHP-Code:
    $sql = ("UPDATE abteilung SET order_id = '".$_POST['abt_'.$cnt]."' WHERE id = '".$_POST['id_'.$x]."'"); // SQL-Statement zum Aktualisieren der order_id
            
    $query mysql_query($sql); 
    desweiteren find ich diese Dropdown-Lösung sehr ungeschickt... mach's doch mit schönen kleinen Grafiken, mit denen du die Abteilungen durch die gegend schieben kannst.

    dazu einfach hinter die Abteilungen Grafiken setzen
    (z.b. soeine (n bissl verkleinern noch^^))
    und dann jeweils mit den entsprechenden Daten per GET verknüpfen.

    Die Abfrage sieht dann so aus:

    PHP-Code:
    if($_GET['direction']=='up')
    {
        
    $new_pos=$_GET['actualpos']-1;
    }
    if(
    $_GET['direction']=='down')    {
        
    $new_pos=$_GET['actualpos']+1;
    }

    // Abteilung suchen, die die gewünschte Position besetzt
    $result=mysql_query("
        SELECT
            id
        FROM
            abteilungen
        WHERE
            order_id='"
    .$new_pos."'
    "
    );

    // Ändern der Positionen
    mysql_query("
        UPDATE
            abteilungen
        SET
            order_id='"
    .$new_pos."'
        WHERE
            id='"
    .$_GET['id']."'
        "
    );


    $menu_data=mysql_fetch_assoc($result);
    mysql_query("
        UPDATE
            abteilungen
        SET
            order_id='"
    .$_GET['actualpos']."'
        WHERE
            id='"
    .$menu_data['id']."'
    "
    ); 
    funktioniert super und du musst dir ned dauernd gedanken machen, welche ID scho vergeben is :P

  • von Gast
    18.03.2008, 07:28 Uhr
    351 Punkte
    Danke für deinen Einfall
    Leider funktioniert es nicht so, wie wir uns das vorstellen :P Was mache ich falsch?

    // edit:
    Habe nen Schreibfehler im Tabellennamen gehabt :P
    Danke!

    // edit2:
    Trotzdem passieren immer wieder voll komische Sachen ?(
    Ich drucke bei Abteilung 3 auf Up, plötzlich bekommt Abteilung 2 eins abgezogen.
    Ich habe den Abteilungenn über phpmyadmin die korrekte order_id gegeben und um es zu testen, wollte ich zwei Abteilungen verschieben. Jetzt haben drei Abteilungen die gleiche order_id. Komisch..
    Dabei habe ich nichts am Code verändert.
    PHP-Code:
    while($row mysql_fetch_object($result))
    {
        echo 
    "<tr>";
        echo 
    "<td width='50%' ".$style.">".$row->name."</td>"// Name der Abteilung
        
    echo "<td width='25%' ".$style."><a href='?direction=up&actualpos=".$row->order_id."&id=".$row->id."'>Up</a> | <a href='?direction=down&actualpos=".$row->order_id."&id=".$row->id."'>Down</a></td>"// Option
        
    echo "<td width='25%' ".$style."><center>".$row->order_id."</center></td>";
        echo 
    "</tr>";
    }

    if(
    $_GET['direction']=='up')
    {
        
    $new_pos=$_GET['actualpos']-1;
    }
    if(
    $_GET['direction']=='down')    {
        
    $new_pos=$_GET['actualpos']+1;
    }

    // Abteilung suchen, die die gewünschte Position besetzt
    $result mysql_query("SELECT id FROM abteilung WHERE order_id=' ".$new_pos." ' ");

    // Ändern der Positionen
    mysql_query("UPDATE abteilung SET order_id=' ".$new_pos." ' WHERE id=' ".$_GET['id']." ' ");


    $menu_data mysql_fetch_assoc($result);
    mysql_query("UPDATE abteilung SET order_id=' ".$_GET['actualpos']." ' WHERE id=' ".$menu_data['id']." ' "); 
    ?(

    Danke schonmal!
    Grüße

  •  

Themen-Optionen
Ansicht


Interessantes Video




Themen des Beitrags


Facebook


Relevante Suchbegriffe für dieses Thema

  • hide

Jahresarchive