• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Nicht angesprochene Zeile ändert sich

Degers

Mitglied
Hallo,

Mit folgender Zeile möchte ich den Status mit der id 1 auf 1 setzen.
PHP:
$sql = mysql_query("UPDATE tabelle SET status = '1' WHERE id = '1' ");
Nun erlebe ich einen sehr merkwürdigen Effekt: Die Zeilen mit den ids 1 und 2 erhöhen sich um 1. Wenn ich Aktionen wie status=status+2 verwende verdoppelt oder verdreifacht sich die nicht angesprochene Zeile 2 in der Spalte status sogar.

Mein erster Gedanke war, dass ein Fehler beim Index zu finden sein wird, anscheinend sind die Spalten nicht eindeutig zugeordnet. Ich verwende für die Spalte id einen Primärschlüssel, der auch auf Auto-Increment ist.
Dieser Vermutung lässt sich insoweit bestätigen, alsdass alles korrekt funktioniert, wenn ich die Spalte bspw. über den ebenfalls enthaltenen Timestamp anspreche.

Nun bin ich ratlos wo noch ein Fehler zu suchen ist, gibt es da Anregungen?
 
Zuletzt bearbeitet:
Werbung:
Lass mal beim Gleichheitszeichen die Leerzeichen weg. Wenn du ein Integer hast kannst du die Hochkommata weglassen und den Wert ohne Leerzeichen direkt nach dem Gleichheitszeichen schreiben.
 
Normalerweise sind dort Variablen enthalten, die ich gewohnheitsmäßig mit Hochkommata umschließe, daher waren die Kommata noch da. Auch ohne Leerzeichen der selbe Effekt, ebenfalls ohne Hochkommata.

Wenn ich mit der selben Where-Klausel auswähle per SELECT und ausgebe, funktioniert es einwandfrei, daher vermute ich den Fehler eher nicht im Statetement.
 
Zuletzt bearbeitet:
Werbung:
Ich habe mal auf einer Webseite einen Zähler mit diesem Code erstellt

PHP:
$sql = mysql_query("UPDATE tabelle SET zaehler = 'zaehler+1' WHERE id = '1' ");

Da hatte ich dasselbe wie du erlebt,es wurde immer gleich 2 hinzugezählt
Ich weiss bis jetzt nicht,woran das liegt

Wenn der Zähler auf Null war und einer hat die Seite angeklickt dann wurde er gleich auf 2 gesetzt
 
Du meinst für die Seite, die den Befehl ausführt?
Daran liegt es auch nicht, habe es schon auf eine Testseite ausgelagert und gebe noch öfter ein Wort mit aus um zu erkennen, ob die Änderung umgesetzt wurde. Bisher hatte ich in die Richtung keine Probleme, spätestens mit der Ausgabe aber weiß ich dass sie geändert wurde.

Da hatte ich dasselbe wie du erlebt,es wurde immer gleich 2 hinzugezählt
Ich weiss bis jetzt nicht,woran das liegt

Wenn der Zähler auf Null war und einer hat die Seite angeklickt dann wurde er gleich auf 2 gesetzt
Ja, das trifft es genau. Nur dass bei mir zusätzlich noch andere Felder angesprochen werden. :D
Darauf aufbauend vermute ich bereits zwei Fehler.

Noch als Zusatzinfo, sowohl das id-Spalte als auch die status-Spalte sind vom Typ integer.
 
Werbung:
Der Support konnte falsche Datenbankeinstellungen ausschließen und hinterlegte eine Testdatei, bei der der Effekt nicht auftritt:
PHP:
<?php$mysqlhost="localhost";
$mysqluser="user";
$mysqlpwd="Passwort"; 
$mysqldb="Datenbank";
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die
("Verbindungsversuch fehlgeschlagen");
 mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht
waehlen.");

mysql_query("UPDATE vocabulary SET voc_status = '1' WHERE voc_id = '1'");?>
Also nichts anderes, als ich mache. Dort ist alles so, wie es sein soll.
Wenn ich das 1:1 in meine Testdatei übertrage, tritt der Fehler wieder auf.

Der einzige Unterschied ist, neben der Tatsache dass ich mit Windows arbeite und laut meinem Notepade die Datei des Support unter Unix erstellt wurde, der Speicherort, die hinterlegte Datei ist im Root, meine Testdatei in einem Unterverzeichnis.
Nun bleibe ich wirklich absolut ratlos zurück.
 
Also, der Code, den du uns gezeigt hast, unterscheidet sich schon von der Testdatei des Supports. Die spricht zum Beispiel eine völlig andere Tabelle an.

Tomm schrieb:
zaehler = 'zaehler+1'

Da liegt ein Problem. Hier weist du dem Feld zaehler den String 'zaehler+1' zu. Wozu genau der umgeformt wird, weiß ich spontan nicht. Du meinst vermutlich: zaehler = zaehler + 1



Was ich sagen will: Ihr müsst schon exakt sein.
 
Im Eingangspost wollte ich es noch exemplarisch aufzeigen, da liegt der Fehler aber nicht.
Mittlerweile konnte ich die Fehlerquelle finden: Die .htaccess.
Ein Verzeichnisschutz, den ich provisorisch über den Confixxbereich erstellt hatte verursachte den Fehler. Ich hab nun schnell ein Loginsystem drum gebastelt, trotzdem ist es mir unverständlich wie ein Passwortschutz meinen MySQL-Query manipulieren kann.
 
Zuletzt bearbeitet:
Werbung:
Mittlerweile konnte ich die Fehlerquelle finden: Die .htaccess.
Ich hatte schon die Vermutung, das deine PHP-Datei 2 mal aufgerufen wurde und dadurch der Query 2 mal ausgeführt wurde, war mir aber nicht sicher wie das sein konnte. Nun wissen wir es.
 
Zurück
Oben