[PHP&MySQL]Formular->Datenbank (Mehrfache einträge)

sub7even

Mitglied
Hallo,
ich bin gerade dabei für mein Homepage ein Tutorial Script zu schrieben.
Bisher funktioniert auch alles, nur habe ich probleme bei einer Funktion die,
dazu gedacht ist das User sich für das Tutorial Bedanken können.

Und zwar werden einträge manchmal 2 mal manchmal 5 mal oder öfter eingetragen,
obwohl man nur einm mal die daten abgesendet hat.

Hier mal mein Code:
PHP:
<?php
	// Bedanken Formular
	$thxreq = $_GET['thx'];
	if ( $thxreq == 1 ) {
			$selfphp1 = $_SERVER['SELF_PHP'];
		echo "
				<form action='$selfphp1' method='post'>
				<table width='648' border='0' cellspacing='0' cellpadding='0'>
				  <tr>
					<td width='578'>Name: 
					  <input type='text' maxlength='200' size='88' name='user_name'/></td>
					<td width='76'><input type='submit' name='sub1' value='THANKS' /></td>
				  </tr>
				</table>
				</form>
		";
		
		if (isset($_POST['sub1'])) 
		{
				$thx_user = $_POST['user_name'];
				$insert1 = "INSERT INTO tut_thx (id, username, tag, zeit) VALUE ('$tut_id', '$thx_user', NOW(), NOW())";
				
			$q10 = mysql_query("SELECT * FROM tut_thx");
			while ($esc10 = mysql_fetch_array($q10, MYSQL_ASSOC))
			{
				if ( $esc10['username'] == $_POST['user_name'] ) {
					if ( $esc10['id'] == $tut_id ) {
						echo "<strong class='error'> ERROR(1337): Sie haben sich bereits bedankt! </strong>";
						} else {
							mysql_query($insert1);
							$insert1 = die();
						}
				} else {
					mysql_query($insert1);
				}
			}
		}
		
	} else { echo "<br />"; }
 ?>

Danke für eure Hilfe :)
 
Moin,

die Logik des Ablaufs ist etwas ....daneben :suspekt: (ist nicht bös gemeint;))

Du holst alle Datensätze, und durchläufst sie, um nachzuschauen, ob der aktuelle User der Urheber ist und er das aktuelle Tutorial betrifft.

In folgenden Fällen wird dann ein neuer Datensatz angelegt:

Fall 1: es ist ein Datensatz vom aktuellen User, aber nicht vom aktuellen Tutorial->
Es wird ein neuer Datensatz erzeugt und das Skript beendet(über das die() )

Falls 2: es ist ein Datensatz von einem anderen User->
Es wird ein neuer Datensatz erzeugt und das Sript geht weiter.

Du musst dich bei deinem INSERT eigentlich garnicht um andere User/Tuts kümmern, folgendermassen könntest du vorgehen:

Variante 1:Ermittle über ein SELECT, ob es einen Datensatz gibt, der mit aktuellem User+Tut übereinstimmt, wenn nein: du kannst ihn erzeugen

Variante 2:(würde ich nehmen, weil es dir 1 SELECT erspart)
Füge ein weiteres Feld in die Tabelle ein, und deklariere es als UNIQUE
In diesem Feld speicherst du beim INSERT einen Hash aus User-ID und Tut-ID.
Du kannst nun ohne vorherige Prüfung dein INSERT vornehmen. Sollte der User sich bereits für das betreffende Tut bedankt haben, ist das INSERT wirkungslos, da das UNIQUE-Feld in der Tabelle schon vorhanden ist...es wird also kein neuer Datensatz erzeugt.
Falls du für die etwaige Erfolgs-oder Fehlermeldung eine Info benötigst, ob nun ein Datensatz eingefügt wurde oder nicht, kannst du das per [phpf]mysql_affected_rows[/phpf] ermitteln.
 
Danke Sven,
funktioniert jetzt das UNIQUE hatte ich noch nie benutzt wusste
deshalb nicht was es ist...
Und wieder etwas dazu gelernt^^

Und hier nochmal mein aktueller Code (der funktioniert):
PHP:
<?php
	// Funktion Zum Bedanken
	$thxreq = $_GET['thx'];
	if ( $thxreq == 1 ) {
			$selfphp1 = $_SERVER['SELF_PHP'];
		echo "
				<form action='$selfphp1' method='post'>
				<table width='648' border='0' cellspacing='0' cellpadding='0'>
				  <tr>
					<td width='578'>Name: 
					  <input type='text' maxlength='200' size='88' name='user_name'/></td>
					<td width='76'><input type='submit' name='sub1' value='THANKS' /></td>
				  </tr>
				</table>
				</form>
		";
		
		if (isset($_POST['sub1'])) 
		{
				$thx_user 	= $_POST['user_name'];
				$uniq_hash	= "h4u".$tut_id."0".$thx_user."thx";
				$insert1 	= "INSERT INTO tut_thx (id, username, tag, zeit, uniq) VALUE ('$tut_id', '$thx_user', NOW(), NOW(),'$uniq_hash')";
				mysql_query($insert1);
		}
		
	} else { echo "<br />"; }
 ?>
 
Zurück