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

Problem mit strpos()

Status
Für weitere Antworten geschlossen.

Icy

Neues Mitglied
Hallo,

ich hatte mal einen Thread hier, wie man Foren als gelesen marieren kann.
Nun möchte ich es so umsetzen, dass es in der Datenbank in der Tabelle Threads eine Spalte ("haveread") existiert, in der alle User stehen (User-ID), die den jewiligen Thread bereits gelesen hat.
In der thread.php lese ich dann die Spalte haveread aus und überprüfe, ob die User-ID des aktuellen Benutzers in dieser Spalte vorkommt.
Wenn nicht, ist der Thread noch ungelesen und in der Spalte haveread wird die User-ID gespeichert, denn der User hat den jeweiligen Thread ja jetzt gelesen. Wenn sie schon vorhanden ist, wird der Thread als gelesen markiert.
Der Teil im Script sieht so aus:

PHP:
<?php
  $sqlread = "SELECT haveread FROM ibd_threads WHERE ID = '$id'";
  $haveread = mysql_fetch_assoc(mysql_query($sqlread));
  $newread = "(".$_SESSION['uid'].")";
  if (strpos($haveread['haveread'], '$newread')) {
    echo "Du hast diesen Thread bereits gelesen!";
  } else {
    $sqlhaveread = "UPDATE ibd_threads SET haveread = haveread + '$newread' WHERE ID = '$id'";
    mysql_query($sqlhaveread) or die(mysql_error());
  }
?>

Nun habe ich leider zwei Probleme:
1. In der Spalte wird nur "0" gespeichert, anstatt zB (4)
2. Selbst wenn ich in PHPMyAdmin (4) eintrage (meine User-ID), wird angezeigt, dass ich diesen Thread noch nicht gelesen hätte.
Ich fidne absolut keinen Fehler, vllt könnt ihr mir ja helfen.

MfG Icy
 
strpos() wird 0 zurück liefern, wenn die Userid an erster Stelle gefunden wird. Die erste Stelle in Strings ist für gewöhnlich immer Position 0.

Gruß,
-Efchen
 
strpos() wird 0 zurück liefern, wenn die Userid an erster Stelle gefunden wird. Die erste Stelle in Strings ist für gewöhnlich immer Position 0.
Eine "typensensitive" Überprüfung sollte also das Problem beheben:
PHP:
if( strpos($haveread['haveread'], '$newread') !== false )
 
Danke für die Hilfe, funktioniert allerdings mit deinem Code noch immer nicht :/
In $haveread['haveread'] steht (11) und auch in $newread steht (11), habe es extra nochmal überprüft.
Trotzdem wird noch immer angezeigt, dass ich den Thread noch nicht gelesen habe bzw. dass der String nicht in $haveread['haveread'] gefunden wurde :/

MfG Icy
 
Ist nicht false == 0? dann funktioniert es ja nur, wenn die userid an erster Stelle gefunden wurde.
Prüf doch einfach, was strpos() zurückliefert.
 
strpos liefert false, wenn der String nicht gefunden wurde. Sonst die Position.

Die Position ist immer eine Zahl, kann also nicht === false sein, daher wüsste ich nicht, wo das Problem liegt.

Versuch doch mal sowas wie strpos("(11)", "(11)") und guck, ob du dann ein korrektes Ergebnis bekommst. Wenn ja, dann stimmt doch was mit deinen Strings nicht.
 
Soo danke nochmal für eure Hilfen. Habe den Fehler nun gefunden:

Die Variable in strpos, die gesucht wird, darf nicht in Anführungszeichen geschrieben werden.
So klappts nun also:

PHP:
<?php
  if (strpos($haveread['haveread'], $newread) !== false) {
    echo "Du hast diesen Thread bereits gelesen!";
  } else {
    echo "Du hast diesen Thread noch nicht gelesen!";
  }
?>

Frage mich aber dennoch, wieso da keine Anführungszeichen hingehören.

MfG Icy
 
ganz einfach, weil wenn du die Anführungszeichen dort hinsetzt, erscheint die definierte Variable als String. Generell ist es bei Funktionen, immer die falsche schreibweise(außer wenn du noch etwas anhängen willst bsp: $var."1"), das sollte doch zum Basiswissen gehören :)

Und ich frag mich, dass die Vorposter das nicht wissen? Das fällt einen doch sofort auf !?!
Noch ein Tipp: Ich würde bei der Fehlerüberprüfung immer zuerst die Syntax checken, ob alles richtig ist. Und dann erst die Zusammenhänge prüfen. ;)
 
Ach ja, das waren ja einfache Anführungszeichen. Bei doppelten wäre es ja in diesem Fall egal gewesen. Deshalb wohl nicht aufgefallen.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben