SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 04.01.2007, 11:47:25
NEOX NEOX ist offline
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?
Mit Zitat antworten
  #2  
Alt 04.01.2007, 11:58:55
BenniG. BenniG. ist offline
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
Mit Zitat antworten
  #3  
Alt 04.01.2007, 12:00:10
Benutzerbild von Madokan
Madokan Madokan ist offline
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.
__________________
[Atomicscript - PHP/MySQL]
http://www.atomicscript.de
[PHP 5 & MySQL 5 Bücher - Bestellen bei Amazon]
PHP 5 / MySQL 5 - Studienausgabe
PHP5 / MySQL 5 - Master Edition
PHP 5 - Studienausgabe (Enseleit/Kannengiesser)
Mit Zitat antworten
  #4  
Alt 04.01.2007, 12:02:57
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: mysql_real_escape_string

Zitat:
Zitat von NEOX Beitrag anzeigen
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?
Mit Zitat antworten
  #5  
Alt 04.01.2007, 12:03:49
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: mysql_real_escape_string

Zitat:
Zitat von Madokan Beitrag anzeigen
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...
Mit Zitat antworten
  #6  
Alt 04.01.2007, 13:01:42
NEOX NEOX ist offline
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)
Mit Zitat antworten
  #7  
Alt 04.01.2007, 13:12:06
BenniG. BenniG. ist offline
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)
Mit Zitat antworten
  #8  
Alt 04.01.2007, 13:34:31
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: mysql_real_escape_string

Zitat:
Zitat von BenniG. Beitrag anzeigen
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.
Mit Zitat antworten
  #9  
Alt 04.01.2007, 14:29:14
NEOX NEOX ist offline
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)
Mit Zitat antworten
  #10  
Alt 04.01.2007, 15:55:36
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: mysql_real_escape_string

Zitat:
Zitat von NEOX Beitrag anzeigen
@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?
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:47:10 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt