Autor Beitrag
andras
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 460

Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
BeitragVerfasst: Di 10.07.07 12:08 
hi!
ich such mittlerweile sicher schon 3 stunden nach dem blöden fehler und cih find ihn nicht... :(
immer wenn ich eine abfrage machen möchte scheitert es schon an der verbindung, sowohl mit localhost (xampp) als auch auf meinem webspace....
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
<? session_start();
include "funktionen.php";
...
$db_link = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
echo $db_link;
                        if ($db_link)
                        {

                        if (mysql_select_db(MYSQL_DATABASE, $db_link))
                        {
                                $sql = "INSERT INTO
                                karten, karten_bestellungen
                                        (id,vorname,nachname,strasse,plz_ort,email,telefon,erwachsene,schueler,bearbeitet)
                                        VALUES
                                        ($id,$vorname,$nachname,$strasse,$plz_ort,$email,$telefon,$erwachsene,$schueler,FALSE);";
                                if(!mysql_query($sql));
                                                       {Header('Location: fehler.php?errornumber=2');
                                                       }
                       }
                       else
                       {
                       header('Location: fehler.php?errornumber=3');
                       }
                       }
                       else
                       {
                       header('Location: fehler.php?errornumber=2');
                       }
@mysql_close($db_link);?>

funktionen.php:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
<?
define('MYSQL_HOST','localhost');
define('MYSQL_USER','root');
define('MYSQL_PASS','');
define('MYSQL_DATABASE','karten');
?>


hoff irgendjemand kann mir helfen...
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Di 10.07.07 13:10 
Schreib mal hinter die Connection und die DB-Auswahl:
ausblenden Quelltext
1:
 OR die(mysql_error());					

Also z.B.:
ausblenden Quelltext
1:
mysql_select_db(...) OR die(mysql_error());					

Was für eine Fehlermeldung wird ausgegeben?

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Arne K.
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
EE-Autor
Beiträge: 112


C# (VS 2008 Professional)
BeitragVerfasst: Di 10.07.07 14:25 
... und lies dir ein Tutorial zum Thema SQL-Injection durch ;)
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Di 10.07.07 14:42 
Vielleicht macht er die Variablen ja in dem fehlenden Part (...) unschädlich.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Arne K.
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
EE-Autor
Beiträge: 112


C# (VS 2008 Professional)
BeitragVerfasst: Di 10.07.07 14:47 
Hoffentlich ;)
andras Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 460

Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
BeitragVerfasst: Mi 11.07.07 11:40 
user profile iconArne K. hat folgendes geschrieben:
... und lies dir ein Tutorial zum Thema SQL-Injection durch ;)

habs gemacht, jaja wär ja schon wenns einmal ohne diese ganzen apostrophe und anführungszeichen ginge, zu schön um wahr zu sein *gg*

user profile iconGTA-Place hat folgendes geschrieben:
Vielleicht macht er die Variablen ja in dem fehlenden Part (...) unschädlich.

sind nur keine variablen sondern konstanten...

user profile iconGTA-Place hat folgendes geschrieben:
Was für eine Fehlermeldung wird ausgegeben?

Gar keine, weil jetzt gehts mehr oder weniger...
also was war falsch:
ich habe geschrieben:
ausblenden Quelltext
1:
2:
3:
4:
if(!mysql_query($sql));
      {
          Header('Location: fehler.php?errornumber=2');
      }

mysql_query ist aber kein boolean, oder? dh irgendwie scheint der immer weiterzuleiten, auch wenns in der db drinnen ist...
außerdem ist ein tippfehler drinnen, weil errornummer 2 (im GET) auch die errornummer von "keine verbindung" ist.... muss also 4 heißen...

aber jetzt noch ganz kurz eine frage:
nachdem das mit dem !mysql_query() ja nicht zu funktionieren scheint...
wie kann ich das sonst realisieren?
Bereits schon jetzt Danke!! für alle folgenden Antworten und vielen Dank für alle bisherigen!!!
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 11.07.07 12:21 
Theoretisch lieftert mysql_query eine Fehlermeldung: de.php.net/manual/de...tion.mysql-query.php .

Du musst beachten: der Befehl liefert nur false zurück, wenn die Übergabe falsch war (Syntaxfehler etc.). Du erhälst keine Information über die Abfrageergebnisse selber (also obs Datensätze gibt). Dafür sind andere Befehle da!
andras Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 460

Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
BeitragVerfasst: Mi 11.07.07 12:28 
ok, danke!
habs jetzt so gelöst und das scheint zu funktionieren:
statt:
ausblenden Quelltext
1:
2:
3:
4:
if(!mysql_query($sql));
      {
          Header('Location: fehler.php?errornumber=2');
      }


hab ich:
ausblenden Quelltext
1:
2:
3:
4:
5:
$result=mysql_query($sql);
if(!$result);
      {
          Header('Location: fehler.php?errornumber=2');
      }

geschrieben.
jetzt funktioniert alles.
Also nochmals vielen Dank!!!!
Arne K.
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
EE-Autor
Beiträge: 112


C# (VS 2008 Professional)
BeitragVerfasst: Mi 11.07.07 12:31 
user profile iconandras hat folgendes geschrieben:

user profile iconGTA-Place hat folgendes geschrieben:
Vielleicht macht er die Variablen ja in dem fehlenden Part (...) unschädlich.

sind nur keine variablen sondern konstanten...


Zitat:
VALUES ($id,$vorname,$nachname,$strasse,$plz_ort,$email,$telefon,$erwachsene,$schueler, NULL)

Das sind definitiv keine Konstanten. Ich hoffe, du hast das Escapen nicht auf die Verbindungsdaten bezogen?



Ansonsten: Tritt ein Fehler auf, liefert dir den mysql_error(). Rückwärtsschluss: Liefert dir mysql_error() nichts, gab es auch seitens MySQL keinen Fehler.



mysql_query() gibt dir je nachdem, was du für eine Anfrage sendest, unterschiedliche Typen zurück.
Wenn du eine Abfrage durchführst, die ein Resultat liefert (also z.B. SELECT), kannst du z.Bsp. prüfen, ob es sich um eine Ressource handelt (is_resource()).
Ansonsten würde ich nicht das Result direkt prüfen, sondern mit mysql_fetch_row() (oder -_assoc()) die erste Zeile des Datensatzes extrahieren, und dann mit einem einfachen if(isset($data[0])) bzw. bei -_assoc() dem Index eines beliebigen Schlüssels prüfen, ob ein Datensatz zurück geliefert wurde. Das prüft dir aber nur, ob mindestens ein Datensatz zurück geliefert wurde! Nicht, ob deine SQL-Frage fehlerhaft war. Dafür siehe wieder mysql_error().

EDIT:
@andras: Kann ich mir nicht vorstellen; die beiden Quellcodes sind inhaltlich identisch. Du hast nur eine temporäre Zwischenvariable eingefügt. Wenn es jetzt funktioniert, das vorher aber nicht tat, dann liegt es gewiss nicht an der von dir beschriebenen Änderung ;)
andras Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 460

Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
BeitragVerfasst: Mi 11.07.07 12:46 
user profile iconArne K. hat folgendes geschrieben:
user profile iconandras hat folgendes geschrieben:

user profile iconGTA-Place hat folgendes geschrieben:
Vielleicht macht er die Variablen ja in dem fehlenden Part (...) unschädlich.

sind nur keine variablen sondern konstanten...


Zitat:
VALUES ($id,$vorname,$nachname,$strasse,$plz_ort,$email,$telefon,$erwachsene,$schueler, NULL)

Das sind definitiv keine Konstanten. Ich hoffe, du hast das Escapen nicht auf die Verbindungsdaten bezogen?

ok, ganz sooooo schlecht bin ich auch nicht drauf *gg*
hab gedacht, user profile iconGTA-Place hat das auf meine verbindungsdaten (MYSQL_HOST etc) bezogen, weil das sind ja konstanten...

user profile iconArne K. hat folgendes geschrieben:
Ansonsten: Tritt ein Fehler auf, liefert dir den mysql_error(). Rückwärtsschluss: Liefert dir mysql_error() nichts, gab es auch seitens MySQL keinen Fehler.
mysql_query() gibt dir je nachdem, was du für eine Anfrage sendest, unterschiedliche Typen zurück.
Wenn du eine Abfrage durchführst, die ein Resultat liefert (also z.B. SELECT), kannst du z.Bsp. prüfen, ob es sich um eine Ressource handelt (is_resource()).
Ansonsten würde ich nicht das Result direkt prüfen, sondern mit mysql_fetch_row() (oder -_assoc()) die erste Zeile des Datensatzes extrahieren, und dann mit einem einfachen if(isset($data[0])) bzw. bei -_assoc() dem Index eines beliebigen Schlüssels prüfen, ob ein Datensatz zurück geliefert wurde. Das prüft dir aber nur, ob mindestens ein Datensatz zurück geliefert wurde! Nicht, ob deine SQL-Frage fehlerhaft war. Dafür siehe wieder mysql_error().

na gut, ich werd mich einmal mit dem mysql_error näher befassen, der sollte im manual ja ausreichend beschrieben sein, nehme ich an... ansonsten meld ich mich halt wieder :)

user profile iconArne K. hat folgendes geschrieben:
@andras: Kann ich mir nicht vorstellen; die beiden Quellcodes sind inhaltlich identisch. Du hast nur eine temporäre Zwischenvariable eingefügt. Wenn es jetzt funktioniert, das vorher aber nicht tat, dann liegt es gewiss nicht an der von dir beschriebenen Änderung ;)

ist mir auch irgendwie komisch vorgekommen....
Christian V.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 311

Win Xp Prof
Turbo Delphi 2005
BeitragVerfasst: Mi 11.07.07 13:22 
Zitat:
VALUES ($id,$vorname,$nachname,$strasse,$plz_ort,$email,$telefon,$erwachsene,$schueler, NULL)


Soviel ich weiss müssen alle felddaten in Singelquotes stehen.
Also '$id','$vorname' usw.

//Edit: Zudem musst du NULL nicht extra angeben, kannst einfach die Spalte weglassen(Aber nur wenn kein Standardwert definiert wurde).

_________________
Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?


Zuletzt bearbeitet von Christian V. am Mi 11.07.07 13:34, insgesamt 1-mal bearbeitet
andras Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 460

Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
BeitragVerfasst: Mi 11.07.07 13:30 
jaja, danke!!!
das hab ich schon gelöst...
Arne K.
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
EE-Autor
Beiträge: 112


C# (VS 2008 Professional)
BeitragVerfasst: Mi 11.07.07 13:34 
user profile iconChristian V. hat folgendes geschrieben:
Soviel ich weiss müssen alle felddaten in Singelquotes stehen.

Nein, das trifft nur auf Stringliterale zu; numerische Datentypen werden ohne Hochkommata geschrieben ;)
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 11.07.07 13:35 
Was man auch mit reinschreiben sollte: wäre das ` bei Tabellenspalten und Tabellennamen ;).
Christian V.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 311

Win Xp Prof
Turbo Delphi 2005
BeitragVerfasst: Mi 11.07.07 13:37 
@Arne K. Ja stimmt, hast Recht :wink:.

_________________
Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mi 11.07.07 13:37 
Lass ich immer weg, ist mir zu blöd mit den Akzenten und sieht sch... nicht so hübsch aus.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Arne K.
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
EE-Autor
Beiträge: 112


C# (VS 2008 Professional)
BeitragVerfasst: Mi 11.07.07 13:42 
user profile iconGTA-Place hat folgendes geschrieben:
Lass ich immer weg, ist mir zu blöd mit den Akzenten und sieht sch... nicht so hübsch aus.

Mit ein Grund, warum man das nicht machen sollte, ist wohl eher, wenn man bedenkt, wofür die "Akzente" eingeführt wurden: Nämlich um Spalten mit erweiterten Bezeichnungen zu unterstützen. Durch die Backticks kannst du z.Bsp. auch Spalten handhaben, die "Eine sehr merkwürdig benannte Spalte" heißen. Das ist stilistisch und designtechnisch aber äußerst fragwürdig, da die meisten Spalten wohl mit Benennungen wie "userId", "productTitle", "postText" etc. wesentlich sinnvoller und kürzer benannt werden können.

Der eigentliche Grund, warum ich von den Backticks abraten würde, ist aber die Portabilität! Bei der Wahl der Zeichen zur Begrenzung von Spaltennamen und -aliasen bastelt nämlich jede Datenbank ihren eigenen Brei. Unter MSSQL werden die Bezeichner z.B. nicht in Backticks eingeschlossen, sondern in eckige Klammern. Was tun, wenn du nun ein umfangreiches Projekt von einer Datenbank zur anderen Migrieren möchtest? -> Fatal! Und das selbst, wenn du eine Wrapperklasse verwendest.

Ergo: Gutes Datenbankdesign entwerfen, sinnvolle und nach Möglichkeit nur aus von ASCII gedeckten Zeichen bestehende Tabellennamen verwenden, keine datenbankspezifischen Extrawürste braten und gut ist. ;)