PHP COde in FOrmular unterbinden / ausfiltern ?

WerOLF

Mitglied
Hallo liebe Tutorial'ianer,

ich wage mich nun langsam an PHP heran, und programmiere nun zum lernen ein simples Freundschafts-script.

Funktionsprinzip:

Über ein Upload Formular wird ein Bild der Person ausgewählt, und in einem Textfeld der Name hinterlassen. Danach wird das Bild hochgeladen,
und das Script generiert einen Eintrag in der Textdatenbank, welcher dann ungefähr so aussieht:

<p align="center"><img src="eins.jpeg"><br>homer</p><br>

Wobei das Script natürlich den Bildnamen "eins.jpeg" und den Namen "homer" beim generieren ändert.

Mein Problem ist, das ich in das Textfeld auch PHP Code eingeben kann.
Wenn ich nun die Textdatenbank einfach in html ändere bzw einfüge ist das ja kein Problem, doch sobald ich die Textdatenbank über include() einbinde, wird dieser PHP code natürlich ausgeführt.

Das ist mir natürlich ein Dorn im Auge.

Welche Möglichkeit habe ich denn nun, diesen PHP code zu unterbinden?
Kann ich das Textfeld auf bestimmte Zeichen beschränken, oder über das Script diesen Code herausfiltern?

Viele Grüße
 
strip_tags

(PHP 4, PHP 5)

strip_tags — Entfernt HTML- und PHP-Tags aus einem String


Beschreibung
string strip_tags ( string $str [, string $allowable_tags] )

Diese Funktion versucht einen String zurückzugeben, der die um alle HTML- und PHP-Tags reduzierte Version von str darstellt. Sie verwendet die gleiche Engine zum Entfernen der Tags wie fgetss().

Sie können den optionalen zweiten Parameter dazu verwenden, Tags, die nicht entfernt werden sollen, anzugeben.

Anmerkung: allowable_tags steht ab PHP 3.0.13 bzw. PHP 4.0.0 zur Verfügung.

Ja ich glaub dass dir das weiterhelfen kann. So werden alle PHP und HTML-Tags entfernt und du hast deine Ruhe. um nun zu sehen wie das funktioniert ist hier noch ein Beispiel


PHP:
<?php
$text = '<p>Test-Absatz.</p><!-- Kommentar --> <a href="#fragment">Anderer Text</a>';
echo strip_tags($text);
echo "\n";

// <p> und <a> zulassen
echo strip_tags($text, '<p><a>');
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Test-Absatz. Anderer Text
<p>Test-Absatz.</p> <a href="#fragment">Anderer Text</a>




http://de3.php.net/strip_tags

Da kannst auch mal nachschauen
Ist in diesem Fall eben fast alles was hier auch drinn steht
Und zur not hätts :google: auch getan :)
 
Hallo,

danke für deine schnelle Antwort.

Zum THema Google: ich wusste keinen passenden Suchbegriff.
Alle Ergebnisse bezogen sich nur auf "Spamsicher machen"

Also, hier der Quellcode , welcher den Inhalt der Datenbank included:

<?php

// Sollte ein Sapßvogel irgendein Code eingebunden haben, wird dieser jetzt entfernt

$text = include ("inhalt.html") ;
echo strip_tags($text);
echo "\n";

// <p> und <a> zulassen
echo strip_tags($text, '<a><p>');

?>

Der Inhalt von einem Eintrag in der "inhalt.html:
<p align="center"><img src="eins.jpeg"><br>ohne PHP oder soetwas...</p>

Leider lässt sich aber immernoch PHP code einbinden / ausführen .

Was mache ich falsch?

Grüße
 
Eine Textdatenbank sollte auch nicht mit include eingebunden werden noch sollte sie HTML Code beinhalten.

Warum speicherst du nicht nur die Daten und beim Auslesen fügst du den HTML Code hinzu?

Dadurch würdest du viel Platz sparen, da jeder Eintrag kleiner wird und du könntest bequem mit [phpf]htmlspecialchars[/phpf] arbeiten.
 
danke für deine Antwort,

aber wie mache ich den Eintrag ?

Soweit versteh ich es:

ausgabe.php :

Würde ein Script beinhalten, welches eine Vorlage hat, wie z.B.:

(Bild HTML Code) ( Name der Person)

und würde dann diese Vorlage mit den Daten aus der Datenbank füllen.
Dabei müsste sich das script solange wiederholen, bis es nichts mehr findet.

Die Textdatenbank müsste dann (so denke ich) so aufgebaut sein:

(BIldname) (Name der Person)

Wie realisiere ich denn das ?
 
Falls du PHP5 hast, könntest du es so machen (ich schreibe den Code nur bruchstückhaft auf):

Eintragen
Ich nehme an, dass der Inhalt aus einem Formular kommt und nenne die zwei Felder einfach mal "bild" und "name". ("##" wird als Trennzeichen benutzt)
PHP:
$entry = $_POST['bild'].'##'.$_POST['name']."\n";
file_put_contents('datenbank.dat', $entry, FILE_APPEND);

Dies würde dann einen Eintrag in dieser Form eintragen:
hans.jpg##Hans

Und jetzt das Auslesen
PHP:
$content = file('datenbank.dat');
foreach($content as $val)
{
  $cont = explode('##', $val);
  print '<p align="center"><img src="'.htmlspecialchars($cont['0']).'"><br>'.htmlspecialchars($cont['1']).'</p>';
}

[phpf]file[/phpf] liest jede Zeile der Datei in ein Array.
Danach gehen wir mit [phpf]foreach[/phpf] das Array durch, splitten den Eintrag mit [phpf]explode[/phpf] auf und geben ihn mit der HTML Vorlage aus.
 
Zuletzt bearbeitet:
vielen Dank für den Code,

die Engabe klappt jetzt ohne Probleme:

if(isset($_POST['senden']))
{
$fp = fopen("bilder/daten.dat","a");
flock($fp, 2);
fputs ($fp, $newname.'##'.$_POST['freundname']."\n");
fclose($fp);
}

allerdings erhalte ich bei der Ausgabe die Fehlermeldung:

HTML:
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\pic\bilder\ausgabe.php on line 6
Array

Soweit ich verstanden habe, erwartet er einen Arry, auf der Seite von PHP-Fehlermeldungen steht, das dieser wiederum einen String erwartet.

Ich hab schon versucht, aber mit meinem Wissen bekomem ich den Fehler nicht weg...

ausgabe.php :
<?php

// Daten aus der Datenbank auslesen

$content = file('daten.dat');
foreach ($file as $val)
{
$cont = explode('##', $val);
print '<p align="center"><img src="'.htmlspecialchars($cont['0']).'"><br>'.htmlspecialchars($cont['1']).'</p>';
}

echo $content

?>
 
Sorry, war ein kleiner Fehler drin, hatte die Variable falsch übernommen.

PHP:
$content = file('datenbank.dat');
foreach($content as $val)
{
  $cont = explode('##', $val);
  print '<p align="center"><img src="'.htmlspecialchars($cont['0']).'"><br>'.htmlspecialchars($cont['1']).'</p>';
}

So muss es heißen.
 
Vielen dank, aber da währ ich nie drauf gekommen :)

Vielen Dank für eure Hilfe.
Wenn das script fertig ist, gibts das natürl. als Download
 
Zurück