SQL UPDATE mit Bedingung

unXtremo

Ensign
Registriert
Feb. 2009
Beiträge
228
Hallo zusammen,
ich habe eine MySQL Datenbank, wenn ein User über ein Formular ein Datum auswählt soll die Tabelle der Datenbank überprüft werden ob der User bereits bei diesem Datum eingetragen ist, wenn nicht, dann so ein UPDATE Befehl ausgeführt werden und der Username des Users aus einer SESSION Variablen in die Datenbank eingetragen werden, wenn er bereits in der DB steht soll eine Fehlermeldung ausgegeben werden.

Im folgenden mein bisheriger Ansatz:
Datenbank Struktur:
Code:
CREATE TABLE dienst (
   g_id INT NOT NULL UNIQUE AUTO_INCREMENT,
   datum DATE NOT NULL,
   user VARCHAR(100) DEFAULT NULL,
   PRIMARY KEY (g_id),
);

Hier die Abfrage:
PHP:
$result = mysql_query("SELECT g_id FROM dienst WHERE user LIKE '% $benutzername %' AND
								datum='$mittwochs' OR
								datum='$samstags' OR
                					        datum='$sonntags' OR
                					        datum='$sonder'");
$menge = mysql_num_rows($result);
Hier soll das gewählte Datum aus dem Formular überprüft werden, welches aus vier verschiedenen SELECT Listen stammt (entweder mittwochs, oder samstags, oder sonntags, oder sonder), im Feld user der Datenbank werden Benutzernamen Komma getrennt abgespeichert.
Form: Benutzer_1,Benutzer_2,Beutzer3

UPDATE Befehl:
PHP:
if($menge == 0)
{
	$sql_get_user = "SELECT user FROM dienst WHERE 
							datum='$mittwochs' OR
							datum='$samstags' OR
							datum='$sonntags' OR
							datum='$sonder'
						ORDER BY datum";

	$result_get_user = mysql_query($sql_get_user) OR die(mysql_error());

			
	while($row_get_user = mysql_fetch_assoc($result_get_user))
	{
		if ($row_get_user['user'] == NULL)
		{
			$update_user = $benutzername;
		}
		else
		{
			$update_user = $row_get_user['user'] . "," . $benutzername;
		}
				
		$sql = "UPDATE dienst SET user='$update_user' WHERE
									datum='$mittwochs' OR
									datum='$samstags' OR
									datum='$sonntags' OR
									datum='$sonder' ";
		mysql_query($sql);

		$num = mysql_affected_rows();
		if($num > 0)
		{
			echo "OK!";
		}
	}
}
else
{
	echo "FEHLER!";
}
Bei mir funktioniert die Überprüfung, ob der Benutzername bereits in dem Feld der Datenbank enthalten ist, nicht so recht.
Der UPDATE Befehl funktioniert tadellos, es wird nur immer eingeteilt egal ob der user bereits drin steht oder nicht.
 
ohne es jetzt probiert zu haben würde ich mal das

if ($row_get_user['user'] == NULL)

in

if ($row_get_user['user'] == '')

ändern
 
Das mit dem NULL funktioniert eigentlich, es sorgt nur dafür, das wenn noch kein User im Feld steht kein Komma vorangestellt wird.

Mein Problem ist nur die Überprüfung mit dem
PHP:
... LIKE '% $benutzername %' AND ...
 
Sind die Leerzeichen vor und nach $benutzername absicht?

Hier stand Schmarrn^^

edit: Ach jetzt hab ich verstanden wie deine Datenbank aussieht^^
Sry da stand ich auf dem Schlauch.
Aber wenn du in der datenbank zB folgendes stehen hast:
user1,user2,user3
dann müsstest du nach WHERE user LIKE '%$benutzername%' suchen. Die Leerzeichen dürften das Problem sein (denke nicht, dass die bei der Suche ignoriert werden).
 
Zuletzt bearbeitet:
Hallo the one,
Danke für deinen Tipp,
ich habe es so eben probiert, allerdings bekomme ich jetzt immer meine Fehlermeldung ausgegeben (FEHLER!), da jetzt wohl immer ein Eintrag gefunden wird.
Kann es sein das die Erweiterung mit den mehreren Datumsangaben noch nicht ganz richtig ist?

//EDIT:
Dazu muss ich noch sagen, dass wenn eine der Datumsauswahlfelder nicht gesetzt ist sie den Wert NULL hat.
Es kann also unter Umständen sein, dass nach $benutzername AND NULL gesucht wird
 
Zuletzt bearbeitet:
wenn du keine Klammern setzt, wird es so interpretiert:
Code:
WHERE (user LIKE '% $benutzername %' AND datum='$mittwochs') OR datum='$samstags' OR datum='$sonntags' OR  datum='$sonder'"

du musst also die Klammern so setzen, um zu erreichen, was du möchtest:
Code:
WHERE user LIKE '% $benutzername %' AND (datum='$mittwochs' OR datum='$samstags' OR datum='$sonntags' OR  datum='$sonder'")
 
Ah, das ist es!!!!
Vielen Dank ice-breaker ich glaube jetzt klappt es

Das mit den Leerzeichen bei $benutzername hat allerdings auch gestimmt, Danke the one
 
Zuletzt bearbeitet:
Zurück
Oben