MySQL-Datenbank über PHP updaten funktioniert nicht

08.08.2012 19:06 Uhr

Hallo,

ich arbeite zurzeit an einem kleinen PHP-Backend, dass es erlaubt, nach Anmeldung Informationen der Front-Seite zu aktualisieren. Dazu habe ich ein sehr einfaches Textfeld, dass die Informationen per POST weitergibt. Auf der nächsten Seite wird dann erneut gecheckt, ob der Nutzer angemeldet ist und *theoretisch* die aktualisierten Informationen in die Datenbank eintragen, das klappt leider nicht. Unten seht ihr einen Ausschnitt aus dem Code, der für die DB zuständig ist. Über einen kleinen Tipp zur Korrektur freue ich mich sehr :)

$do = "UPDATE general SET value = '$description' WHERE bereich LIKE '$bereich'"; 
		$update = mysql_query($do/*"UPDATE general SET value = '$description' WHERE id = 5"*/) OR die("Error: $abfrage <br />" .mysql_error());

5 Antworten

#1

09.08.2012 08:34 Uhr

Das klappt leider nicht, ist keine Fehlerbeschreibung. Was passiert denn genau, wird der die() ausgelöst? Wenn ja, mit welcher Meldung?

Außerdem wundert mich die Verwendung von LIKE im UPDATE-Statement. Dieses benötigt man eigentlich nur, wenn man den Wert für die Spalte bereich nicht vollständig kennt. In diesem Fall würde dann jedoch noch das Wildcard-Zeichen % fehlen (außer dieses ist mit in $bereich).

#2

09.08.2012 11:59 Uhr

Hallo jteriete,

danke für die Antwort.  Mit dem oben gezeigten Code passiert einfach gar nichts, es wird nichts ausgegeben, also auch kein Mysql-Error. Das LIKE kann wahrscheinlich durch ein = ersetzen, ich hatte nur zwischendrin vermutet, dass es daran liegen könnte. Was genau meinst du mit dem Wildcard-Zeichen? Wo muss ich das einbauen? Danke für deine Antwort

#3

09.08.2012 23:07 Uhr

Ein LIKE nutzt man eigentlich nur, wenn man nicht den kompletten Wert einer Datenbank-Spalte kennt. Dies kommt beispielsweise bei der Umsetzung einer SELECT-Abfrage im Rahmen einer Suche zum Tragen, wo man wissen will ob das Wort "Internet" Teil eines Textes (beispielsweise in der Spalte "beschreibung" ist).

SELECT * FROM tbl_name WHERE beschreibung LIKE '%Internet%'

Mit dem Wildcard-Zeichen % drückt man dann aus, ob in einem Datensatz vor bzw. hinter dem Wort "Internet" andere Zeichen im Wert der Spalte vorkommen dürfen.

Zum eigentlichen Problem:

Wenn es zu keinem Aufruf der die-Funktion kommt, so wird definitiv die Funktion mysql_query ausgeführt. Es kann nun aber sein, daß es bei dem Update einfach keine betroffenen Datensätze gibt, weil beispielsweise bei der Bedingung ein Denkfehler vorliegt. Dies könnte man mit mysql_affected_rows() herausfinden.

#4

13.08.2012 16:04 Uhr

Zwei Dinge fallen mit auf Anhieb ein:

1. Fehlermeldungen sind ausgeschaltet, deshalb erhältst du auch keine Fehlermeldung.

Probier es mal mit folgendem Code:

error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', 'On');

 

2. Die Variablen $description oder $bereich enthalten Daten, die die Query zerschießen.

Hier sollte man sowieso grundsätzlich 

mysql_real_escape_string($string);

verwenden.

 

Hoffe das hilft. Gib doch mal Feedback.

#5

14.08.2012 17:53 Uhr

Hallo,

danke für eure Hilfen. Das Problem hat sich inzwischen erledigt bzw. anderweitig gelöst, jetzt habe ich aber ein anderes mit UPDATE. Ähnliches Szenario, Daten (Mannschaft, Position, Vorname, Nachname) werden über ein Formular mittels POST an change.php übergeben, dort sollen die Daten mittels UPDATE in eine Datenbank eingetragen werden und genau das funktioniert, wie auch oben, nicht. Folgender Code wird dabei im großen und ganzen verwendet:

$team = $_POST['team'];
			$position = $_POST['position'];
			$nachname = $_POST['nachname'];
			$vorname = $_POST['vorname'];
			$do = "UPDATE 'herren1213' SET nachname='$nachname', vorname='$vorname' WHERE team='$team' AND position='$position'";
			$update = mysql_query($do) OR die ("Error: <br />" .mysql_error());

mysql_error sagt folgendes:

 

Error: 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''herren1213' SET nachname='User', vorname='Test' WHERE team='1' AND position='1'' at line 1

Wäre super, wenn ihr mir nochmal helfen könntet :)

 

Ähnliche Fragen



Datenschutzerklärung · Impressum