kostenloser Webspace werbefrei: lima-city


Image Create Ausgabe in neuer Zeile

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    aff3m1tw4ff3

    aff3m1tw4ff3 hat kostenlosen Webspace.

    Hallo,

    Ich habe da ein Problem mit der Ausgabe eines PHP Image mit Daten aus der Datenbank.
    Die Ausgabe selber bekomme ich hin. Allerdings werden mir die Daten alle nebeneinander ausgegeben und nicht untereinander. Da ich aber eine Art Tabelle erzeugen möchte ist das so sehr ungünstig.

    <?PHP
    header ( 'content-type: image/png' );
    
    
    $img = imagecreate ( 200, 300 );
    imagecolorallocate ( $img, 0, 0, 0 );
    
    $weiß = imageColorAllocate ($img, 255, 255, 255);
    
    //-------------------------------------------------------------------
    // Start verbindung ////////////////////////////////////////
    //-------------------------------------------------------------------
    include("connect.inc.php"); 
    $dbverbindung = mysql_connect ($host, $user, $password);
    
    //-------------------------------------------------------------------
    // Datenbank wählen ////////////////////////////////////////////////
    //-------------------------------------------------------------------
    $db_sel = mysql_select_db( pennereck_de );
     
    //-------------------------------------------------------------------
    // Ausgabe der Werte abrufen und array erzeugen ////////
    //-------------------------------------------------------------------
    $abfrage = 'SELECT * FROM muenzwurf WHERE bier ORDER by bier DESC LIMIT 0,5';
    $loesung = mysql_query($abfrage) or die(mysql_error());
    while ($row = mysql_fetch_array($loesung, MYSQL_ASSOC)) {
    
    //-------------------------------------------------------------------
    // Start eigentliche Ausgabe///////////////////////////
    //-------------------------------------------------------------------
    
    $ausgabe .= "$row[name]\n";
    $ausgabe2 .= "$row[bier]";
    }
    
    
    imagestring ( $img, 5, 6, 3, $ausgabe, $weiß );
    imagestring ( $img, 5, 50, 3, $ausgabe2, $weiß );
    
    
    imagepng ( $img );
    
    image_destroy ( $img );
    ?>


    Soweit bin ich derzeit. Leider nimmt die Ausgabe weder \n noch \r.
    Ich denke mal man müsste das mit einer for Schleife angehen. Allerdings stehe ich da nun komplett auf dem Schlauch.
    Vieleicht hat ja jemand einen Ratschlag für mich und kann mir helfen.

    Ich habe auch schon das HIER getestet. Allerdings lassen sich so keine Mehrfachanzeigen erzeugen ohne "grafikprobleme" . Bei unterschiedlichen längen der erzeugten Texte verschiebt sich dort die Anzeige. Dabei entsteht die Anzeige etwa so:

    Name:----------------------------- Punkte:
    Ich bin kurz ------------------- 500
    ich bin viel länger --------------------600
    kurz -------------- 300
    Der allerlängste Name----------------500


    Ich möchte aber:


    Name:------------------------------Punkte:
    Ich bin kurz -----------------------500
    ich bin viel länger ---------------600
    kurz----------------------------------300
    Der allerlängste Name--------500


    (ohne die striche natürlich )



    Danke schonmal und gruß Marco
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Html 5 +bisschen css

    <dl>
    <dt>Definition List</dt>
    <dd>A list of terms and their definitions/descriptions.</dd>
    <dt>Ordered List</dt>
    <dd>A numbered list.</dd>
    <dt>Unordered List</dt>
    <dd>An unnumbered list.</dd>
    </dl>


    oder ne normale Tabelle wären da am besten würde ich sagen.

    Du kannst es natürlich auch umständlich machen und den längsten String ermitteln und die anderen solange mit strichen auffüllen bis sie gleichlang sind.
  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    aff3m1tw4ff3 schrieb:
    Soweit bin ich derzeit. Leider nimmt die Ausgabe weder \n noch \r.
    Ich denke mal man müsste das mit einer for Schleife angehen. Allerdings stehe ich da nun komplett auf dem Schlauch.
    Vieleicht hat ja jemand einen Ratschlag für mich und kann mir helfen.

    Ich habe auch schon das HIER getestet. Allerdings lassen sich so keine Mehrfachanzeigen erzeugen ohne "grafikprobleme" . Bei unterschiedlichen längen der erzeugten Texte verschiebt sich dort die Anzeige.
    Das liegt am Schriftfont: es sind nicht alle Zeighen gleich breit...


    Du könntest das so aufteilen, dass du am Ende den Namen und die Punkte getrennt in Variablen hast hast.
    Als nächstest suchst du dir den längsten Namen und berechnest von ihm die Breite in Pixeln.
    Zu dem so erhaltenen Wert zählst du noch etwas dazu (z.B. 10) und merkst dir das (speicherst das in eine Variable), das ist dann der Start-X-Wert für die 2. Spalte.
    Als nächstes gibst du die Namen in einer Schleife untereinander aus, beginnend bei z.B. 2px (damit ein kleiner Rand entsteht).
    Danach beginnst du beim berechneten Wert die Punkte untereinander auszugeben...

    und wenn du das so gemacht hast erhälst du eine Tabelle ohne Gitternetzlinien im Bild.
  5. Autor dieses Themas

    aff3m1tw4ff3

    aff3m1tw4ff3 hat kostenlosen Webspace.

    <?php
    // start image create
    function sendimagetext($text) {
      // Set font size
      $font_size = 4;
    
      $ts=explode("\n",$text);
      $width=0;
      foreach ($ts as $k=>$string) { //compute width
        $width=max($width,strlen($string));
      }
    
      // Create image width dependant on width of the string
      $width  = imagefontwidth($font_size)*$width;
      // Set height to that of the font
      $height = imagefontheight($font_size)*count($ts);
      $el=imagefontheight($font_size);
      $em=imagefontwidth($font_size);
      // Create the image pallette
      $img = imagecreatetruecolor($width,$height);
      // Dark red background
      $bg = imagecolorallocate($img, 31,31,31);
      imagefilledrectangle($img, 0, 0,$width ,$height , $bg);
      // White font color
      $color = imagecolorallocate($img, 255, 255, 255);
    
      foreach ($ts as $k=>$string) {
        // Length of the string
        $len = strlen($string);
        // Y-coordinate of character, X changes, Y is static
        $ypos = 0;
        // Loop through the string
        for($i=0;$i<$len;$i++){
          // Position of the character horizontally
          $xpos = $i * $em;
          $ypos = $k * $el;
          // Draw character
          imagechar($img, $font_size, $xpos, $ypos, $string, $color);
          // Remove character from string
          $string = substr($string, 1);     
        }
      }
      // Return the image
      header("Content-Type: image/png");
      imagepng($img);
      // Remove image
      imagedestroy($img);
    }
    // ENDE AUFBAU PHP IMAGE
    
    //-------------------------------------------------------------------
    // Start eigentlich Ausgabe /////////////////////////////////////////
    //-------------------------------------------------------------------
    
    //-------------------------------------------------------------------
    // Ermitteln der IP /////////////////////////////////////////
    //-------------------------------------------------------------------
    $ip = getenv('REMOTE_ADDR');
    
    //-------------------------------------------------------------------
    // Variablen für imgae ausgabe //////////////////////////////////////
    //-------------------------------------------------------------------
    $border = imagecolorallocate($image, 64, 64, 64);
    $weiß = ImageColorAllocate($img, 255, 255, 255);
    
    //-------------------------------------------------------------------
    // Refferer festlegen und prüfen ////////////////////////////////////
    //-------------------------------------------------------------------
    $referers[0] = "xxx"; 
    $referers[1] = "xxx"; 
    
    if (!in_array($_SERVER['HTTP_REFERER'], $referers)) {
    sendimagetext ("Echt jetzt?? Nicht Dein Ernst oder?\nWenn Du schnell gehst sag ich es Keinem.\nABER deine IP $ip merk ich mir!");
    }
    
    //-------------------------------------------------------------------
    // Start verbindung ////////////////////////////////////////
    //-------------------------------------------------------------------
    include("connect.inc.php"); 
    $dbverbindung = mysql_connect ($host, $user, $password);
    
    //-------------------------------------------------------------------
    // Datenbank wählen ////////////////////////////////////////////////
    //-------------------------------------------------------------------
    $db_sel = mysql_select_db( pennereck_de );
     
    
    //-------------------------------------------------------------------
    // Prüfen ob IP hinterlegt ist und GangID stimmt ///////////////////
    //-------------------------------------------------------------------
    $gangid = "652628";
    $check = mysql_query("SELECT ip FROM hamburg WHERE ip='$ip' AND kw_gangid='$gangid'") or die (mysql_error());
    if(mysql_num_rows($check ) >= 1){
    
    //-------------------------------------------------------------------
    // Ausgabe der Werte abrufen und array erzeugen ////////
    //-------------------------------------------------------------------
    $abfrage = 'SELECT * FROM hamburg WHERE kw_gangid = 652628 ORDER by kw_wert DESC';
    $loesung = mysql_query($abfrage) or die(mysql_error());
    while ($row = mysql_fetch_array($loesung, MYSQL_ASSOC)) {
    
    //-------------------------------------------------------------------
    // Start eigentliche Ausgabe in der MotD ////////////////////////////
    //-------------------------------------------------------------------
    
    $ausgabe .= "$row[date]   $row[kw_att]    $row[kw_def]     $row[kw_wert]   $row[kw_sendeart]   $row[kw_name]\n";
    }
    sendimagetext ("Date         Att    Def     KW       M/A  Name\n----------------------------------------------------------\n$ausgabe\n----------------------------------------------------------\nlegende: M/A M=manuell erzeugt  A=per GM-Script gesendet\n");
    }
    //-------------------------------------------------------------------
    // Wenn keine Werte gefunden werden ////////////////
    //-------------------------------------------------------------------
    
    else
    {
    sendimagetext ("
    Warum bekomme ich diese Anzeige?
    ------------------------------------------------------------
    - Du hast Deine Werte laenger nicht in die Modt gesendet
    - Du hast eine neue ID/IP bekommen
    - Du hast Deine Werte noch nicht gesendet
    - Es wird das Image einer anderen Bande verwendet
    
    Was kann ich tun?
    ------------------------------------------------------------
    - sende Deine Werte mit Hilfe des GM Scripts
    - trage Deine Werte Manuell ein. Lasst eurer Bande dazu
      einen Loginbereich einrichten
    - beim falschen Image kannst Du nichts tun Ausser dir schaemen 
    
    ");
    }
    
    //-------------------------------------------------------------------
    // Das bittere Ende /////////////////////////////////////////
    //-------------------------------------------------------------------
    ?>


    Beitrag zuletzt geändert: 18.5.2012 17:06:26 von aff3m1tw4ff3
  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    aff3m1tw4ff3 schrieb:
    Gibt es denn einen Weg diese Funktion öfters zu nutzen?
    Welche Funktion und wie möchtest du sie wofür öfter nutzen?
  7. Autor dieses Themas

    aff3m1tw4ff3

    aff3m1tw4ff3 hat kostenlosen Webspace.

    Also, meine Vorstellung wäre eine Ausgabe der einzelnen Spalten durch Angabe der x, y Position.
    Derzeit rufe ich das ganze so auf.


    $ausgabe .= "$row[date]   $row[kw_att]    $row[kw_def]     $row[kw_wert]   $row[kw_sendeart]   $row[kw_name]\n";
    }
    sendimagetext ("Date         Att    Def     KW       M/A  Name\n----------------------------------------------------------\n$ausgabe\n----------------------------------------------------------\nlegende: M/A M=manuell erzeugt  A=per GM-Script gesendet\n");
    }


    Ich gebe also alle Spalten in einer Ausgabe an. Dadurch verschiebt sich dies ja dummerweise.
    Ich würde nun gern etwas in diese Richtung machen wollen.


    sendimagetext ( $img, 5, 50, 3, $ausgabeName, $weiß );
    sendimagetext ( $img, 5, 50, 3, $ausgabeWert1, $weiß );
    sendimagetext ( $img, 5, 50, 3, $ausgabeWert2, $weiß );
    sendimagetext ( $img, 5, 50, 3, $ausgabeWert3, $weiß );

    Was leider nicht geht da ja in der Funktion die x,y Position schon errechnet wird.




    Ich hoffe ich konte mich verständlich Ausdrücken. Erklärt sich irgendwie Doof.
    Danke erst mal für deine Hilfe @hackyourlife

    TANTE EDIT!!

    Hab mal in meinem Vorgängerpost den kompletten Code gepostet. War hier leider zu lang und Doppelpost geht nicht. Sorry für die Länge, hab keinen Spoiler gefunden

    Beitrag zuletzt geändert: 18.5.2012 16:43:08 von aff3m1tw4ff3
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!