CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
04.01.2007, 11:47:25
|
Anfänger
|
|
Registriert seit: Dec 2005
Beiträge: 44
|
|
mysql_real_escape_string
Dieser Code ist von einen Tutorial.:
PHP-Code:
$sql = "INSERT INTO $tabellenname
(absender, betreff, message, datum)
values (
'".mysql_real_escape_string($_POST['absender'], $link)."',
'".mysql_real_escape_string($_POST['betreff'], $link)."',
'".mysql_real_escape_string($_POST['message'], $link)."',
now() )
";
1. Ich verstehe nicht, wofür bei der Funktion "mysql_real_escape_string" am Anfang und am Ende noch ein Punkt steht.
2. Warum stehem die Values nochmals in doppelten Anführungsstrichen? Normalerweise werden diese doch nur mit einfachen Hochkomma angegeben, oder?
Um das ganze für mich selbst etwas zu vereinfachen, habe ich versucht, diesen SQL-String ohne die Funktion "mysql_real_escape_string" zu schreiben:
PHP-Code:
$sql = "INSERT INTO $tabellenname
(absender, betreff, message, datum) values
(" . $_POST['absender'] . ", " . $_POST['betreff'] . ", "
. $_POST['message'] . ", now())";
Es gibt zwar keine Fehlermeldung, aber die Daten werden nicht in die Datenbank geschrieben. Habe ich hier etwas übersehen?
|
04.01.2007, 11:58:55
|
Member
|
|
Registriert seit: Oct 2006
Beiträge: 610
|
|
AW: mysql_real_escape_string
So wie es in dem Tut steht ist es richtig und gut, warum willst du das ändern?!
Damit auch MySQL weiß, dass du ihm eine Zeichenfolge übergeben willst musst du die Zeichenfolgen in ' setzen.
MySQL "sieht" nur den SQL-Befehl den du ihm übergibst, woher soll er ohne ' wissen ob du jetzt eine Spalte oder einen Text meinst?
wenn du die ' noch einfügst sieht es genauso aus wie Dein Versuch (ein paar Leerzeichen fehlen vielleicht noch, aber die sind unerheblich)
Wie man Strings verkettet sollte dein Tut schon erwähnt haben..
Ergo, lass es so wie im Tut, das ist gut so!!
http://de.wikipedia.org/wiki/SQL-Injection
|
04.01.2007, 12:00:10
|
|
Anfänger
|
|
Registriert seit: Mar 2005
Ort: Berlin/Germany
Beiträge: 59
|
|
AW: mysql_real_escape_string
Kann mich da Benni nur anschließen - vereinfachen ist sicher bequem aber nicht besser und schon garnicht sicherer!
Liebe Grüße,
Matze K.
|
04.01.2007, 12:02:57
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: mysql_real_escape_string
Zitat:
Zitat von NEOX
1. Ich verstehe nicht, wofür bei der Funktion "mysql_real_escape_string" am Anfang und am Ende noch ein Punkt steht.
|
der . verbindet zeichenketten
Zitat:
2. Warum stehem die Values nochmals in doppelten Anführungsstrichen? Normalerweise werden diese doch nur mit einfachen Hochkomma angegeben, oder?
|
die zeichenkette die den sql-query enthält beginnt mit " also sollte sie auch mit " enden. innerhalb von sql-queries werden nicht-numerische werte mit ' umgeben. also
"select bla from blubb where bli = 'asdf'"
Zitat:
Um das ganze für mich selbst etwas zu vereinfachen, habe ich versucht, diesen SQL-String ohne die Funktion "mysql_real_escape_string" zu schreiben:
PHP-Code:
$sql = "INSERT INTO $tabellenname
(absender, betreff, message, datum) values
(" . $_POST['absender'] . ", " . $_POST['betreff'] . ", "
. $_POST['message'] . ", now())";
Es gibt zwar keine Fehlermeldung, aber die Daten werden nicht in die Datenbank geschrieben. Habe ich hier etwas übersehen?
|
sicher? auch sicher, dass du die sql-fehlermeldung abfängst und nicht auf eine von php hoffst?
|
04.01.2007, 12:03:49
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: mysql_real_escape_string
Zitat:
Zitat von Madokan
Kann mich da Benni nur anschließen - vereinfachen ist sicher bequem aber nicht besser und schon garnicht sicherer!
Liebe Grüße,
Matze K.
|
zumal die vereinfachte version ja offentsichtlich nicht funktioniert...
|
04.01.2007, 13:01:42
|
Anfänger
|
|
Registriert seit: Dec 2005
Beiträge: 44
|
|
AW: mysql_real_escape_string
Diese Vereinfachung habe ich nur temporär getan, um den Code besser zu verstehen. Ich habe verstanden, dass die Variablen mit den Punkt verkettet werden müssen und die Values in Hochkomma stehen. Warum aber im gesamten SQL-String zwischen den Hochkommas die Variablen erneut zwischen doppelten Anführungszeichen stehen, will mir nicht einleuchten.
Mal ganz einfach dargestellt: Die Variablen sind nur in Hochkommas gesetzt (Ich weiß, es werden nur leere Strings eingetragen - es geht jetzt nur um das Prinzip.)
PHP-Code:
$sql = "INSERT INTO $tabellenname
(absender, betreff, message, datum) values
('$absender', '$betreff', '$message', now())";
Jetzt mit doppelten Anführungszeichen und Hochkommas: (Wofür werden die doppelten Anführungszeichen mit der Variable verkettet?)
PHP-Code:
$sql = "INSERT INTO $tabellenname
(absender, betreff, message, datum) values
('" . $absender . "', '" . $betreff . "', '" . $message . "', now())";
Diese Version funktioniert ebenfalls (Trotzdem habe ich es nicht verstanden.)
PHP-Code:
sql = "INSERT INTO $tabellenname
(absender, betreff, message, datum) values
('" . $_POST['absender'] . "', '" . $_POST['betreff'] . "', '"
. $_POST['message'] . "', now())";
Geändert von NEOX (04.01.2007 um 13:03:23 Uhr)
|
04.01.2007, 13:12:06
|
Member
|
|
Registriert seit: Oct 2006
Beiträge: 610
|
|
AW: mysql_real_escape_string
Du musst ja irgendwie den String der an MySQL gesendet wird zusammenbauen, Strings baut man so zusammen:
PHP-Code:
$string = "teilstring1" . "teilstring2";
Wenn du jetzt ein ' im String haben willst musst du das angeben:
PHP-Code:
$string = "max'" . " auto";
Wenn du eine Variable hast kannst du das z.B. so verketten:
PHP-Code:
$var="auto"; $string = "max' " . $var;
Ich weiß nicht, wie man es noch beschreiben kann, damit bei dir der Groschen fällt ;)
Du verkettest im Prinzip einfach nur mehrere Strings.. Die "konstanten" Teile des SQL-Befehls sind dabei in " eingeschlossen, die variablen Teile werden über Variablen übergeben (auf die in diesem Fall noch eine Funktion angewendet wird);
Geändert von BenniG. (04.01.2007 um 13:13:06 Uhr)
|
04.01.2007, 13:34:31
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: mysql_real_escape_string
Zitat:
Zitat von BenniG.
Ich weiß nicht, wie man es noch beschreiben kann, damit bei dir der Groschen fällt ;)
|
Vielleicht mit den Bienen oder mit den Schmetterlingen? Nur Mur, Benni! <g>
Oder versuchs mal, mit sprintf() zu erklären. Dann wird der SQL-String zumindest übersichtlich.
|
04.01.2007, 14:29:14
|
Anfänger
|
|
Registriert seit: Dec 2005
Beiträge: 44
|
|
AW: mysql_real_escape_string
@BenniG:
Das bedeutet also, dass die Values vom SQL-String in Hochkommas gesetzt werden, damit SQL die Zeichenfolge erkennt und die doppelten Anführungszeichen sind für den Zusammenbau der Variablen?
@meikel:
Deine zwei Zeilen wären produktiver gewesen, wenn Du Deinen Auftrag gleich selbst hingeschrieben hättest.
Geändert von NEOX (04.01.2007 um 14:39:58 Uhr)
|
04.01.2007, 15:55:36
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: mysql_real_escape_string
Zitat:
Zitat von NEOX
@BenniG:
Das bedeutet also, dass die Values vom SQL-String in Hochkommas gesetzt werden, damit SQL die Zeichenfolge erkennt und die doppelten Anführungszeichen sind für den Zusammenbau der Variablen?
|
wie wäre es, statt mit sql rumzufuchteln, erst mal die grundlagen der programmierung verstehen zu wollen?
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 15:32:38 Uhr.
|