nanos Mitglied
Angemeldet: 04.06.2004 Beiträge: 1752
|
Verfasst am: 05.04.2007, 15:53 Titel:
Script wird immer 2x ausgeführt? |
|
|
|
|
Hallo zusammen,
ich sitze schon den halben Tag an einem (eigentlich) simplen Insert, durch
welchen ich Referenzen auf meiner Seite hinzufügen möchte. Jedoch wird das Script plötzlich stets 2x ausgeführt. Vorher funktionierte alles problemlos. Ich weiß einfach nicht, was ich falsch gemacht haben könnte.
Das soll heißen, dass der "richtige" Eintrag in die MySQL DB erfolgt, aber direkt danach einfach ein leerer Eintrag mitgesendet wird. Wenn ich also im Formular einmal auf "Eintragen" klicke, werden zwei Inserts vorgenommen, wovon einer leer ist.
Hier mal der Code:
Code: |
<?php
$datum = date("d.m.Y");
$do = $_GET['mode'];
if($do == "1") {
$sql = "INSERT INTO referenzen (name, datum, smallimg, mediumimg, bigimg, screenshot, url, category, servshort, servextended, description)
VALUES
('".htmlspecialchars($_POST['name'])."',
'$datum',
'".htmlspecialchars($_POST['smallimg'])."',
'".htmlspecialchars($_POST['mediumimg'])."',
'".htmlspecialchars($_POST['bigimg'])."',
'".htmlspecialchars($_POST['screenshot'])."',
'".htmlspecialchars($_POST['url'])."',
'".htmlspecialchars($_POST['category'])."',
'".htmlspecialchars($_POST['servshort'])."',
'".addslashes(htmlspecialchars($_POST['servextended']))."',
'".addslashes(htmlspecialchars($_POST['desc']))."')";
mysql_query($sql) OR die(mysql_error());
echo "<center>Der Eintrag wurde erfolgreich vorgenommen.<br /><br /><a href=\"?s=admin&a=main&sid=".$sessid."\">Zurück</a></center><br />";
}
?> |
Kurze Erläuterung was es mit der $do-Variable auf sich hat: Der Eintrag wird vorgenommen, wenn das Formular ausgefüllt und abgeschickt wurde.
Dementsprechend sieht der <form>-Tag so aus:
<form action="?s=admin&a=refadd&mode=1&sid=<? echo $sessid; ?>" method="POST">
Darunter folgt eigentlich nur noch das Formular.
Vielleicht sehe ich den Wald nur wieder vor lauter Bäumen nicht, aber wäre nett wenn mir jemand helfen könnte.
P.S.: Das Problem gleiche ist auch beim Referenzen editieren (UPDATE).
// edit: Der Vollständigkeit halber noch das Editierscript
Code: |
$query = "SELECT * FROM referenzen WHERE id LIKE '".$_GET['update']."'";
$result = mysql_query($query);
$row = mysql_fetch_object($result);
$do = $_GET['mode'];
if($do == "1") {
$sql = "UPDATE referenzen
SET
name = '".htmlspecialchars($_POST['name'])."',
datum = '".$_POST['datum']."',
smallimg = '".htmlspecialchars($_POST['smallimg'])."',
bigimg = '".htmlspecialchars($_POST['bigimg'])."',
mediumimg = '".htmlspecialchars($_POST['mediumimg'])."',
screenshot = '".htmlspecialchars($_POST['screenshot'])."',
url = '".htmlspecialchars($_POST['url'])."',
category = '".htmlspecialchars($_POST['category'])."',
servshort = '".htmlspecialchars($_POST['servshort'])."',
servextended = '".addslashes(htmlspecialchars($_POST['servextended']))."',
description = '".addslashes(htmlspecialchars($_POST['desc']))."'
WHERE
id LIKE '".$_GET['update']."'";
mysql_query($sql) OR die(mysql_error());
echo "<center>Der Eintrag wurde erfolgreich bearbeitet.<br><br><a href=\"?s=admin&a=main&sid=".$sessid."\">Zurück</a></center><br />";
}
?>
<form action="?s=admin&a=refupdate&mode=1&update=<? echo $_GET['update']; ?>&sid=<? echo $sessid; ?>" method="POST">
<table width="100%" border="0" cellspacing="0" cellpadding="1">
<tr>
<td width="50%" valign="top"><strong>Titel:</strong></td>
<td width="50%"><input name="name" type="text" id="name" size="35" value="<? echo $row->name; ?>" maxlength="60"></td>
</tr> |
usw. |
|
Helmchen Mitglied
Angemeldet: 01.04.2006 Beiträge: 65
|
Verfasst am: 05.04.2007, 16:18 Titel:
|
|
|
|
|
Eine Antwort habe ich jetzt leider auch nicht, denn in meinen Augen sieht das eigentlich funktionsfähig aus. Ist vllt. irgendwo eine Schleife o.ä., ansonsten kannst du am Anfang deiner Scripte folgendes schreiben: " error_reporting(E_ALL); ".
Mir fallen allerdings einige andere Dinge auf:
- MySQL hat genügend Datumsfunktionen, du kannst dem Datumsfeld also ruhig den Typ 'date' geben und musst nicht erst eines mit PHP generieren und dann in eine Spalte "falschen" Typs einfügen.
- Dein Code ist nicht gegen SQL-Injection geschützt.
- Wieso gibst du die Session-ID in der URL mit? Das macht man eigtl. "unsichtbar".
- Man soll nicht "SELECT *" schreiben (aus Performancegründen, also nicht falsch angewöhnen).
- Wieso schreibst du denn " WHERE id LIKE '".$_GET['update']."' "?
1. Soll die ID genau gleich sein, also der SQL-Vergleichsoperator " = ".
2. Eine ID ist eine Zahl, also " WHERE id = ".$_GET['update']." (aber vorher prüfen/konvertieren) |
|
nanos Mitglied
Angemeldet: 04.06.2004 Beiträge: 1752
|
Verfasst am: 05.04.2007, 16:38 Titel:
|
|
|
|
|
@Helmchen,
Danke für die Tipps, hab mich bei MySQL bislang nur mit UNIX TIMESTAMP auseinandergesetzt, aber ich war zu faul das umzukonvertieren. Darum erschien mir das so schneller.
Zum Thema Sicherheit (bezügl. SQL-Injections, SessionID): Ist sicherlich heutzutage ein immer wichtigeres Thema, aber da nur 3 Personen (inkl. mir) meines Vertrauens Zugriff auf diese Seiten haben, wollte ich die nötigen Sicherheitsfunktionen später einbauen, wenn der "Rumpf" funktionstüchtig ist.
Dass "SELECT *" unnötige Rechenzeit in Anspruch nimmt, ist mir klar. Aber es geht ja nicht um eine Communityseite sondern um ein kleines Portfolio mit 4 Tabellen, da der Rest ohnehin statisch ist. Aber du hast Recht, sollte ich mir besser nicht angewöhnen.
Bzgl. der ID-Geschichte: Ups, da hab ich wohl wieder schneller gehandelt als überlegt. Aber ich red mich mal raus indem ich sage, dass ich eher Grafiker als Programmierer bin. Wäre genau so als wenn ein Coder ein Design erstellen soll. Macht er ja auch nicht so oft.
@Impi,
Danke, ich werd's mal ausprobieren! |
|
nanos Mitglied
Angemeldet: 04.06.2004 Beiträge: 1752
|
Verfasst am: 05.04.2007, 18:52 Titel:
|
|
|
|
|
Hab bis jetzt schon alles versucht. Es hilft nichts...
Der doppelte Insert ist ja noch nichtmal das größte Problem. Notfalls kann ich immer den zweiten leeren Eintrag löschen. Die größte Sorge bereitet mir allerdings das Updatescript.
Wenn ich per Formular die Felder ausfülle und absende, erscheint zwar die Meldung "Eintrag erfolgreich..." aber die Felder in der Datenbank sind einfach leer.
Dann habe ich die Felder per PHPMyAdmin ausgefüllt, die Referenzen wurden angezeigt und wenn ich auf "Bearbeiten" gehe, erscheinen die per PHPMyAdmin vorgenommenen Einträge in den Formularfeldern. Wenn ich das Formular dann jedoch absende ist es wieder das gleiche "Eintrag erfolgreich..." aber Formular- sowie die Felder in der Datenbank sind leer.
Merkwürdig nur, dass bis heute Mittag alles geklappt hat. Hab es jetzt auf localhost und im Web probiert, Fehlanzeige
Hab nochmal die komplette Datei bei nopaste hochgeladen:
http://nopaste.biz/?14132
Kann mir das einfach nicht erklären... |
|