PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Query doppel!?


Viburnum opulus
05.12.2003, 13:48:50
Ich habe folgendes extrem merkwürdige Problem


function inputnews($uberschrift, $newstext){
$qer54 = "INSERT INTO `news` SET `uberschrift`='$uberschrift', `newstext`='$newstext', `autor`='$bla[0]', `datum`=NOW();";
$anf54 = mysql_query($qer54);
echo mysql_error();

}


Soweit ich verstehe korrekt, nun für er diese Query aber zweimal aus, einmal mit den übergebenen Parametern ($newstext,...) und ein zweitesmal ohne diese Parameter, er fügt also die richtige Zeile und eine leere Zeile (bis aufs datum) in die tabelle ein.

Nun könnte man denken, er ruft die Function 2mal auf, aber dies habe ich mit nem echo "test"; überprüft und dies ist nicht der Fall.

Nev
05.12.2003, 14:38:40
Hi Viburnum opulus

Erst mal willkommen.

Die Funktion selbst führt das SQL nur einmal aus.

Daher vermute ich mal das sie 2mal aufgerufen wird.

Viburnum opulus
05.12.2003, 16:06:14
Original geschrieben von Nev
Hi Viburnum opulus

Erst mal willkommen.

Die Funktion selbst führt das SQL nur einmal aus.

Daher vermute ich mal das sie 2mal aufgerufen wird.


wie gesagt um das zu testen habe ich ja echo "test"; eingefügt, folglich müsste bei einem doppelaufruf auch zweimal "test" auf dem bildschirm erscheinen, tut es aber eben nicht!

Ben20
05.12.2003, 16:09:46
Das was Du vorhast ist kein Insert sondern ein Update - wahrscheinlich versucht mysql das irgendwie hinzubiegen und fügt deshalb zwei Zeilen ein (einen für Update, einen für Insert)

Wenn Du das einfügen willst geht das so:

INSERT INTO news (uberschrift, newstext, ...) VALUES('$uberschrift', '$newstext', ...)

Viburnum opulus
05.12.2003, 16:16:18
Original geschrieben von Ben20
Das was Du vorhast ist kein Insert sondern ein Update - wahrscheinlich versucht mysql das irgendwie hinzubiegen und fügt deshalb zwei Zeilen ein (einen für Update, einen für Insert)

Wenn Du das einfügen willst geht das so:

INSERT INTO news (uberschrift, newstext, ...) VALUES('$uberschrift', '$newstext', ...)

Nein beide Schreibweisen sind bei MySQL erlaubt. Habe auch die andere probiert, selbes Problem.

Auch mit Apache, PHP und MySQL ist alles in Ordnung, andere Scripts laufen perfekt.

Viburnum opulus
05.12.2003, 16:44:49
Habe jetz nochmal den kompletten Quelltext auskommentiert, der nix mit der Funktion zu tun hat, Immernoch dieser Fehler. scheint so als ob php intern diese Funktion zweimal startet. Im Apachelog steht leider kein Fehler drin.

Im Table-Dump sehe ich auch nichts ungewöhnliches:
CREATE TABLE news (
id tinyint(4) NOT NULL auto_increment,
uberschrift text NOT NULL,
newstext text NOT NULL,
autor text NOT NULL,
datum date default NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;



Sie sehen einen verdammt doof guckenden Info-Studenten :(

Ben20
05.12.2003, 17:02:45
Hm, seltsam, seltsam. Vielleicht ein wenig mehr Quelltext mal posten, evtl. sieht mans dann!

Viburnum opulus
05.12.2003, 17:19:09
http://wuw-server.kicks-ass.net/sqlproblem.txt

das is der rest den ich nicht auskommentiert habe. nicht mehr viel, aber scheinbar immernoch fehlerhaft....

achja das ding läuft auf nem WIN2k Server

Viburnum opulus
05.12.2003, 18:16:04
verstehe nicht wieso, aber nu gehts.

folgendes geändert, falls es jemanden interessiert

die daten an die Funktion wurden über nen Formular geschickt.
dies hatte die form
<form action="index.php?show=inputnews&PHPSESSID=<? echo session_id(); ?>&menushow=3" method="post">

daraus machte ich einfach

<form action="index.php" method="post">
<input type="hidden" name="menushow" value="3">
<input type="hidden" name="PHPSESSID" value="".session_id()."">
<input type="hidden" name="show" value="inputnews">

für mich macht das keinen sinn, aber nun gut

Nev
05.12.2003, 22:55:01
@Ben20
Viburnum opulus hat recht, du kannst Insert's auch so schreiben.
Ich finde diese Schreibweise auch um einiges besser bzw. schöner.

Du kannst ein Insert auch so schreiben:
INSERT INTO news VALUES('$uberschrift', '$newstext', ...)
das ist die schlimmste!!

Da wenn du nun ein Feld hinzufügst, funkt das SQL ned mehr.

Set ist um einiges schöner.


@Viburnum opulus
Wenn du im Form-Tag in der Action Variablen übergibst, kannst du diese mit $_GET abfragen, obwohl die Method POST ist!!

Da die Action ja, dann auch in der Adress-Zeile steht.

Kann ich dir auch ned empfehlen, ist nicht gerade sicher.
Post zwar auch ned, aber ist um einiges schwerer zu umgehn!

Viburnum opulus
06.12.2003, 00:06:30
das was ich in dem form übergeben hatte, hatte keine sicherheitsrelevante funktion, nur welches menu aufgeklappt sein soll.
und das hat auch nix mit dem SQL-Query zu tun gehabt.

trotzdem alles putzig, eine erklärung wäre, das die Funktion einmal mit den Get-Parametern und einmal mit den Post-Parametern gestartet wird, dem widerspricht aber wieder, dass obwohl ich "echo("test");" eingefüght hatte, nur einmal "test" im quelltext des HTML dokuments stand....
komisch auch, dass das bei einem anderen script funktioniert.
der heutige tag hat mir ähnlichkeiten zwischen haskell und php aufgezeigt ;)