PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "MySQL" Formular


Snake23
2005-07-12, 13:14:05
Hallo,
Ich habe eine MySQL Datenbank mit einer Tabelle names "Test" und würde dort gerne einen Eintrag machen von meiner Homepage aus. Wie kann ich so ein Formular machnen, dass mir dann dort immer auf einer neuen Zeile einen Eintrag macht. Gut wäre auch wenn ich eine ID hätte pro Eintraf (aufsteigende Zahl).
MfG

Gast
2005-07-20, 11:47:57
ein formular könnte etwa so aussehen:

<form action="auswertung.html" method="get">
<input type="text" name="eingabefeld" />
</form>

die auswertung.html sieht dann so aus (php)

<?php // eingabefeld ist die variable in der der inhalt steht
mysql_connect($host,$user,$passwd);
$sql = "insert into TABELLENNAME values ' ". $eingabefeld ." ' ";
mysql_query($sql);
mysql_close();
?>

eine id könntest du machen indem du z.b. einen auto_increment wert
in der mysql-datenbank einstellst... (->struktur)
der wird dann automatisch mit raufgezählt

mfg

Marscel
2005-07-20, 16:01:53
Du musst dazu noch

$eingabefeld = $_POST['eingabefeld'];

setzen, sonst ist die Variable, deren Inhalt in die Datenbank geschrieben werden soll, leer.

Aqualon
2005-07-20, 16:34:24
Aber bitte NIE direkt Benutzereingaben ungeprüft in die Datenbank schreiben.

http://www.heise.de/security/artikel/43175

Aqua

Marscel
2005-07-20, 17:42:29
Sowas einbauen:

function sqlfix($var)
{
$var = str_replace("'","'",$var);
return $var;
}

$eingabefeld = sqlfix($_POST['eingabefeld']);

massa
2005-07-20, 22:38:27
Solange der "User" also die Webaplikation auf der DB nur mit eingeschränken Rechten arbeitet sollte der Schaden doch zumindest eingegrenzt sein. Oder lieg ich da jetzt komplett falsch? Oracle bietet ja eine ausgiebige Rechtevergabe. Wie siehts da bei MySQL aus?

Marscel
2005-07-20, 22:45:31
Unter Umständen natürlich ähnlich, du meldest dich ja mit mysql_connect(,$user,) mit einem bestimmten, festgelegten Account am Datenbankserver an.

MySQL besitzt auch eine Rechtevergabe, die z.B. bestimmte Aktionen blockiert, so kann etwa der Account "User" Tabellen in einer Datenbank anlegen, aber keine Datenbanken erstellen/löschen, sodass z.B. eine Formulareingabe

'; DROP DATABASE 'db';

nicht funktionieren würde. Aus diesem Grund sollte man sich unter Linux auch nicht mit root-Rechten einloggen. Mit einer Prüfung des Formularinhalts ist man aber eigentlich schon auf der sicheren Seite.

massa
2005-07-21, 10:05:51
Alles klar.
Mal ne andere Frage. Was ist das "'" in deinem Stringreplace?

Snake23
2005-07-21, 10:10:10
Es ist ein Zeichen. Und zwar dieses: '
Was für ein code weiss ich nicht.

/dev/NULL
2005-07-21, 10:16:33
kodiert ein ' " '

generell kann man mit int_val() und Konsorten schon mal Zahlen sanitizen, bei allen Textfeldern sollte man mit add_slashes, magic_quotes, str_replace, preg o.ä. zu Leibe rücken..

Und ganz wichtig NIEMALS irgendwo ein php_include($Ungeprüfte_Variable) machen..

Durcairion
2005-07-22, 08:33:38
Du musst dazu noch

$eingabefeld = $_POST['eingabefeld'];

setzen, sonst ist die Variable, deren Inhalt in die Datenbank geschrieben werden soll, leer.

Das ist so nicht richtig... die Inhalte der Eingabefelder (HTML) sind nach dem "Absenden" als globale Variablen vorhanden.

D.h. wenn du ein Eingabefeld hast was "Text" heist, und du beim absenden z.b. eine .php aufrust, dann hast du dort als "$text" den Inhalt und kannst diesen verarbeiten.

MfG,
soucy

mithrandir
2005-07-22, 10:34:07
Dere!

Bitte nicht halbklug schreiben, denn das wurde aufgrund von Sicherheitslücken ja in den letzten PHP-Versionen umgestellt. In aktuellen Versionen bist du also gezwungen, auf die Arrays $_POST und $_GET zuzugreifen.

Ich spreche aus eigener Erfahrung, wiel unser Webspace-Hoster diese Umstellung gemacht hat, ohne uns zu informieren und dann auf einmal gar nichts mehr funktionierte ; - )

bye, mith

The_Invisible
2005-07-22, 11:00:35
Das ist so nicht richtig... die Inhalte der Eingabefelder (HTML) sind nach dem "Absenden" als globale Variablen vorhanden.

D.h. wenn du ein Eingabefeld hast was "Text" heist, und du beim absenden z.b. eine .php aufrust, dann hast du dort als "$text" den Inhalt und kannst diesen verarbeiten.

MfG,
soucy

aber auch nur wenn das Feature eingeschalten ist was ja auch ein gewisses risiko darstellt da alle per URL übergebenen Variablen ebenfalls global sind (was dazu verwendet werden kann um systembefehle auszuführen)

benutzereingaben direkt in eine datenbank schreiben ist wirklich nicht sehr sicher, am besten man lässt nur spezielle werte zu bzw überprüft sie mit einer REGExp:

Normale Eingaben: preg_match("/^([a-zA-Z]*)$/",$field_to_test);
Zahleneingaben: preg_match("/^([0-9]*)$/",$field_to_test);

wenn ein unerlaubtes zeichen verwendet wird bekommt der eingeber eben nen fehler vorgeworfen, außerdem kann man da keine befehle einschleußen

mfg