Dynamisches BILD mit MySQL Daten.

Rambo51

Erfahrenes Mitglied
Hi,

ich habe mir ein Script zusammen gebastelt, in dem ich eine Signatur mit Daten aus einer Datenbank versehe.
Hier der Code:
PHP:
<?php include ('config.php'); ?>
<?php
if (isset($_POST["Submit"])) {
header("Content-type: image/png");

$name = $_POST["name"];

$conn_id = mysql_connect($host,$user,$pw); 
mysql_select_db($database,$conn_id); 
$result = mysql_query("SELECT * from $table WHERE name = '$name'");
while($row = mysql_fetch_assoc($result)) 
{ 
$car = $row['car'];
$nick = $row['name'];
$points = $row['points'];
$poles = $row['poles'];
$win = $row['win'];
$posi = $row['posi'];
}
?>
<?php
$img = imagecreatefrompng(''.$car.'.png'); 
$bl = imagecolorallocate($img, 0, 0, 0); 
$we = imagecolorallocate($img, 255, 255, 255); 
imagestring($img, 4, 320, 95, $nick, $we); 
imagestring($img, 4, 20, 15, "Poles: ".$poles, $we); 
imagestring($img, 4, 20, 30, "Siege: ".$win, $we);
imagestring($img, 4, 20, 45, "Punkte: ".$points, $we);
imagestring($img, 4, 20, 80, "Position: ".$posi, $we);

imagepng($img);
imagedestroy($img);}else{

?>

So nun will ich aber, das die Signatur immer von dem fahrer so eine art URL hat: http://www.host.de/sig.php/fahrer1.png
http://www.host.de/sig.php/fahrer2.png
.....
oder so ähnlich.

Die Daten in der MySQL ändere ich dann von jedem Fahrer selbst.
Wenn ich dann die Daten geändert habe, sollten sich die Daten in der Signatur automatisch ändern.

Das erste erstellen der Signatur erfolgt über ein Formular, wo der FahrerX sein Name eingibt, und dann die Tabelle durchsucht wird und die daten dann ausgibt.

Aber wie mache ich das jetzt, das die URL zu dem FahrerX dann so ist: http://www.host.de/sig.php/fahrerX.png?

Wäre über eure Hilfe sehr Dankbar!

Gruss Rambo51
 
Das Skript kann bis auf ein paar Änderungen – vor allem Sicherheitsvorkehrungen – so bleiben wie es ist. Was nur noch gemacht werden muss, ist eine serverintern Umleitung von Anfragen des Musters „sig.php/fahrerX.png“. Dies lässt sich mit dem Apache-Modul „mod_rewrite“ wunderbar erledigen:
Code:
RewriteEngine	on
RewriteRule	^sig\.php/fahrer([1-9][0-9]*)\.png$	/foo?bar=$1	[L]
 
Danke Gumbo.

1. mod_rewrite läuft! habe unter phpinfo() nach gescahut. Allerdings weiß ich nicht wo ich das einstellen muss RewriteEngine ON etc.
Und es wäre gut wenn man dafür kein Root zugriff braucht.

2. Kann man das den noch anders lösen? Also es muss die URl ja nicht so sein: sig.php/fahrerX.png.
Es soll ja nur für jeden fahrer abgespeichert werden und dann später in einer signatur eingefügt werden via [ IMG ] [ /IMG ]

Gruss Rambo51
 
Die Regeln des „mod_rewrite“-Moduls können auch im „per-directive“-Kontext, also in der „.htaccess“-Konfigurationsdatei, notiert werden.
Es ist aber auch möglich, den Parameter direkt als URL-Argument zu übergeben, also quasi „/foo?bar=X“.
 
Ok, aber wie bekomme ich es hin mit "foo?bar=X"

bei solchen sachen steige ich nicht durch, MySQL abfragen bekomm ich hin aber sowas leider noch nicht so gut!
 
Das Skript muss lediglich etwas angepasst werden:
PHP:
<?php

	include 'config.php';

	if( !isset($_REQUEST['name']) || empty($_REQUEST['name']) ) {
		header($_SERVER['SERVER_PROTOCOL'].' 412 Precondition Failed', true);
		exit;
	}

	$conn_id = mysql_connect($host, $user, $pw);
	mysql_select_db($database, $conn_id);
	$query = '
		SELECT
		        `car`,
		        `name`,
		        `points`,
		        `poles`,
		        `win`,
		        `posi`
		  FROM
		        `'.mysql_real_escape_string($table).'`
		  WHERE
		        "'.mysql_real_escape_string($_REQUEST['name']).'"
		';
	$result = mysql_query($query);

	if( mysql_num_rows($result) != 1 ) {
		header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true);
		exit;
	}

	$row = mysql_fetch_assoc($result);
	$im = imagecreatefrompng($car.'.png');
	$black = imagecolorallocate($im, 0, 0, 0);
	$white = imagecolorallocate($im, 255, 255, 255);
	imagestring($im, 4, 320, 95, $row['name'], $white);
	imagestring($im, 4, 20, 15, 'Poles: '.$row['poles'], $white);
	imagestring($im, 4, 20, 30, 'Siege: '.$row['win'], $white);
	imagestring($im, 4, 20, 45, 'Punkte: '.$row['points'], $white);
	imagestring($im, 4, 20, 80, 'Position: '.$row['posi'], $white);

	header('Content-Type: image/png');
	imagepng($im);
	imagedestroy($im);

?>
 
[…] wäre das so Richtig? Denn es kommt nur eine Weiße Seite […]
Solange du das Skript an deine Bedingungen angepasst hast. Prüfe mal den gesendete Statuscode.
Ich habe meinen Vorschlag übrigens noch einmal korrigiert/verbessert.
 
Also ich poste meinen ganzes Skript, welches ich selber gemacht hatte.
PHP:
<?php include ('config.php'); ?>
<?php
if (isset($_POST["Submit"])) {
header('Content-type: image/png'); 

$name = $_POST["name"];

$conn_id = mysql_connect($host,$user,$pw); 
mysql_select_db($database,$conn_id); 
$result = mysql_query("SELECT * from $table WHERE name = '$name'");
while($row = mysql_fetch_assoc($result)) 
{ 
$car = $row['car'];
$name = $row['name'];
$points = $row['points'];
$poles = $row['poles'];
$win = $row['win'];
$posi = $row['posi'];
}
?>
<?php
$img = imagecreatefrompng(''.$car.'.png'); 
$bl = imagecolorallocate($img, 0, 0, 0); 
$we = imagecolorallocate($img, 255, 255, 255); 
$ro = imagecolorallocate($img, 255, 0, 0); 
imagestring($img, 2, 320, 95, $name, $we); 
imagestring($img, 2, 20, 15, "Poles: ".$poles, $we); 
imagestring($img, 2, 20, 30, "Siege: ".$win, $we);
imagestring($img, 2, 20, 45, "Punkte: ".$points, $we);
imagestring($img, 2, 20, 80, "Position: ".$posi, $ro);

imagepng($img);
imagedestroy($img);} else{

?>
 
<html>
<head>
<title>Deine Statistik Sig</title>
</head>
<body>
<center>
<form action=<?php echo $PHP_SELF ?> method=POST>
<table border="0" width="300" cellspacing="0" cellpadding="0">
<tr>
<td width="175" align="center" height="100">Name:</td>
<td width="299"><input name="name" type="text" size="30"></td>
</tr>
<tr>
<td height="40" colspan="2" align="center"><input type="submit" name="Submit" value="Weiter"></td>
</tr>
</table>
</form></center>
</body>
</html>
<?php 
}
?>


Und das funktioniert Wunderbar, bis auf das ich immer Denn Fahrer Name im Formular neu eingeben muss. Und eben das möchte ich mit einer URL umgehen. Und deswegen, hatte ich das auch nochmal versucht.

PHP:
<?php include ('config.php'); ?>
<?php
if (isset($_POST["Submit"])) {
header('Content-type: image/png'); 

$name = $_POST["name"];

if ($show == "sig") {
$conn_id = mysql_connect($host,$user,$pw); 
mysql_select_db($database,$conn_id); 
$result = mysql_query("SELECT * from $table WHERE name = '$name'");
while($row = mysql_fetch_assoc($result)) 
{ 
$car = $row['car'];
$name = $row['name'];
$points = $row['points'];
$poles = $row['poles'];
$win = $row['win'];
$posi = $row['posi'];
}
?>
<?php
$img = imagecreatefrompng(''.$car.'.png'); 
$bl = imagecolorallocate($img, 0, 0, 0); 
$we = imagecolorallocate($img, 255, 255, 255); 
$ro = imagecolorallocate($img, 255, 0, 0); 
imagestring($img, 2, 320, 95, $name, $we); 
imagestring($img, 2, 20, 15, "Poles: ".$poles, $we); 
imagestring($img, 2, 20, 30, "Siege: ".$win, $we);
imagestring($img, 2, 20, 45, "Punkte: ".$points, $we);
imagestring($img, 2, 20, 80, "Position: ".$posi, $ro);

imagepng($img);
imagedestroy($img);}} else{

?>
 
<html>
<head>
<title>Deine Statistik Sig</title>
</head>
<body>
<center>
<form action=<?php echo $PHP_SELF ?> method=POST>
<table border="0" width="300" cellspacing="0" cellpadding="0">
<tr>
<td width="175" align="center" height="100">Name:</td>
<td width="299"><input name="name" type="text" size="30"></td>
</tr>
<tr>
<td height="40" colspan="2" align="center"><input type="submit" name="Submit" value="Weiter"></td>
</tr>
</table>
</form></center>
</body>
</html>
<?php 
}
?>

Und das wollte ich dann mit dieser URL aufrufen:
sig.php?show=sig&name=FahrerX
aber es geht nicht
 
Speichere mal mein Skript separat. Zusätzlich kannst du folgendes Formular verwenden, um dem Benutzer entgegenzukommen:
HTML:
<form action="foobar" method="get">
	<input type="text" name="name">
	<input type="submit">
</form>
Das „foobar“ muss nur noch durch den URL des separaten Skriptes ersetzt werden.
 
Zurück