sucht Wort im string - Login gibt es den User?
Peter
- php
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
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
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?
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
$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?
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
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?
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 :-(
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???
--- 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