EInträge werden 3 Mal in DB geschrieben

uafsc

Erfahrenes Mitglied
Halloo ich hab schon wieder ein Problem und zwar werden meine Einträge, die ich in einem Formular erfasse bei jedem neuen Eintrag gleich 3 Mal in die DB geschrieben und ich kann mir nicht erklären wieso :confused:

Ich poste jetzt einfach mal das ganze Script, das die Formulardaten (POST) entgegennimmt und in die DB schreibt (und anschliessend eine JavaScript-Weiterleitung mit Countdown macht):
PHP:
$ItemID=mysql_real_escape_string($_POST['ItemID']);
$ItemTitle=mysql_real_escape_string($_POST['ItemTitle']);
$ItemPriority=mysql_real_escape_string($_POST['ItemPriority']);
$ItemStatus=mysql_real_escape_string($_POST['ItemStatus']);
$CatID=mysql_real_escape_string($_POST['CatID']);
$ItemSource=mysql_real_escape_string(add_http($_POST['ItemSource']));
$ItemIMDB=mysql_real_escape_string(add_http($_POST['ItemIMDB']));

if(isset($_GET['task']) AND $_GET['task']=="edit"){
	if(isset($_POST['submit']) AND $_POST['submit'] !== ""){
		$sql="UPDATE items LEFT JOIN cat ON items.CatID = cat.CatID
		SET ItemTitle = '".$ItemTitle."', ItemPriority = '".$ItemPriority."', ItemSource = '".$ItemSource."', 
		ItemIMDB = '".$ItemIMDB."', ItemStatus = '".$ItemStatus."', 
		items.CatID = '".$CatID."'
		WHERE ItemID = ".$ItemID."";
	}elseif(isset($_POST['delete']) AND $_POST['delete'] !== ""){
		$sql="DELETE FROM items
		WHERE ItemID = ".$ItemID."";
	}
}elseif(isset($_GET['task']) AND $_GET['task']=="new"){
	$sql="INSERT INTO items (ItemTitle,ItemPriority,ItemSource,ItemIMDB,ItemStatus,items.CatID)
	VALUES ('".$ItemTitle."','".$ItemPriority."','".$ItemSource."','".$ItemIMDB."','".$ItemStatus."','".$CatID."')";
}else{
	die("Fehler!");
}
$result=mysql_query($sql) or die(mysql_error());
?>
<p>
	Die &Auml;nderungen wurden erfolgreich gespeichert. Sie werden in <span id="countdown"></span> Sekunden weitergeleitet.
	<script type="text/javascript">
		function countdownAnzeigen(zahl){
			document.getElementById('countdown').innerHTML=zahl;
			window.setTimeout(function(){countdownAnzeigen(zahl-1);},1000);
		}
		countdownAnzeigen(1)
	</script> 
</p>
<script type="text/javascript">
function redirect() {
	location.href='index.php?site=overview&kill=1';
}
window.setTimeout("redirect()", 200);
</script>
<noscript>
	<p>
		Ihr Browser unterst&uuml;tzt keine JavaScript-Weiterleitungen. Klicken Sie <a href="index.php?site=overview&kill=1" 
		target="_self">hier</a> um weitergeleitet zu werden.
	</p>
</noscript>
 
Zuletzt bearbeitet:
Hi,

wird das Script direkt vom Formular aufgerufen oder irgendwo includet?
Da keine Schleife in dem gepostetem Script ist, kann der Fehler nicht von dort kommen.
Also müßte das Script 3 mal aufgerufen (bzw. includet) werden.

Gruß tyg3r
 
Ja so hab ich auch gedacht-.- Auf der Hauptseite (overview) ist eine for-Schleife, damit alle Werte aus der DB ausgegeben und aufgelistet werden. Als ich vorhin bemerkt habe, dass alle neuen Einträge genau 3 Mal erzeugt werden, waren auch 3 Einträge in der DB. Doch auch als 10 Einträge drin waren, wurden wiederum neue Einträge "nur" 3 Mal erstellt.
Das Script wird von einer Seite mit einem Formular aus ausgeführt...

EDIT:
PHP:
<?php
$task=$_GET['task'];
if($task=="edit"){
	$sql="SELECT ItemTitle, ItemPriority, ItemSource, ItemIMDB, ItemStatus, CatTitle
	FROM items LEFT JOIN cat ON items.CatID = cat.CatID
	WHERE ItemID=".$_POST['ItemID'].""; //$_POST['ItemID'] wird immer 2 übergeben => falsch wieso
	$result=mysql_query($sql) or die(mysql_error());
	$row=mysql_fetch_array($result);
}
$query="SELECT CatTitle, CatID
FROM cat";
$res=mysql_query($query) or die(mysql_error());
?>
<form action="index.php?site=insert_update_item&amp;task=<?php if($task=='edit'){echo 'edit';}elseif($task=='new'){echo 'new';}else{die;} ?>" method="POST" name="update">
	<table>
		<tr>
			<td>
				Titel
			</td>
			<td>
				<input type="text" size="32" value="<?php if($task=='edit'){echo $row['ItemTitle'];} ?>" name="ItemTitle" />
			</td>
		</tr>
		<tr>
			<td>
				Quelle
			</td>
			<td>
				<input type="text" size="32" value="<?php if($task=='edit'){echo $row['ItemSource'];} ?>" name="ItemSource" />
			</td>
		</tr>
		<tr>
			<td>
				Kategorie
			</td>
			<td>
				<select size="1" name="CatID">
					<?php while($cat=mysql_fetch_array($res)){ ?>
						<option value="<?php echo $cat['CatID']; ?>"<?php if($cat['CatTitle']==$row['CatTitle']){echo " selected";} ?>><?php echo $cat['CatTitle']; ?></option>
					<?php } ?>
				</select>
			</td>
		</tr>
		<tr>
			<td>
				IMDB-Link
			</td>
			<td>
				<input type="text" size="32" value="<?php if($task=='edit'){echo $row['ItemIMDB'];} ?>" name="ItemIMDB" />
			</td>
		</tr>
		<tr>
			<td>
				Priorit&auml;t
			</td>
			<td>
				<select size="3" name="ItemPriority">
					<?php if($task=='edit' AND $row['ItemPriority']==1){ ?>
						<option value="3">Hoch</option>
						<option value="2">Mittel</option>
						<option value="1" selected>Niedrig</option>
					<?php }elseif($task=='edit' AND $row['ItemPriority']==2){ ?>
						<option value="3">Hoch</option>
						<option value="2" selected>Mittel</option>
						<option value="1">Niedrig</option>
					<?php }elseif($task=='edit' AND $row['ItemPriority']==3){ ?>
						<option value="3" selected>Hoch</option>
						<option value="2">Mittel</option>
						<option value="1">Niedrig</option>
					<?php }elseif($task=='new'){ ?>
						<option value="3">Hoch</option>
						<option value="2">Mittel</option>
						<option value="1">Niedrig</option>
					<?php } ?>
				</select>
			</td>
		</tr>
		<tr>
			<td>
				Status
			</td>
			<td>
				<select size="3" name="ItemStatus">
					<?php if($task=='edit' AND $row['ItemStatus']==1){ ?>
						<option value="1" selected>Aktiv</option>
						<option value="2">in Warteliste</option>
						<option value="3">nicht gefunden</option>
					<?php }elseif($task=='edit' AND $row['ItemStatus']==2){ ?>
						<option value="1">Aktiv</option>
						<option value="2" selected>in Warteliste</option>
						<option value="3">nicht gefunden</option>
					<?php }elseif($task=='edit' AND $row['ItemStatus']==3){ ?>
						<option value="1">Aktiv</option>
						<option value="2">in Warteliste</option>
						<option value="3" selected>nicht gefunden</option>
					<?php }else{ ?>
						<option value="1">Aktiv</option>
						<option value="2">in Warteliste</option>
						<option value="3">nicht gefunden</option>
					<?php } ?>
				</select>
			</td>
		</tr>
		<tr>
			<td colspan="2">
				<input type="hidden" value="<?php echo $_POST['ItemID']; ?>" name="ItemID" />
				<input type="submit" value="Speichern" name="submit" />
				<?php if($task=='edit'){ ?>
					<input type="submit" value="L&ouml;schen" name="delete" onClick="return confirm('Wollen Sie diesen Eintrag wirklich l&ouml;schen?')" />
				<?php } ?>
			</td>
		</tr>
	</table>
</form>
Habe einfach mal das ganze Formular gepostet...
 
Zuletzt bearbeitet:
$_POST sind die Usereingaben aus dem Formular und $_GET liest die Variable task aus der URL. So kann ich in einem simplen Link angeben, ob task=edit oder task=new. Bei task=edit werden dann die aktuellen Werte aus der DB gelesen und im Formular angezeigt und bei task=new werden keine Werte im Formular angezeigt (ausser bei den Auswahllisten natürlich), da ein neuer Eintrag ja auch noch keine Werte hat. Zusätzlich wird bei task=edit noch ein "Löschen"-Button angezeigt, der bei task=new keinen Sinn macht.
Einträge zu bearbeiten klappt auch prima!
 
Mach doch mal nach der Insert-Zeile ein
echo "-> Eintrag in DB<br/>";

Sowie am Anfang des Scriptes ein
echo "-> Scriptaufruf<br/>";

usw ...

Der Fehler lässt sich doch somit sehr schnell lokalisieren!
 
Höh :S In was für einer verrückten Welt leben wir? xD ..ich hab das jetzt mal gemacht, obwohl ich schon vorher an allen möglichen Stellen ein echo "hallo"; eingefügt habe. Doch nun funktioniert es. Ich kann mich nicht erinnern, was geändert zu haben... Ich vergleiche das Script jetzt mal mit dem, das ich gepostet habe...

EDIT: Ich kann wirklich nix finden, ausser im Formular habe ich das hier:
PHP:
                <tr>
			<td>
				Kategorie
			</td>
			<td>
				<select name="CatID" size="1">
				<?php while($cat=mysql_fetch_array($res)){ ?>
						<option value="<?php echo $cat['CatID']; ?>" <?php if($cat['CatTitle']==$row['CatTitle']){echo " selected";}echo ">".$cat['CatTitle']; ?></option>
					<?php } ?>
				</select>
			</td>
		</tr>

zu folgendem geändert:
PHP:
                <tr>
			<td>
				Kategorie
			</td>
			<td>
				<select name="CatID" size="1">
				<?php while($cat=mysql_fetch_array($res)){ ?>
						<option value="<?php echo $cat['CatID']."\""; if($cat['CatTitle']==$row['CatTitle']){echo " selected";}echo ">".$cat['CatTitle']; ?></option>
					<?php } ?>
				</select>
			</td>
		</tr>

=> also nun gebe ich nur ein Anführungszeichen mit PHP anstatt mit HTML aus, das ist mir ein Rätsel...
 
Zuletzt bearbeitet:
Zurück