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

Bestimmten Buchstaben irgendwo in einem Wort finden und abfragen

Status
Für weitere Antworten geschlossen.
M

matibaski

Guest
Moin!

Ich möchte einen Buchstaben, beispielsweise ein Grosses "C" aus einer Array-Variable raussuchen und abfragen.

Also ich dachte so:
PHP:
$var = array();
$var[1] = "Clib";
$var[2] = "bCgdesCef";
// etc...
Nun abfragen, ob es diese Beinhaltet
PHP:
if(/* in $var[2] = irgendein "C" */)
{
// Mach das
}
Wisst ihr was ich meine?


MfG, matibaski
 
laut php handbuch ist strstr oder stristr IMMER einem preg_match vorzuziehen, weil es wesentlich sparsamer mit den ressourcen umgeht und schneller ist.
 
Vielen Dank für die Antworten.

Nun habe ich es Anfangs mit preg_match() probiert, jedoch erfolgslos.
Aber strpos() scheint mir da eher besser zu gefallen.

Also ihr fragt euch sicherlich, wozu das ganze.

Ich mache ein Loginsystem, und jeder Benutzer hat gewisse Rubriken die er einsehen darf. Und jeder Rubrik habe ich einen Buchstaben zugewiesen.

Nun hat der Benutzer in der MySQL Tabelle eine Spalte Namens "Rang". In diese werden alle Buchstaben eingetragen, die der Benutzer vom Administrator bekommt, also die Rechte.

Wenn sich der Benutzer einloggt, mache ich eine Session für den Benutzer, in der alle seine Buchstaben sind, die in seiner Spalte sind.

Und nun frage ich ab, ob er den benötigten Buchstaben in seiner Rang-Spalte hat, um den Inhalt zu sehen.

Das mach ich nun so:
PHP:
$rang = $_SESSION['rang']; // Aktueller Rang

if(strpos($rang, "C"))
{
  // Tu das
}
else // Wenn nicht die rechte dazu, Meldung
{
            echo 'Sie haben nicht die genügenden Benutzerrechte um in diese Rubrik einzusehen.<br />
                  Bitte wählen Sie auf der Navigationsleiste eine Rubrik, bei der Sie die passenden Rechte haben.';
}
Nun funktioniert das aber immer noch nicht wie ich will. Der Administrator hat nun alle Buchstaben für alle Rubriken, und die Abfragung lässt ihn trotzdem nicht durch.



MfG, matibaski

edit:
Also der Fehler liegt darin, dass es einen Benutzer der den beötigten Buchstaben nicht hat durchlässt. Den der den erforderlichen Buchstaben hat kommt schon auch durch, aber der andere sollte ja nicht.

Und dann ist es so, dass es einen bei einem Buchstaben wie "S" niemanden durchlässt.
 
Zuletzt bearbeitet von einem Moderator:
dann regelst du das vielleicht besser mit zahlen?

sowas wie

000 = unregistriert
001 = registriert
010 = moderator
011 = supermod
100 = admin

und die kategorien bekommen dann eine zahl zugewiesen z.b. darf ein beitrag nur von leuten gesehen werden die mindestens registriert sind also fragst du

if($_USER['rechte'] >= $kategorie_rechte)

ist doch einfacher oder? ^^
 
Nunja schon, aber ich möchte nicht wirklich, dass es Ränge sind, die man zuteilen kann..

Bei der Verwaltung wählt man einen Benutzer aus und dann kann man verschiedene Rubriken aktivieren/deaktivieren, und nicht: Moderator, Admin, Editor, etc.


MfG, matibaski
 
Aber dann muss ich für jede Kombination einen Rang einrichten. Und wenn der User auf eine Rubrik zugreifen will im CMS dann muss ich jeden Rang abfragen, und das kackt irgendwie...

Also habe diese 3 Kategorien vorläufig: Inhalt, News, Gästebuch und Settings

Und nun müssten so viele Ränge da sein:
PHP:
$rang = array();
$rang[0] = "Admin"; // Alle Kategorien
$rang[1] = "Editor"; // Inhalt, News, Gästebuch
$rang[2] = "blabla"; // Inhalt, News
$rang[3] = "blabla2"; // Inhalt, Gbook
$rang[4] = "blabla3"; // News, Gbook
$rang[5] = "blabla4"; // Inhalt
$rang[6] = "blabla5"; // News
$rang[7] = "blabla6"; // Gästebuch
Das wären dann wenn eine Kategorie dazukommt noch viel viel mehr.
Oder hast du das anders gedacht Slibbo?

Je einfacher desto besser. Heisst ja: IN DER KÜRZE LIEG DIE WÜRZE!




MfG, matibaski
 
Hallo,

die if-Abfrage muss man mit dem !== Operator ausführen, denn wenn das Zeichen an erster Stelle liegt, liefert die Funktion 0 und das wird von PHP zu FALSE konvertiert.

PHP:
if (strpos($rang, "C") !== FALSE) {
   //mach was
} else {
   // Fehler
}

Daran könnte der Fehler mit dem "S" liegen.

Für den anderen Fehler geb mal $rang aus, um zu sehen, was der Besucher überhaupt für Rechte hat, weil eigentlich sollte strpos ja FALSE liefern, wenn er nicht die Rechte hat.


Du könntest das ganze auch als Bitmap implementieren. Spart einiges an Speicher und lässt sich leichter abfragen. Wenn du mit dem Binärsystem und den bitweisen logischen Operatoren (und, oder, nicht) vertraut bist, kann ich dazu mal was schreiben.


N43
 
Nunja, ich habs nun mit Zahlen gemacht.
Jede Kategorie kommt an eine gewisse Stelle, als es gibt eine Reihenfolge:

Inhalte, News, Gästebuch, Settings.
Diese mache ich so quasi als binary, also 0 und 1.

1 = Zugriff gewährt
0 = Zugriff nicht gewährt

Nun habe ich einen Benutzer gemacht, der hat 1111 und einen der hat 0000.

Dies möchte ich je nach Kategorie so abfragen:
PHP:
if(substr($_SESSION['rang'], 0, 1) == "1") // Prüft die erste Stelle nach einer 1.
{
echo'Zugriff gewährt';
}
else // Wenn nicht die rechte dazu, Meldung
{
echo 'Sie haben nicht die genügenden Benutzerrechte um in diese Rubrik einzusehen.<br />
Bitte wählen Sie auf der Navigationsleiste eine Rubrik, bei der Sie die passenden Rechte haben.';
}
Die Session "Rang" setze ich beim einloggen, darin ist seine Nummer mit den Rechten.
Nun will das aber irgendwie nicht. Wieso das?



MfG, matibaski
 
Hallo,

ich hab's bei mir mal getestet, läuft einwandfrei. Geb doch mal den Inhalt von $_SESSION['rang'] aus.

Bzw. das ist im Prinzip 'ne Bitmap, nur spart sie keinen Speicher, weil du für jedes Zeichen 8Bit verbrauchst.

N43
 
Kann es sein, dass es daran liegt das die Spalte ne VARCHAR Spalte ist?

Habe VARCHAR(10) gesetzt, aber ich bezweifle es, dass das der Grund ist.



MfG, matibaski
 
du vergleichst ja ein varchar (also string) mit einem string da dürfte es eigentlich keine probleme geben

vielleicht ist dein string ja nicht 1000 sondern 0001 weil du ja auf die erste stelle überprüfst
 
Ah ich hab den Fehler.

Hab beim Eintragen einen Abstand vor die Zahlen gemacht, also " 1111"

Drum ging es nicht richtig.




MfG, matibaski
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben