Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
29.12.2002, 20:32
Grim_Reaper



Sers.

Ich hatte heut langeweil und da dacht ich mir, fängst mal mit MySQL an.
Hab mit phpMyAdmin ne schöne Datenbank angelegt und wollte jetzt ein Tutorial durchgehen. Soweit hat auch alles wunderbar funktioniert, nur das eintragen per Script will nicht wirklich klappen. Was ist hier dran falsch? :

Zitat:

$eintrag= "INSERT INTO member (ID , Name , Aufgabe , ICQ ) VALUES ('$ID', '$Name', '$Aufgabe', '$ICQ')";

$eintragen = mysql_query($eintrag);

Die Variablen $ID, $Name, $Aufgabe und $ICQ sind vorher alle korrekt definiert worden und auch beim connecten gibt es keinen Fehler. Beim ausführen kommt auch keine Fehlermeldung, aber der Eintrag wird nicht erstellt.

--

Ich hab mal meine Sig ausgenistet , O O ,
`´°¤|Webmaster beim XdT-Clan|¤°`´°¤|Me at Deviantart|¤°`´
`´°¤|Quatronic|¤°`´`´°¤|Clubwear|¤°`´


Dieser Beitrag wurde am 29.12.2002 um 20:35 von Grim_Reaper bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
29.12.2002, 20:34
scus



$eintrag= "INSERT INTO member (ID , Name , Aufgabe , ICQ) VALUES ('$ID', '$Name', '$Aufgabe', '$ICQ')";

$eintragen = mysql_query($eintrag);

versuch mal so... (ohne '' in der ersten klammer)

--

sincères amitiés scus
--
Tand, Tand ist das Gebilde von Menschenhand

zum Seitenanfang zum Seitenende Profil || Suche
002
29.12.2002, 20:36
Grim_Reaper



ah, das hab ich grade editiert :D
Das hab ich aber auch schon probiert, das ging nicht. Passierte auch nix

--

Ich hab mal meine Sig ausgenistet , O O ,
`´°¤|Webmaster beim XdT-Clan|¤°`´°¤|Me at Deviantart|¤°`´
`´°¤|Quatronic|¤°`´`´°¤|Clubwear|¤°`´

zum Seitenanfang zum Seitenende Profil || Suche
003
29.12.2002, 23:50
Megge



ist ID ein auto inkrement ?
falls nein, wieso machst dus dann nicht ?
falls ja, wieso zur hölle versuchst du denn da ne selbst definierte ID reinzuquetschen ?
Sind die tabellen namen, resp. die feld-namen richtig ? (gross-/klein schreibung..)

--

zum Seitenanfang zum Seitenende Profil || Suche
004
30.12.2002, 14:17
CN



err wieso machst du nicht statt "$eintragen = mysql_query($eintrag);" direkt "mysql_query($eintrag);" o_O

--

zum Seitenanfang zum Seitenende Profil || Suche
005
30.12.2002, 16:15
Fraghunter



Grim_Reaper, ich hab das Gefühl, dass dir hier ein enig das Verständnis für das Verhältnis von php und MySQL fehlt. Php connectet zu dem MySQL Server (auch wenn MySQL auf dem selben PC läuft), und schickt Daten an den MySQL-Server, und dieser schickt Daten zurück.

So weit so gut. Das bedeutet aber natürlich auch, dass php NIEMALS eine Fehlermeldung ausgeben wird, wenn du etwas falsches an den Server schickst.

also "mysql_query('daswirdwohl kaum gehen')" giebt keine Fehlermedlung aus, da alles php interne Problemlos aubgelaufen ist. Was der Server zurückgiebt, interressiert den php-Parser wenig (Es sein denn, es ist irgendwas sinnolsesn, dann weis der Paser nicht, was er damit anfangen soll, und giebt möglichwise eine Fehlermeldung aus).

Aber jetzt zu deinem eigentlichen Problem. Da kann ich dann auch gleich CNs Frage beantworten. Wenn also der Parser keine Fehlermeldung ausgiebt, wie findest du dann raus, was das Problem ist?
Mit folgendem Code:Quellcode:
[color="#0000CC"]$eintragen[/color] = [color="#FF0000"]mysql_query[/color]([color="#0000CC"]$eintrag[/color]);
[color="#FF00FF"]if[/color] (![color="#0000CC"]$eintragen[/color]){
   [color="#FF00FF"]echo[/color] [color="#006600"]'Fehler!<br>'[/color];
   [color="#FF00FF"]echo[/color] [color="#FF0000"]mysql_errno[/color]() . [color="#006600"]": "[/color] . [color="#FF0000"]mysql_error[/color]();
}

Zur Erklärung:
da MySQL_Query ja eine Funktion ist, hat sie natürlich auch einen Rückgabewert. Das ist im Erfolgsfall ein Handler zu den zurückgegebenen Daten (auch wenn das eine leere Tabelle ist, so wie sie ein funktionierendes INSERT zurückgiebt), wenn aber ein Fehler auftritt, wird FALSE zurückgegeben.
Und da ein Handler immer TRUE ist, kann ich das also einfach mit if (!$eintragen) überprüfen.

Bei einem Fehler giebt MySQL aber noch die Fehlernummer und eine Beschriebung des Fehlers zurück. Diese beiden Dinge kann man mit mysql_errno() und mysql_error() abrufen.

Führe also einfach mal das obere Script aus, um zu sehen, was dein Problem ist. Eine andere Möglichkeit ist aber auch, den Befehl in phpMyAdmin einzugeben, da ist Parser eingebaut, und das giebt dir auch die Fehlermeldungen aus.

Hoffe, ich konnte weiterhelfen :)

--

Nihil timeo, nulla re opprimor, nulli periculo cedo.
www.TheDoenerKing.de


Dieser Beitrag wurde am 30.12.2002 um 16:28 von Fraghunter bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
30.12.2002, 16:43
CN



das war keine frage

ich hab mich nur gewundert weils bei ihm nirgends aufgerufen wird

man kanns übrigens auch so machen
mysql_query(blabla) or die(blablafehler)
bei die kann man dann auch mysql_error oso nehmen

und gibt schreibt man immernoch ohne "e"
das war auch schon vor nem halben jahr so und es hat sich noch nicht geändert ;)

--


Dieser Beitrag wurde am 30.12.2002 um 16:51 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
30.12.2002, 16:54
Fraghunter



lol
das giebts doch nicht :D

nunja, das die ist jedoch eine sehr unelegante lösung.
zum einen, wiel dann der Rest der Seite nicht ausgeführt wird (interresannt, falls man "Entwickler" ist), und zum anderen - für den Betrachter - weil dann die Seite einen inkorrekten Code ausgibt. Also z.B. der <body> und der <html> - Tag sind dann schonmal nicht geschlossen. Und falls das ganze noch in ner Tabelle drin ist, wirds noch schlimmer. Besonders da einige Browser tabellen erst anzeigen, wenn sie abgeschlossen sind.

btw. Das or-Konstrukt hab ich schon oft gesehen, udn ich weis auch, dass das funktioniert, jedoch hab ich in der php-dokumentation nichts dazu gefunden. Weis da wer, wo das steht?

--

Nihil timeo, nulla re opprimor, nulli periculo cedo.
www.TheDoenerKing.de


Dieser Beitrag wurde am 30.12.2002 um 16:58 von Fraghunter bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
30.12.2002, 23:21
Tron



Zitat:
or-Konstrukt

ich kenn mich zwar mit php net aus, aber das prinzip ist einfach erklaert.

es basiert auf der sog. lazy evaluation (faule auswertung)
bei A or B, falls schon A wahr ist, ist klar, dass der wahr or B auf jeden fall auch wahr ist, demnach braucht man B (also in diesem falle die() ) garnicht auswerten.

falls man eine sprache hat, die eager evaluatuion (fleissige auswertung) verwendet, dann funktioniert das natuerlich nicht, da auf jeden fall alle terme ausgewertet werden.

<edit>
fast vergessen: bei einem fehler gibt die mysql_query funktion 0 zurueck, das wird als falsch interpretiert. (0 ist falsch, alles andere wahr)
somit muss der zweite teil des or (also die() ) ausgewertet werden, um zu bestimmen, ob der gesamtausdruck wahr ist.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett


Dieser Beitrag wurde am 30.12.2002 um 23:24 von Tron bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
30.12.2002, 23:39
Fraghunter



ja, das wusste ich schon alles, nur das OR ja ein logischer operator ist, daran hab ich nicht gedacht.

Also geht doch auch
machwas() || machdasnit();
oder?

Aber eigentlich ist das ja schlicht und einfach falsch, sowas zu verwenden, da es unlogisch ist. Es basiert auf einer eigentlich nebensächlichen Eigenheit der Programmiersprache.

Wenn man schon schreibfaul ist, dann soll man wenigstens sowas schreiben:
machwas() ?: machdasnit()

--

Nihil timeo, nulla re opprimor, nulli periculo cedo.
www.TheDoenerKing.de


Dieser Beitrag wurde am 30.12.2002 um 23:41 von Fraghunter bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
010
30.12.2002, 23:48
Tron



auch fuer die zweite variante gehoert man an die wand gestellt...
was ist so schwer an einem if (!bla()) blubb();? (bzw. aequivalente in der jeweiligen programmiersprache)
klar, ist nicht so e1337aer, aber wir sind ja net beim ioccc

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
011
31.12.2002, 00:10
Fraghunter



ja, if wäre eigentlich am richtigsten, aber meine Methode ist eigentlich auch korrekt. Auch wenn sie ja eigenltich nur für Strings gedacht ist.

--

Nihil timeo, nulla re opprimor, nulli periculo cedo.
www.TheDoenerKing.de

zum Seitenanfang zum Seitenende Profil || Suche
012
31.12.2002, 00:35
CN



Zitat:
machwas() ?: machdasnit()
das is evil

--

zum Seitenanfang zum Seitenende Profil || Suche
013
31.12.2002, 01:38
Fraghunter



warum ist das evil?

--

Nihil timeo, nulla re opprimor, nulli periculo cedo.
www.TheDoenerKing.de

zum Seitenanfang zum Seitenende Profil || Suche
014
31.12.2002, 02:11
CN



weil das als alternative zu
if(bla) bla();
else bla();
gedacht is und nicht als alternative zu
if(bla) bla();

--

zum Seitenanfang zum Seitenende Profil || Suche
015
31.12.2002, 03:14
Fraghunter



mhh
stimmt :)

--

Nihil timeo, nulla re opprimor, nulli periculo cedo.
www.TheDoenerKing.de

zum Seitenanfang zum Seitenende Profil || Suche
016
01.01.2003, 14:35
Andy_



Und die Benutzung von OR/|| ist überhaupt nicht unelegant. Immerhin wurde die Short-Circuit-Evaluation Methode nicht nur zum Spaß an der Freude, sondern auch für Geschwindigkeitsvorteile erfunden. So wird bei if (!$eintragen){ zwangsweise eine Überprüfung stattfinden, die Zeit schluckt.

Ich selbst benutze eine solche ODER-Konstruktion an Stellen, an denen sie Vorteilhaft sein können.

--

42 Es gibt keinen Sinn des Lebens.

zum Seitenanfang zum Seitenende Profil || Suche
017
02.01.2003, 07:22
Fraghunter



versteh ich nicht. Wieso sollte das schneller sein?

überprüft werden muss so oder so. Das macht doch keinen Unterschied.

--

Nihil timeo, nulla re opprimor, nulli periculo cedo.
www.TheDoenerKing.de

zum Seitenanfang zum Seitenende Profil || Suche
018
02.01.2003, 09:59
Tron



ich versteh es auch net.
ein if ist bei dir tatsaechlich ein engpass bei einer datenbank? deine probleme moechte ich haben... ein festplattenzugriff dauert grob gepeilt 10e6 mal laenger als ein simples if

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
019
02.01.2003, 11:44
KhanRKerensky



Quellcode:$eintragen = mysql_query(...);
if (!$eintragen)
{
   echo 'Fehler!<br>';
   echo mysql_errno().': '.mysql_error();
}

Nur für die ifabfrage würde mich die Variablenzuweisung stören.
Kann man das doch lieber so schreiben:

Quellcode:
if (!mysql_query(...))
{
   echo 'Fehler!<br>';
   echo mysql_errno().': '.mysql_error();
}

Das ist in meinen Augen aber nicht gerade "schöner" Code. Schaut irgentwie dumm aus.
Dort würde ich wirklich lieber einen Einzeiler schreiben:
Quellcode:mysql_query(...) or echo 'Fehler!<br>'.mysql_errno().': '.mysql_error();

Zumindest schaut das im Code viel schöner aus.

Dabei intressiert mich weniger der Speed als die Lesbarkeit. Gerade bei einem langen Code würde ich mich an solchen eigentlich unnötigen IF-Abfragen stören.

*e*
Besser so Campi?

--

"[...] you're going to burn in a very special level of Hell. A level they reserve for child molesters and people who talk at the theater." - Book


Dieser Beitrag wurde am 02.01.2003 um 14:40 von KhanRKerensky bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
020
02.01.2003, 13:04
CN



ich find das aber nicht besonders lesbar wenn du einmal " " nimmst und einmal ' ' :P

--

zum Seitenanfang zum Seitenende Profil || Suche
021
02.01.2003, 14:38
KhanRKerensky



Ich benutz normalerweise ' '. Die " " kommen vom Copy´n´Paste :D

--

"[...] you're going to burn in a very special level of Hell. A level they reserve for child molesters and people who talk at the theater." - Book

zum Seitenanfang zum Seitenende Profil || Suche
022
02.01.2003, 18:18
Fraghunter



also ich finde die ORs eigentlich überhaupt nicht lesbar :P

--

Nihil timeo, nulla re opprimor, nulli periculo cedo.
www.TheDoenerKing.de

zum Seitenanfang zum Seitenende Profil || Suche