HTML in Formular verbieten

Dr Dau hat gesagt.:
Hallo!
Die benötigte Funktion wurde von RS9999 schon angewand..... aber von den Nachfolgern wieder verworfen ---> mysql_real_escape_string().

Gruss Dr Dau

Hmm, ich habe mir das mal genauer angeschaut, habe allerdings einige Fragen:

in dem Beispiel von php.net verwenden sie auch noch folgenden Befehl:

PHP:
           quote_smart($_POST['username']),
           quote_smart($_POST['password']));

Hier ersteinmal das Beispiel:

<?php
// Variablen absichern
function quote_smart($value)
{
// Ueberfluessige Maskierungen entfernen
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// In Anfuehrungszeichen setzen, sofern keine Zahl
// oder ein numerischer String vorliegt
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}

// Verbinden mit der Datenbank
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());

// Erstellen eines sicheren Query
$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
quote_smart($_POST['username']),
quote_smart($_POST['password']));

mysql_query($query);
?>

So: um jetzt mal meine Situation zu schildern: Ich biete meinen Usern ein Kontakt Formular an, d.h. die User ( müssen nciht registriert sein) können mir einen Text über ein Formular schreiben, was dann in meinem Admincp angeziegt wird.
Muss ich dann bei jder query diesen string nutzen, d.h. also bei SELECT im admincp und bei INSERT auf der mainpage?
was genau bewirkt dieses
PHP:
quote_smart($_POST['password']));
das raff ich net ganz.

dieser Befehl:
PHP:
mysql_real_escape_string()
Ist mir in der Zwischenzeit eigentlich einigermaßen klar geworden. er säuber die variable, bevor die Daten gespeicher werden, oder?

Also ich hab mich wirklich damit befasst, bräuchte allerdings noch ein wenig aufklärung, da das Thema Sicherheit doch wirklich wichtig ist.
 
um das thema mal wieder aufzugreifen:

ich hab jetzt folgende Code (der aber leider nicht funktioniert, denn es kommt nur eine weiße Seite):


PHP:
<?php
    error_reporting(E_ALL);

    include 'config.php';
    // Konfigurationsdatei laden

    @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error());
    mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());


include "style/header.tpl";


?>
<p>
Sie haben Fragen oder möchten uns aus einem anderen Grund kontaktieren? Hier haben sie die Möglichkeit.

<form action="feed.php" method="post">
	<input type="text" name="name" value="Name"/>
	<input type="text" name="mail" value="Email Adresse"/>
	<br/><br/>Ihre Nachricht: <br/><textarea name="data" rows="10" cols="50"></textarea>
	<br/><input type="submit" value="Senden"/>
	<input type="reset" value="Verwerfen"/>
</form>

<?php
    if(empty($_POST['data'])) {
        echo "Bitte füllen sie alles sorgfälltig aus.";
	break;
    }

mysql_query ("INSERT INTO feedback (date,name,mail,data) values (NOW(),'" . $_POST['name'] . "','" . $_POST['mail'] . "',"'.mysql_real_escape_string(strip_tags($_POST['data'])).'")");
 echo " Vielen Dank für Ihre Post. Das Senden war erfolgreich.";


include "style/footer.tpl";
?>

Die weiße seite liegt an dem
PHP:
"'.mysql_real_escape_string(strip_tags($_POST['data'])).'"

Was genau ist da denn falsch?

Achja, noch eine Frage, wie mach ich denn, dass Leerzeilen in einem Formular auch gespeichert werden?

gruß
 
Versuche es einmal so:

PHP:
<?php 

   $insert ='INSERT INTO 
                          `feedback` 
                    SET 
                          `date` = NOW(),
                          `name` = "'.mysql_real_escape_string($_POST['name']).'",
                          `mail` = "'.mysql_real_escape_string($_POST['mail']).'",
                          `data` = "'.mysql_real_escape_string(strip_tags($_POST['data']).'"
             '; 

    mysql_query($insert) or die(mysql_error());
 ?>
 
Zuletzt bearbeitet:
RS9999 hat gesagt.:
Versuche es einmal so:

PHP:
<?php 

   $insert ='INSERT INTO 
                          `feedback` 
                    SET 
                          `date` = NOW(),
                          `name` = "'.$_POST['name'].'",
                          `mail` = "'.$_POST['mail'].'",
                          `data` = "'.mysql_real_escape_string(strip_tags($_POST['data']).'"
             '; 

    mysql_query($insert) or die(mysql_error());
 ?>

hi, geht genausowenig.

gruß
 
Wo werden denn Deine Daten ausgelesen?
Hast Du einmal in der Datenbank nach geschaut ob die Daten nicht doch vorhanden sind?
Mit dem Programm "phpmyadmin.php" kannst Du das doch prüfen! Sind alle $_POST Daten vorhanden?

Prüfe einmal mit:

PHP:
print_r($_POST);
 
1. wenn du schon mysql_real_escape_string() teilweise weg lässt, dann kannst Du es auch gleich ganz weg lassen.
2. solltest Du ein Parse-Error bekommen.
 
Zurück