PHP if-Funktion für Variable aus URL

Cross15

Cadet 1st Year
Registriert
Mai 2009
Beiträge
13
Hallo Leute.

Ich möchte ein Pseudo-CMS erstellen mit PHP und SQL-Datenbanken.

Das hat auch alles wunderbar funktioniert, bis auf eine Sache:

Ich habe ein Upload-Script, wo man Bilder hochladen kann. Dieses Script leitet auf die Seite intern.php?img=bildername.jpg weiter.
Die Datei habe ich auch erfolgreich in die Textarea in einen <img-Tag eingefügt.

Das ist der Befehl:
PHP:
<?php echo $HTTP_GET_VARS[img]; ?>

Und so sieht das Ganze dann aus:
HTML:
<textarea (...)><img src="images/<?php echo $HTTP_GET_VARS[img]; ?>"></textarea>

Das Problem ist, dass auch, wenn kein Bild hochgeladen wurde, folgender Code ausgegeben wird:
HTML:
<textarea (...)><img src="images/"></textarea>

Jetzt habe ich mich gefragt, ob ich das vielleicht mit einer if-Funktion lösen könnte.
PHP:
<?php if($img = '')
  {
    echo '';
   }
   else
   {
    echo '<img src="images/';
    echo $HTTP_GET_VARS[img];
    echo '">';
   }
?>

Das funktioniert nicht -was habe ich falsch gemacht?

Danke schonmal für eure Antworten,

Cross15
 
Zuletzt bearbeitet:
Vielen dank!!

Wie konnte ich das vergessen :D

PHP:
<?php if(isset($_GET["img"])) 
  { 
    echo '<img src="images/'; 
    echo $HTTP_GET_VARS[img]; 
    echo '">'; 
   } 
   else 
   { 
    echo '';
   } 
?>

So funktionierts!!


Danke!
 
Und du hast eine riesige Sicherheitslücke. Checke bitte das Bild auf Validität (also ob das Bild auch wirklich ein Bild ist und kein PHP-Script oder ähnliches), und nutze niemals URI-Parameter direkt im HTML-Quelltext. Vertraue niemals daten, die vom User kommen.
 
@TchiboMann: Wieso nicht? PHP läuft doch serverseitig!? Und wie würdest du es machen?
Und ob das ein Bild ist, check ich in der upload.php.
Dass das eine Sicherheitslücke ist, bezweifle ich, da ich alles in eine Passwortgeschützte PHP-Datei gehauene habe. ;)

Danke für die Antwort!


Jetzt habe ich aber noch eine Frage. Ich habe verschiedene Kategorien und möchte mit nur einer Seite alle Kategorien anzeigen können. (zB. über kategorien.php?kategorie=spiele)

Dazu habe ich ein Script:

PHP:
<?php
include('datenbank.php');
$db2 = mysql_query("SELECT * FROM `posts` WHERE `kategorie` = '$_GET[kategorie];'");
while($db3 = mysql_fetch_array($db2)){
echo '
<div class="box">
<h1>'.$db3[titel]. '</h1>
<p>'.$db3[inhalt]. '</p>
</div>
';
}
?>

Leider funktioniert das nicht mit Text - was stimmt nicht? Ich habe das gleiche Konzept nur mit Zahlen und da läuft es.

Danke schonmal ^^
 
Zuletzt bearbeitet:
Zu deine Kategorie-Problem:
Bei $_GET[kategorie] ist das Semikolon in den Hochkommas. Ansonsten sollte das so funktionieren.

Zur den Sicherheitslücken:
Wenn sollte man direkt versuchen "sicher" zu coden. Hier mal ein paar Infos ;)

Cross-Site Scripting
PHP:
<img src="images/<?php echo $HTTP_GET_VARS[img]; ?>">
SQL-Injection, mysql_real_escape_string
PHP:
$db2 = mysql_query("SELECT * FROM `posts` WHERE `kategorie` = '$_GET[kategorie];'");
 
@r15ch13 Danke für den Hinweis, jetzt funktioniert es. :)

Noch eine Frage, wie macht man das mit while, wenn man mehrere mysql_fetch_arrays hat?

So jedenfalls nicht:

PHP:
<?php
include('datenbank.php');
$db2 = mysql_query("SELECT DISTINCT kategorie FROM posts ORDER BY kategorie ASC");
$count = mysql_query("SELECT DISTINCT COUNT(*) FROM `posts` WHERE `kategorie` = 'wallpaper'");
while($db3 = mysql_fetch_array($db2) OR $zahl = mysql_fetch_array($count)){
echo '
<a href="kategorie.php?kategorie='.$db3[kategorie].'"><div class="box-klein">
	<h1>'.$db3[kategorie].'</h1>
	<h2>'.$zahl.' Post(s)</h2>
</div></a>
';
}
?>

Danke für eure Hilfe!

Cross
 
Das sollte man denke ich mit einer SQL-Abfrage lösen können.
Zweimal fetch_array in einer While habe ich noch nie gesehen :D

Da ich mir deine Tabelle grade nicht bildlich vorstellen kann, sage ich mal spontan:
PHP:
$sql = "SELECT DISTINCT
	`kategorie`,
	(SELECT DISTINCT COUNT(*) FROM `posts` WHERE `kategorie` = '" . mysql_real_escape_string($_GET['kategorie']) . "') AS `anzahl`
FROM `posts`
WHERE `kategorie` = '" . mysql_real_escape_string($_GET['kategorie']) . "'
ORDER BY kategorie ASC"

PHP:
echo '<a href="kategorie.php?kategorie='.$db3['kategorie'].'"><div class="box-klein">
<h1>'.$db3['kategorie'].'</h1>
<h2>'.$db3['anzahl'].' Post(s)</h2>
</div></a>';

Nicht getestet. Angaben ohne Gewehr. :freak:
 
Zuletzt bearbeitet: (mysql_real_escape_string hinzugefügt)
Danke, jetzt funktionierts!

Aber ich möchte bei WHERE `kategorie` = 'wallpaper' das 'wallpaper' als Variable stehen haben. Funktioniert das überhaupt? Kann es ja eigentlich nicht, da PHP ja dann Daten für die Auslesung derselben Daten bräuchte.. o.O

Geht das irgendwie?

Danke schonmal!!

Cross
 
Wenn ich das hier:
PHP:
" . mysql_real_escape_string($_GET['kategorie']) . "
einsetzte, schreibt er überall 0 hin.

Kann das vielleicht daran liegen, dass das 'kategorie' aus der Datenbank ausgelesen wird, die ich mit 'kategorie' auslesen will. Das kann doch nicht funktionieren...

Ich werd's einfach lassen xD

Wenn jemand eine Lösung weiß, wär super!
Ist aber nicht wirklich wichtig :)

Danke @all

Cross
 
Hm vielleicht solltest du deinen Datenbankstruktur noch mal überdenken.
So wie das aussieht hast du die Posts und die Kategorien in einer Tabelle.
Ich würde dafür aber zwei nehmen, und nur per Id die Posts den Kategorien zuordnen ^^
 
Ich würde das auch noch mal überdenken.

Vielleicht kannst du einfach mal die Struktur deiner Datenbank zeigen und wie die Ausgabe aussehen soll. Evtl. gibts eine ganz einfache Lösung.
 
Zurück
Oben