Peter: sucht Wort im string - Login gibt es den User?

Hallo,

ich stehe vor einem grossen verständniss Problem

Also ich bau mir nun ein Login System

Es wird aus der Datenbank ein String geholt der so aussieht:

Peter; Ilse; Marie; Lisa

Die Daten habe ich nun aus der Datenbank geholt. Und zwar stehen die Daten nun in einem Array

mit implode zerlege ich nun den array in einem string

---
$str = array();
$str[] = $row['ZUGANG']; // ZUGANG ist das MySQL Feld
$array =$str;

$str = implode(";", $array);
echo "implode:  ". $str;      // implode:  Peter; Ilse; Marie; Lisa
---

nun muß ich aber irgendwie eine abfrage if oder while machen ob es Marie gibt wenn ja darf sie sich einlogen.

nur da bleibe ich hängen, der eine wird wohl sagen wofür gibt es das menual aber wenn ich es trotzdem nicht verstehe weil vermutlich ein vertsändnisprpblem besteht was soll ich da machen?

ich dachte mir da wende ich mich ans forum wofür gibt es das sonst?

also nun muss ich erstmal den string nach jedem semikoln teilen um ein teilstring zubekommen und das mache ich hiermit:

---
list ($teilstr1, $teilstr2) = split ('[;]', $str);
echo "$teilstr1 <br> $teilstr2 <br>";
---

Das ist zwar eine Lösung aber was mache ich wenn mein String 300 Einträge hat ich kann doch nicht $teilstr1 bis $teilstr300 schreiben...

Oder ist es falsch mit implode das array in ein string umzuwandeln?

da man auf einem array besser zugreifen kann? Aber mit dem array bin ich nicht wirklich zurecht gekommen

Also nun komme ich nochmals zum Array Ich hole mir die Daten aus der Datenbank und schreibe mir die an das Array was bei mir "$str" heisst.

Fraglich ist wie sieht mein Array aus? Es kann ja nur so aussehen: Array ( [0] => Peter; Ilse; Marie; Lisa)

Aber bei mir muss es anders aussehen und zwar so um damit arbeiten zukönnen:
Array ( [0] => Peter [1] => Ilse [2] => Marie [3] => Lisa)

muss ich das denn? schliesslich will ich ja nur Peter Ilse Marie Lisa
einzeln ansprechen?

mit each() kann ich mir alle variablen holen mit next() kann ich ein element weitergehen, eigentlich solltes es doch das sein was ich brauche aber ich kann es nicht anwenden weil ich in meinen versuchen irgendwas falsch gemacht habe?

kann mir jemand ein gedankensprung geben wie ich da vorgehen muss? aus den beispielen aus dem manual werde ich nicht schlau ich verstehe sie zwar aber bei mir ist das ja doch noch etwas anders

danke für eure mühe!

gruss peter

  1. Hallo,

    Ich weiß ja jetzt nicht wie deine Tabelle aussieht aber
    wenn du sie so gemacht hast wie alle anderen das machen
    dann schaut sie so aus:

    Benutzername | Passwort | anderes Feld
    Fichtl       | hui      | nix
    Franzi       | holla    | a nix

    und dann machst du einfach eine SQL-Abfrage like this:
    SELECT * FROM tabelle WHERE Benutzername='Fichtl' AND Passwort='hui'

    und wenn da was zurückkommt dann ist er ok und wenn nicht
    ist entweder das Passwort oder der Benutzername falsch und
    du kannst eine Fehlermeldung ausgeben.

    Also nix mit in String umwandeln dann wieder zurück in Array
    und ... . ....

    Schöne Grüße
    FICHTL

    1. Hallo,

      Ich weiß ja jetzt nicht wie deine Tabelle aussieht aber
      wenn du sie so gemacht hast wie alle anderen das machen
      dann schaut sie so aus:

      Benutzername | Passwort | anderes Feld
      Fichtl       | hui      | nix
      Franzi       | holla    | a nix

      Hallo

      ja so einfach ist das ja bei mir nicht.

      Also ich habe 1 Content den 4-5 User bearbeiten können die User stehen im Feld ZUGANG die Namen sind durch Semikolon getrennt.

      Lisa; Peter; Reinhold; Erwin

      Wie stelle ich da den vergleich her? Wie Frage ich da ab ? Das Semikoln dient in dem Falle als Trennzeichen

      vielleicht stelle ich mir das auch zu kompliziert vor und esgibt eine einfache Lösung?

      1. Also ich habe 1 Content den 4-5 User bearbeiten können die User stehen im Feld ZUGANG die Namen sind durch Semikolon getrennt.

        Das ist aber nicht recht schön, man könnte die ja in eine andere
        Tabelle legen und über ID verknüpfen aber bei wenigen Daten ist
        das auch egal.

        $namen = explode('; ', $row['ZUGANG']); // aus dem namen string ein array machen.

        foreach ($namen as $n) { // Alle Namen durchgehen
          if ($n == 'Franz') {   // und vergleichen mit Benutzernamen "Franz"
             // Login Zeugs machen und Schleife abbrechen
             $login = true;
             break;
          }
        }
        if (! $login) {
          // Fehlermeldung
        }

        So dürfte es funktionieren nur den "Franz" mußt du durch die Eingabe
        die vom Benutzer kommt ersetzen.

        Schöne Grüße
        FICHTL

        1. $namen = explode('; ', $row['ZUGANG']); // aus dem namen string ein array machen.

          foreach ($namen as $n) { // Alle Namen durchgehen
            if ($n == 'Franz') {   // und vergleichen mit Benutzernamen "Franz"
               // Login Zeugs machen und Schleife abbrechen
               $login = true;
               break;
            }
          }
          if (! $login) {
            // Fehlermeldung
          }

          Nur das doofe das funktioniert nicht richtig!

          Wenn nun Franz; Peter in der Datenbank steht dürfen auch nur die User sich einloggen aber Franziska kann sich auch einloggen! Wobei die nicht in der Datenbank steht. Wenn muß er schon den ganzen String vergleichen. Ich dachte in $n wird das Element des Array geschrieben?

          1. Nur das doofe das funktioniert nicht richtig!

            Wenn nun Franz; Peter in der Datenbank steht dürfen auch nur die User sich einloggen aber Franziska kann sich auch einloggen! Wobei die nicht in der Datenbank steht. Wenn muß er schon den ganzen String vergleichen. Ich dachte in $n wird das Element des Array geschrieben?

            Ja tut er ja auch, warum probierst du es nicht einfach aus?

            $namen sieht zB so aus:
            array(4) { [0]=>  string(5) "Franz" [1]=>  string(4) "Sepp" [2]=>  string(4) "Ilse" [3]=>  string(6) "Fichtl" }

            wenn er jetzt jeden durchgeht und vergleicht dann passiert
            $n == $usereingabe
            "Franz" == "Franziska" und das ist falsch kein login

            außerdem ist mir noch eingefallen das man das durchgehen des
            arrays sich sparen kann wenn man in_array($username, $namen); verwendet.

            Wo liegt denn jetzt das Problem? Gibts einen Fehler?

            Schöne Grüße
            FICHTL

            1. wenn er jetzt jeden durchgeht und vergleicht dann passiert
              $n == $usereingabe
              "Franz" == "Franziska" und das ist falsch kein login

              Also ich habe es ausprobiert und probiere immer noch aus aber er tut nicht das was ich mir gedacht habe ich habe aich schon im Manual gesucht aber kann den Fehler nicht finden

              Dein Beispiel klingt logisch aber irgendwie funktioniert es trotzdem nicht

              Ein Login soll nur statt finden wenn die Eingabe == Franz ist.

              Aber wenn ich als Eingabe Franziska habe logt er sich trotzdem ein!?
              Da verstehe ich nicht?

              In meiner Datenbank habe ich nur admin; Franz; Peter stehen und nur die Namen dürfen sich einloggen aber warum geht Franziska auch?

              liefert mir das foreach andere Werte? Es ist total egal wie der Name heisst

              Also nochmal:

              So sieht mein einfaches Script aus:

              ---
              require_once('./config.php');
              $dbh = getConn();
              $rs_level = mysql_query("SELECT * FROM content WHERE ID = '604'", $dbh) or die ('Ein Fehler ist aufgetreten edit: ' . mysql_error());
              $row = mysql_fetch_assoc($rs_level);

              $namen = explode('; ', $row['ZUGANG']); // aus dem namen string ein array machen.

              foreach ($namen as $n) { // Alle Namen durchgehen
                if ($n ==  'admin') {   // und vergleichen mit Benutzernamen "Franz"
                   // Login Zeugs machen und Schleife abbrechen
                   $login = true;
                   break;
                }
              }
              if ($login) {echo "Login";}
              else { echo "Name falsch";}
              ---

              Bei if ($n ==  'admin')
              Ausgabe: Name falsch

              if ($n ==  'administrator')
              Ausgabe: Name falsch

              if ($n ==  'Franz')
              Ausgabe: Name falsch

              if ($n ==  'Franziska')
              Ausgabe: Name falsch

              Ich sitze da schon 5 Stunden dran aber mehr wie ausprobieren kann ich nicht ich finde das klingt alles sehr logisch aber wo ist da noch der Fehler?

              Ich habe schon daran gedacht $namen ist ja ein Array und vielelicht liegt dort der Fehler? Und habe es so geschrieben $namen[] aber das ist auch verkehrt. Vielleicht stelle ich mir mein Array auch falsch vor dasich nicht auf das selbe Ergebnis komme wie mein PHP Script?

              1. Fehler habe ich nun gefunden!

                Also der Fehler war wo anders und zwar hier:

                $namen = explode('; ', $row['ZUGANG']); // aus dem namen string ein array machen.

                ich habe das dann geändert:

                $namen = explode(';', $row['ZUGANG']); // aus dem namen string ein array machen.

                das leerzeichen hinter dem semikolon hat alles falsch gemacht versteh ich zwar nicht? aber nun geht es!

                Danke!!!

                Wegen so einen scheiss funktioniert das ganze Script nicht :-(

            2. Nur das doofe das funktioniert nicht richtig!

              Wenn nun Franz; Peter in der Datenbank steht dürfen auch nur die User sich einloggen aber Franziska kann sich auch einloggen! Wobei die nicht in der Datenbank steht. Wenn muß er schon den ganzen String vergleichen. Ich dachte in $n wird das Element des Array geschrieben?

              Also noch was, ich habe nun ein selbsttest gemacht um die variablen zu überprüfen

              so sieht mein Code aus:

              --- schnipp ---

              foreach ($namen as $n) { // Alle Namen durchgehen
                $login= "admin";
                if ($n ==  $login) {   // und vergleichen mit Benutzernamen "Franz"
                   // Login Zeugs machen und Schleife abbrechen
                  echo "du bist drin";
                }
                echo $n;
                echo $login;
              }

              --- schnapp ---

              echo $n;     // Ausgabe: admin;Franz;Peter - alles richtig!!!
              echo $login; // Ausgabe: admin - alles richtig!!!

              echo "du bist drin"; // Keine Ausgabe !? falsch!
              aber warum geht er dort nicht rein???

              1. --- schnipp ---

                foreach ($namen as $n) { // Alle Namen durchgehen
                  $login= "admin";
                  if ($n ==  $login) {   // und vergleichen mit Benutzernamen "Franz"
                     // Login Zeugs machen und Schleife abbrechen
                    echo "du bist drin";
                  }
                  echo $n;
                  echo $login;
                }

                --- schnapp ---

                echo $n;     // Ausgabe: admin;Franz;Peter - alles richtig!!!
                echo $login; // Ausgabe: admin - alles richtig!!!

                echo "du bist drin"; // Keine Ausgabe !? falsch!
                aber warum geht er dort nicht rein???

                ganz einfach:
                  echo $n // muß "adminFranzPeter" ausgeben

                heißt also in deinem array ist was falsch,
                arrays kannst du dir mit var_dump($namen); ansehen.
                um es übersichtlicher zu gestallten kannst du vorher
                und nachher "<pre>" bzw. "</pre>" ausgeben oder dir
                den Quelltext ansehen.

                auf ein neues, grüße
                FICHTL