[PHP/MySQL] $_GET Fehler bei Profil ausgabe

thehacker

Anhänger der Apachen
Hallo,
ich will ein Profil mit der get variable ausgeben bekomme aber diese Fehlermeldung:
Code:
Parse error: syntax error, unexpected $end in /var/www/web407/html/my/test.php on line 17

Hier mal der Quelltext von der test.php

PHP:
<?php 
		mysql_connect("localhost", "root", ""); 
		mysql_select_db("root");
		
		$id= $_GET['id'];

		$sql = mysql_query("SELECT * FROM users Where id = $id "); 
		while($row = mysql_fetch_array($sql)){
		$usr = $row['username'];
?>		

<?php

		echo "Benutzername: " .$usr ;

?>

Danke :d


Bei der Sicherheit paar tipps zugeben wäre auch net :D
 
Danke das mit der sicherheit muss ich jetzt auch mal lernen :D


so nun sieht das ganze so aus:
PHP:
<?php 
		mysql_connect("localhost", "root", ""); 
		mysql_select_db("webseite");
		
		$id = $_GET['id']; 
		$id = intval($id); 

		$sql = mysql_query("SELECT * FROM users Where id = $id "); 
		while($row = mysql_fetch_array($sql)){
		$usr = $row['username'];
?>		

<?php

		echo "Benutzername: " .$usr ;

?>

Aber wie mache ich das mit dem:
PHP:
... $sql = mysql_query("SELECT * FROM users Where id = $id "); ...
?
und stimmt das nun mit der sicherheit?
 
Ich würde dir vorschlagen, sprintf() zu verwenden:

PHP:
$query = sprintf("SELECT * FROM users WHERE id = %d", $id);
$sql = mysql_query($query) or die(mysql_error());

Da hier im Format-String ein %d steht, wird an dieser Stelle nur eine Ganzzahl akzeptiert. Alles andere würde ignoriert werden, nötigenfalls würde eine 0 dort eingetragen.

Mein Vorgehen hat den Vorteil, das du $query dann auch gefahrlos ausgeben kannst:

PHP:
$query = sprintf("SELECT * FROM users WHERE id = %d", $id);

// Für Debugging-Zwecke $query mal ausgeben:
echo "<pre>$query</pre>";

$sql = mysql_query($query) or die(mysql_error());
 
[phpf]sprintf[/phpf] ersetzt einfach nur Platzhalter in einer Zeichenkette durch entsprechende Variablen (und formatiert diese z.B. zu Integern).


und stimmt das nun mit der sicherheit?
Ja, auch wenn man jetzt einen String als $id übergeben hat, wird nur 0 im Query eingesetzt.

Mein Vorgehen hat den Vorteil, das du $query dann auch gefahrlos ausgeben kannst
Das kann man bei der Lösung mit intval() auch.
Nur wenn man HTML im Datensatz vorliegen hat, müsste man etwas wie [phpf]htmlentities[/phpf] benutzen.
 
Was klappt denn an dem Script nicht, nach dem du die Klammer richtig gesetzt hast? Wir können nicht hellsehen und wenn du nur Code zeigst, der offenbar syntaktisch korrekt ist, müssen wir davon ausgehen, das es nach dem Fix mit der Klammer getan ist. Folgende Agenda:

- Was passiert denn nicht wie erwartet?
- Hast du error_reporting() und display_errors korrekt gesetzt?
- Irgendwelche Fehlermeldungen?
- Hast du hinter die relevanten MySQL-Funktionen ein "or die(mysql_error())" eingebaut?
 
Zurück