WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 02.09.2007, 10:07   #11
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 40
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

okeeee, nachdem ich schlecht geschlafen habe hab ich mich gleich in der Früh zusammengerissen und etwas herumgebastelt.

Jetzt bekomme ich immerhin 2 der 4 Variablen in die Datenbank (very strange though...)?

Code:
if (isset($_POST['FName']) && isset($_POST['FAdresse']) && isset($_POST['FMail'])) {
    // Connect

    $link = mysql_connect('localhost', 'user', 'pass');
    
    $select = mysql_select_db('tabelle', $link);

    if(!is_resource($link)) {

        echo "Failed to connect to the server";

    } elseif(!$select) {
        
        echo "Failed to select database";

    } else {
       
        // Reverse magic_quotes_gpc/magic_quotes_sybase effects on those vars if ON.

        if(get_magic_quotes_gpc()) {
            if(ini_get('magic_quotes_sybase')) {
                $name        = str_replace("''", "'", $_POST['FName']);
                $adresse = str_replace("''", "'", $_POST['FAdresse']);
				$mail = str_replace("''", "'", $_POST['FMail']);
				
            } else {
                $name        = stripslashes($_POST['FName']);
                $adresse = stripslashes($_POST['FAdresse']);
				$mail = stripslashes($_POST['FMail']);
				
            }
        } else {
            $name        = $_POST['FName'];
            $adresse = $_POST['FAdresse'];
			$email = $_POST['FMail'];
        }
			$datum=date("d.m.y")
        // Make a safe query
        $query = sprintf("INSERT INTO target (FName, FAdresse, FMail, Datum) VALUES ('%s', '%s', '%s', %d)",
                    mysql_real_escape_string($name, $link),
                    mysql_real_escape_string($adresse, $link),
                    mysql_real_escape_string($email, $link),
					mysql_real_escape_string($datum, $link));

        mysql_query($query, $link);
		
		$result = mysql_query($sql); 
if (!$result) { 
    die('Ungültige Abfrage: ' . mysql_error()); }

        if (mysql_affected_rows($link) > 0) {
            echo "Eintrag erfolgt\n";
        }
    }
} else {
    echo "Bitte kontrolliere deine Einträge\n";
}}
?>
Antwort:
Code:
Ungültige Abfrage: Query was empty
dabei schreibt er "Name" und "Adresse" in die Datenbank, nur Mail und Datum nicht...

falls mir da noch jemand helfen kann bin ich überglücklich
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 02.09.2007, 11:08   #12
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

Hallo,

E-Mail geht vermutlich aus folgendem Grund nicht:
Beim Basteln des sql-Statements verwendest du $email, vorher gibt es aber eine Variable $mail und $email, vermutlich sollten die alle $email heißen.

also die beiden Zeilen ändern:
$mail = str_replace("''", "'", $_POST['FMail']);
$mail = stripslashes($_POST['FMail']);

Das Datum musst du afaik auch unter Hochkomma setzen und als String uebergeben, dh.
$query = sprintf("INSERT INTO target (FName, FAdresse, FMail, Datum) VALUES ('%s', '%s', '%s', '%s')", ......

mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 02.09.2007, 11:17   #13
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 40
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

sry, das habe ich schon ausgebessert, mein Fehler, aber er schreibt trotzdem nur 2 Einträge...

Code:
 if(get_magic_quotes_gpc()) {
            if(ini_get('magic_quotes_sybase')) {
                $name        = str_replace("''", "'", $_POST['FName']);
                $adresse = str_replace("''", "'", $_POST['FAdresse']);
				$email = str_replace("''", "'", $_POST['FMail']);
				
            } else {
                $name        = stripslashes($_POST['FName']);
                $adresse = stripslashes($_POST['FAdresse']);
				$email = stripslashes($_POST['FMail']);
				
            }
        } else {
            $name        = $_POST['FName'];
            $adresse = $_POST['FAdresse'];
			$email = $_POST['FMail'];
        }
			$datum=date("d.m.y")
        // Make a safe query
        $query = sprintf("INSERT INTO target (FName, FAdresse, FMail, Datum) VALUES ('%s', '%s', '%s', '%s')",
                    mysql_real_escape_string($name, $link),
                    mysql_real_escape_string($adresse, $link),
                    mysql_real_escape_string($email, $link),
					mysql_real_escape_string($datum, $link));
In der Datenbank habe ich jetzt alle mal auf vchar gestellt, also da kanns eigentlich nicht liegen...
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 02.09.2007, 11:25   #14
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

Lass dir mal $query ausgeben (echo $query; ), dann weißt du zumindest, was er in die DB eintrage will. Du kannst ja statt dem Formularparametern einfach mal:
INSERT INTO target (FName, FAdresse, FMail, Datum) VALUES ('a','b','c','d')
probieren, dann weißt du obs an der Datenbank liegt.

der Fehler "Ungültige Abfrage: Query was empty" liegt daran:
mysql_query($query, $link);
$result = mysql_query($sql);

$sql gibts nicht, daher die Meldung. müsste so aussehen:
$result = mysql_query($query, $link);
T.dot ist offline   Mit Zitat antworten
Alt 02.09.2007, 11:49   #15
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 40
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

abcd funktioniert problemlos... also kriegt er scheinbar fie Variablen FEmail und Datum nicht...

Code:
if(get_magic_quotes_gpc()) {
            if(ini_get('magic_quotes_sybase')) {
                $name = str_replace("''", "'", $_POST['FName']);
                $adresse = str_replace("''", "'", $_POST['FAdresse']);
				$email = str_replace("''", "'", $_POST['FMail']);
				
            } else {
                $name = stripslashes($_POST['FName']);
                $adresse = stripslashes($_POST['FAdresse']);
				$email = stripslashes($_POST['FMail']);
				
            }
ist scheinbar schuld, denn ohne funktioniert es!

aber ich hätte das gerne wegen den Injection-Probleme...

danke für die Hilfe bis jetzt! Alleine verzweifle ich
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 02.09.2007, 13:40   #16
void
Hero
 
Benutzerbild von void
 
Registriert seit: 26.07.2001
Ort: Wien
Beiträge: 811


Standard

mein tipp:
so lästig es sein mag, geh das script schritt für schritt durch und mache vor und nach einer änderung eine ausgabe z.b. mittels dump_var(); - damit siehst du genau, wo der fehler liegt... wenn du also eh schon vermutest, dass der fehler bei dem "injection"-teil liegt, mache genau dort deine ausgaben. somit lässt sich jeder fehler finden
____________________________________
nobody is perfect
void ist offline   Mit Zitat antworten
Alt 02.09.2007, 13:56   #17
iG0r
Gesperrt
 
Registriert seit: 14.08.2003
Alter: 48
Beiträge: 915


Standard

mysql_real_escape_string gegen mysql_escape_string tauschen, sind ja keine binary datas.

Aber irgendwie schaut mir das alles viel komplizierter aus, als es sein müsste Glaub das Formular müsste mal entwirrt werden.

Wenn du mehrere Schritte machen willst, kannst du die Daten in Cookies, Session oder mit jedem Punkt als Variable im Post mit neu übergeben, einfach als input type="hidden" anlegen. Ich würde aber generell schon zur Sicherheit keine global Var wie $_POST direkt in ein sql-query schreiben.
iG0r ist offline   Mit Zitat antworten
Alt 02.09.2007, 15:34   #18
reemrev
Inventar
 
Registriert seit: 31.01.2000
Beiträge: 1.706

Mein Computer

Standard

Ist das nicht alles zu kompliziert?
Verstehe außerdem nicht ganz die stripslashes, ich meine, gehts nicht auch ohne die vielen ifs?:

$name = mysql_escape_string(striptags($_POST['FName']));
...
...

und danach die 'gesäuberten' Variablen in die DB.
reemrev ist offline   Mit Zitat antworten
Alt 02.09.2007, 15:59   #19
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 40
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von iG0r
mysql_real_escape_string gegen mysql_escape_string tauschen, sind ja keine binary datas.

Aber irgendwie schaut mir das alles viel komplizierter aus, als es sein müsste Glaub das Formular müsste mal entwirrt werden.

Wenn du mehrere Schritte machen willst, kannst du die Daten in Cookies, Session oder mit jedem Punkt als Variable im Post mit neu übergeben, einfach als input type="hidden" anlegen. Ich würde aber generell schon zur Sicherheit keine global Var wie $_POST direkt in ein sql-query schreiben.
danke euch! Jetzt geht es.

Beschäftige mich ja nur sporadisch mit PHP, daher auch wenig Plan *g* Den Code hab ich aus meinem Buch zusammengesucht, seltsam, dass die _real_ verwendet haben, in einem fast gleichen Beispiel.

Jetzt läufts und ich bin glücklich *g*

Thx!
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   Mit Zitat antworten
Alt 02.09.2007, 16:12   #20
Chrisi99
Inventar
 
Benutzerbild von Chrisi99
 
Registriert seit: 22.12.2002
Alter: 40
Beiträge: 2.644

Mein Computer

Chrisi99 eine Nachricht über ICQ schicken
Standard

ah ganz übersehen

werde versuchen, ob das auch einfacher geht!

danke für den Tipp!

Lg
Christoph
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon.

Wer schreibt, der bleibt!
Chrisi99 ist offline   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 an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:30 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag