Image Create Ausgabe in neuer Zeile
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
anzeige
ausgabe
bier
code
date
datenbank
eigentliche ausgabe
erzeugen
funktion
image
list
position
punkt
schleife
start
strich
string
url
werte abrufen
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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. -
aff3m1tw4ff3 schrieb:
Das liegt am Schriftfont: es sind nicht alle Zeighen gleich breit...
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.
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. -
<?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 -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage