php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.03.2010, 13:11  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard [Erledigt] in_array schlägt fehl obwohl werte um array vorhanden sind

Hallo Leutz,

ich habe da ein Problem was mir nicht ganz einleuchten will.

Hier mal meine Codes, die kleine Login Klasse und die index mit einigen Kontrolltests und Ausgaben.

loginClass.php
PHP-Code:
<?php
/*
*
* klasse für das login aus einem txt File heraus
*
*/
class Login{
 
 
/*
 *
 * @param $loggedFile zu öffnendes user log data file
 * access private txt file
 *
 */
 
private $loggedFile "logData.txt";
 
 
/*
 *
 * @param $loggedData / array mit zugansdaten
 * access private arrray
 *
 */
 
private $loggedData = array();
 
 
/*
 *
 * @param $userLogged / string mit dem usernamen der in session id gespeichert wird
 * access private string
 *
 */
 
private $loggedUser;
 
 
/*
 *
 * constructor
 *
 */
 
public function __construct(){}
 
 
/*
 *
 * methode um das file zu öffnen und logindaten in ein array zu lesen
 *
 */
 
private function openLoggedFile(){
  
  if(
file_exists($this->loggedFile)){
   
   
$this->loggedData file($this->loggedFile);
   
   return 
$this->loggedData;
   
  } else {
   
   return 
'<span style="color: #ff0000;">Logged File logData.txt is not exists!</span>';
  }
 }
 
 
/*
 *
 * methode zum prüfen der login daten und schreiben in session variablen
 *
 */
 
public function checkedLoginData($username$password){
  
  
//in diesen if zweig geht er nicht rein, obwohl werte im array vorhanden sind
  
if(in_array($username.','.$password$this->openLoggedFile())){
   
   
$this->loggedUser $username;
   
   return 
$this->loggedUser;
  } else {
   
   
//testazsgabe was um zu sehen wie die eingaben aussehen
   //da nicht in den if zweig gesprungen wird
   
return $username.','.$password.' - <span style="color: #ff0000;">This Logged Data is not correct!</span>';
  }
 }
 
 
//testaugabe für das arrray nach file öffnen
 
public function loggedTest(){
  
  return 
$this->openLoggedFile();
 }
}
?>
index.php
PHP-Code:
<?php
error_reporting
(E_ALL E_STRICT);
ini_set("display_errors"true);
require_once(
'loginClass.php');
$logged = new Login();
if(isset(
$_POST['login'])){
 
 
$checkLogin $logged->checkedLoginData($_POST['username'], $_POST['password']);
 
 
//testausgabe was passiert nach eingabe der userdaten
 
echo $checkLogin.'<br><br>';
 
 
//testausgabe userdaten
 
echo $_POST['username'].' / '.$_POST['password'];
}
//testausgabe des arrays
echo '<pre>';
 
$openArray $logged->loggedTest();
 
 
print_r($openArray);
 
echo 
'</pre>';
?>
<form action="" method="post">
 
 <input type="text" name="username"  /><br />
 
 <input type="password" name="password"  /><br />
 
 <input type="submit" name="login" value="Login" />
 
</form>
Im Anhang noch eine kleine Grafik das die Werte auf alle Fälle so wie ich sie abfrage auch im Array stehen.

Ok also ich gebe die Daten Nutzernamen und Passwort ein (das die Passwörter da im Klartext drin stehen ist nur zum testen, danach werden die gehasht) und die Prüfung in der Methode checkedLoginData schlägt fehl, obwohl die Werte im Array drin stehen. Wenn ich schreibe !in_array dann springt der in den if Zweig, dieses Verhalten kann ich Aufgrund meiner Testausgaben auch nicht nachvollziehen. Seht ihr da etwas was ich übersehe? Problem nun ist das, dass Login nicht funktioniert.

Ich denke die Kommentare im Code sind ausreichend um die Grafik bzw. die Ausgaben in der Grafik nachvollziehen zu können.

Vielen Dank für eure Hilfe mfg litter
Miniaturansicht angehängter Grafiken
erledigt-in_array-schlaegt-fehl-obwohl-werte-um-array-vorhanden-sind-eingtest.jpg  
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.03.2010, 13:26  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.127
drsoong wird schon bald berühmt werden
Standard

Hi

sieht eigentlich funktionstüchtig aus. Außer dass Dein HTML nicht valide ist, aber das dürfte hier wohl nicht so die Rolle spielen.

Vielleicht hat Dein Textfile ja noch ein paar Zeilenumbrüche, Leerzeichen oder ähnliches. Eben unsichtbare Zeichen, um die man das eingelesene Array erst mal bereinigen müßte.
drsoong ist offline  
Alt 13.03.2010, 13:33  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Du kannst haben, daß sich Steuerzeichen, wie z.B. das Zeilenende aus den Zeilen der Datei logData.txt im Array noch vorhanden sind.
Dadurch schlägt der Vergleich fehl.

EDIT:
Genau das was drsoong meinte...

Geändert von Arne Drews (13.03.2010 um 13:34 Uhr). Grund: drsoong nicht gesehen
Arne Drews ist offline  
Alt 13.03.2010, 14:12  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Ok,

ich werde das mal prüfen und dann mich noch mal zurück melden.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 13.03.2010, 14:37  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Also ich habe das nun mal gemacht und tatsächlich wurden solche Zeichen entfernt, aber der Vergleich schlägt dennoch fehl.

Hier der verbesserte Code in der Klasse. Alles andere ist wie gehabt.

PHP-Code:
<?php
/*
*
* klasse für das login aus einem txt File heraus
*
*/
class Login{
 
 
/*
 *
 * @param $loggedFile zu öffnendes user log data file
 * access private txt file
 *
 */
 
private $loggedFile "logData.txt";
 
 
/*
 *
 * @param $loggedData / array mit zugansdaten
 * access private arrray
 *
 */
 
private $loggedData = array();
 
 
/*
 *
 * @param $userLogged / string mit dem usernamen der in session id gespeichert wird
 * access private string
 *
 */
 
private $loggedUser;
 
 
/*
 *
 * constructor
 *
 */
 
public function __construct(){}
 
 
/*
 *
 * methode um das file zu öffnen und logindaten in ein array zu lesen
 *
 */
 
private function openLoggedFile(){
  
  if(
file_exists($this->loggedFile)){
   
   
$this->loggedData file($this->loggedFile);
   
   for(
$i 0$i count($this->loggedData); $i++){
   
    
$this->loggedData[$i] = str_replace("\n"''$this->loggedData[$i]);
    
$this->loggedData[$i] = str_replace(" "''$this->loggedData[$i]);
   }
   
   return 
$this->loggedData;
   
  } else {
   
   return 
'<span style="color: #ff0000;">Logged File logData.txt is not exists!</span>';
  }
 }
 
 
/*
 *
 * methode zum prüfen der login daten und schreiben in session variablen
 *
 */
 
public function checkedLoginData($username$password){
  
  
//in diesen if zweig geht er nicht rein, obwohl werte im array vorhanden sind
  
if(in_array(trim($username).','.trim($password), $this->openLoggedFile())){
   
   
$this->loggedUser $username;
   
   return 
$this->loggedUser;
  } else {
   
   
//testazsgabe was um zu sehen wie die eingaben aussehen
   //da nicht in den if zweig gesprungen wird
   
return $username.','.$password.' - <span style="color: #ff0000;">This Logged Data is not correct!</span>';
  }
 }
 
 
//testaugabe für das arrray nach file öffnen
 
public function loggedTest(){
  
  return 
$this->openLoggedFile();
 }
}
?>
Laut meiner Array testausgabe wird mir auch gezeigt das der Code richtig ist. error_reporting sagt mir auch nichts und einen logischen Fehler kann ich einfach nicht finden.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 13.03.2010, 14:45  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Damit schließt Du nur Leerzeichen und \n aus.
Mag sein, daß es nichts bringt, aber um es wirklich auszuschließen solltest Du
PHP-Code:
   $this->loggedData = array();
   foreach(
file($this->loggedFile) as $line$this->loggedData[] = trim($line); 
machen.

Wenn der Vergleich dann immer noch fehl schlägt, müssen wir woandes schauen.
Aber die Vermutung liegt hier nahe...
Arne Drews ist offline  
Alt 13.03.2010, 14:48  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Arne habe vielen Dank, ich habe das trim an der falschen Stelle eingesetzt.

Hier mal die Methode mit dem Code wie es jetzt funktioniert.

PHP-Code:
private function openLoggedFile(){
  
  if(
file_exists($this->loggedFile)){
   
   
$this->loggedData file($this->loggedFile);
   
   for(
$i 0$i count($this->loggedData); $i++){
   
    
$this->loggedData[$i] = trim($this->loggedData[$i]);
   }
   
   return 
$this->loggedData;
   
  } else {
   
   return 
'<span style="color: #ff0000;">Logged File logData.txt is not exists!</span>';
  }
 } 
Also danke noch mal für die Hilfe.

mfg litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 13.03.2010, 14:52  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Super! Kleiner Tipp: Soweit ich weiß ist foreach() schneller als bspw. for() oder while().

Na Hauptsache es funktioniert.
Arne Drews ist offline  
Alt 13.03.2010, 14:57  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Zumindest solltest du die count() - Funktion an anderer Stelle ausfuehren, sonst zaehlst du die Elemente bei jedem Schleifendurchlauf erneut.

Code:
for($i = 0, $l = count($this->loggedData); $i < $l; ++$i) {
Und
Zitat:
is not exists!
ist auch nicht ganz korrekt:
Zitat:
does not exist
Asipak ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Problem bei update mit array feldern fulltilt PHP Tipps 2010 6 13.02.2010 00:59
PHPLot von der Datenbank zum mehrdimensionalen Array mannimammut PHP Tipps 2009 1 15.12.2009 10:40
Bestimmte Werte aus Array filtern? Moe LaRoqua PHP Tipps 2009 2 14.09.2009 15:03
[Erledigt] array sortieren PHP Tipps 2004 17 13.05.2009 10:44
Array umwandeln von zwei zu mehrdimensional erselbst PHP Tipps 2009 6 02.04.2009 23:30
Array - Falls Artikel schon vorhanden... (Warenkorb mit Artikel-Varianten) mklewer PHP Tipps 2008 20 05.08.2008 15:35
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Soapfault: Undefined Property Argi PHP-Fortgeschrittene 0 28.07.2008 11:17
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25
bbcode - Classe PHP-Fortgeschrittene 4 18.09.2004 17:30
Werte im Array ablegen und mitnehmen ??? PHP Tipps 2004 2 10.09.2004 14:35
Werte aus mehr. dim. Array filtern und zählen PHP Tipps 2004 3 19.08.2004 00:34
werte einer tabelle mit werten einem array vergleichen PHP Tipps 2004 1 08.07.2004 21:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php in_array, in_array php, file in_array, php in_array funktioniert nicht, php in_array findet string nicht, in_array mehrdimensional, if in_array, in_array leerzeichen, in_array, php in_array zweidimensional, php passwort in array, in_array in php, php file in_array, php passwort array, php in_array array in array, if (!in_array, php string compare file in_array, php in_array file, in_array file php funktioniert nicht, in_array mit $_seesion

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:03 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum