Hilfe bei PHP Script

Begonnen von IKaRuS1978, 29 November 2016, 12:32:36

Vorheriges Thema - Nächstes Thema

IKaRuS1978

Hallo zusammen,

hier gibbet ja sicher auch den ein oder anderen, der sich mit PHP auskennt.

Ich hab da ein Problem.
Folgendes Script:
Zitat$filename = "testiperdi.csv";
$datensatz = array();

$fp = fopen($filename, "r");
while( ($csv = fgetcsv($fp, null, ';') ) != false )
{
    $datensatz = array('id' => $csv[0], 'benutzer' => $csv[1], 'vorname' => $csv[2], 'nachname' => $csv[3], 'abteilung' => $csv[4], 'persnr' => $csv[5], 'stempelzeit' => $csv[6], 'terminal' => $csv[7], 'ereignis' => $csv[8], 'pruefung' => $csv[9], 'code' => $csv[10], 'bemerkung' => $csv[11], 'editvon' => $csv[12], 'edit' => $csv[13], 'erfassungszeit' => $csv[14]);

    if($csv[8] != "Pause")
    $v = 1;
    else
    $v=0;
   
    echo "Datensatz: $v";
    echo "</br>";
}

Die Abfrage funzt einfach nicht. Ich versuche abzuprüfen, ob in $csv[8] auch mal "Pause" steht.
Ich bekomme aber immer den wert 1 für $v.

Lasse ich mir $csv[8] aber ausgeben, steht da sehr wohl ab und zu "Pause" drin.

Wo liegt das Problem?

Es ist egal, ob ich $csv[8] nehme, oder $datensatz["ereignis"]...

marvin78

Steht wirklich Pause drin oder Pause<blank> oder ähnliches?

Versuche es mit

if($csv[8] != trim("Pause"))

oder gleich mit Regex (preg_match).

IKaRuS1978

Also meines Erachtens steht wirklich "Pause" drin.

if($csv[8] != trim("Pause"))

führt auch zum gleichen Ergebnis.

Mit preg_match das gleiche Spiel...

Zitat$suche = '/\bHPause\b/i';
    if (preg_match($suche, $csv[8]))

führt zu $v=0

Zitat$suche = '/\bPause\b/i';
    if (preg_match($suche, "Ich gehe heute in die Pause"))

führt zu $y = 1

Ich begreife das nicht...

Lasse ich mir über

echo $csv[8];

den Text ausgeben, wird unter anderem "Pause" ausgegeben.

Checke ich beim besten Willen nicht...

marvin78

Was macht denn

$suche = '/Pause/';
if (preg_match($suche, $csv[8]))


?

IKaRuS1978

bringt auch durchgehend $v = 0

IKaRuS1978

ZitatDatensatz: 0 / Herein
Datensatz: 0 / Pause
Datensatz: 0 / Zur�ck
Datensatz: 0 / Pause
Datensatz: 0 / Zur�ck
Datensatz: 0 / Hinaus
Datensatz: 0 / Herein
Datensatz: 0 / Pause
Datensatz: 0 / Zur�ck
Datensatz: 0 / Pause
Datensatz: 0 / Zur�ck
Datensatz: 0 / Hinaus
Datensatz: 0 / Herein
Datensatz: 0 / Pause
Datensatz: 0 / Zur�ck
Datensatz: 0 / Pause
Datensatz: 0 / Zur�ck
Datensatz: 0 / Hinaus
Datensatz: 0 / Herein
Datensatz: 0 / Pause
Datensatz: 0 / Zur�ck
Datensatz: 0 / Pause
Datensatz: 0 / Zur�ck
Datensatz: 0 / Hinaus
Datensatz: 0 / Herein
Datensatz: 0 / Pause
Datensatz: 0 / Zur�ck
Datensatz: 0 / Hinaus
Datensatz: 0 / Herein
Datensatz: 0 / Pause

marvin78

Weil ich meinem Augen nicht traue (ich sitze seit heute morgen am Debuggen von fremden php-Code und da verschwimmt irgendwann einiges), habe ich deinen Code von ganz oben mal genommen und auf einem Beispiel CSV in dem wirklich "Pause" steht, getestet und er funktioniert einwandfrei. Der Code hat keine Fehler. Es muss am CSV liegen.

Lonie

Zum debuggen eignet sich bei sowas immer ein var_dump um auch nicht sichtbare Zeichen zu erkennen. Zusätzlich würde ich immer geschweifte Klammern empfehlen.

var_dump($csv[8],$csv[8]=="Pause");

if($csv[8] != "Pause") {
  $v = 1;
} else {
  $v=0;
}


marvin78

Die geschweiften Klammern benötgt man natürlich nicht. preg_match sollte auch bei nicht sichtbaren Zeichen ein Ergebnis bringen (richtig verwendet).

var_dump hilft sicher.

IKaRuS1978

auch wieder ein interessantes Mysterium...

var_dump($csv[8],$csv[8]=="Pause");

bringt

Zitatstring(27) "Hinein/Hinaus" bool(false)
string(13) "Herein" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(13) "Hinaus" bool(false)
string(13) "Herein" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(13) "Hinaus" bool(false)
string(13) "Herein" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(13) "Hinaus" bool(false)
string(13) "Herein" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(13) "Hinaus" bool(false)
string(13) "Herein" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(13) "Hinaus" bool(false)
string(13) "Herein" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(13) "Hinaus" bool(false)
string(13) "Herein" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(13) "Hinaus" bool(false)
string(13) "Herein" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(11) "Pause" bool(false)
string(13) "Zur�ck" bool(false)
string(13) "Hinaus" bool(false)
string(13) "Herein" bool(false)
string(11) "Pause" bool(false)

marvin78

#10
Auch wenn es seltsam wäre: Gibt es ein Zeichensatzproblem? Es werden viel zu viele Zeichen gezählt.

Edit: Kannst du mal das CSV einstellen?

IKaRuS1978

ZitatEs werden viel zu viele Zeichen gezählt.

Das ist mir auch schon aufgefallen. Da aber rein gar nichts angezeigt wird, hab ich mir nicht viel dabei gedacht.

Da müsste ja dann "    Pause " oder so stehen, oder?

Lonie

@marvin78: Die Klammern waren nur ein Hinweis wegen der Lesbarkeit.

@IKaRuS1978: Das würde var_dump mit ausgeben.

marvin78

Hm. Das CSV ist in Ordnung. Der Zeichensatz ist ANSI. Sollte funktionieren und in meiner Testumgebung macht das Skript damit auch genau das, was es soll:

string(13) "Hinein/Hinaus" bool(false) Datensatz: 1 / Hinein/Hinaus
string(6) "Herein" bool(false) Datensatz: 1 / Herein
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(6) "Hinaus" bool(false) Datensatz: 1 / Hinaus
string(6) "Herein" bool(false) Datensatz: 1 / Herein
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(6) "Hinaus" bool(false) Datensatz: 1 / Hinaus
string(6) "Herein" bool(false) Datensatz: 1 / Herein
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(6) "Hinaus" bool(false) Datensatz: 1 / Hinaus
string(6) "Herein" bool(false) Datensatz: 1 / Herein
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(6) "Hinaus" bool(false) Datensatz: 1 / Hinaus
string(6) "Herein" bool(false) Datensatz: 1 / Herein
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(6) "Hinaus" bool(false) Datensatz: 1 / Hinaus
string(6) "Herein" bool(false) Datensatz: 1 / Herein
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(6) "Hinaus" bool(false) Datensatz: 1 / Hinaus
string(6) "Herein" bool(false) Datensatz: 1 / Herein
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(6) "Hinaus" bool(false) Datensatz: 1 / Hinaus
string(6) "Herein" bool(false) Datensatz: 1 / Herein
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(6) "Hinaus" bool(false) Datensatz: 1 / Hinaus
string(6) "Herein" bool(false) Datensatz: 1 / Herein
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(6) "Hinaus" bool(false) Datensatz: 1 / Hinaus
string(6) "Herein" bool(false) Datensatz: 1 / Herein
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(5) "Pause" bool(true) Datensatz: 0 / Pause
string(6) "Zurück" bool(false) Datensatz: 1 / Zurück
string(6) "Hinaus" bool(false) Datensatz: 1 / Hinaus



Ich bin raus. Nicht, weil ich keine Lust mehr hätte aber mir fehlt es gerade an Zeit. Hat du eine Möglichkeit, das auch einem anderen Server zu testen?

@Lonie: Das macht man bei solchen ifs in der Regel durch Einrückung.

IKaRuS1978

Unfassbar....jetzt geht es.

Ich hab die Datei neu hochgeladen auf den Server. Und plötzlich ist sie nicht mehr 13Kb groß, sondern 4,9kb und läuft....

Da muss irgendwas beim Upload oder sonstwie in die Hose gegangen sein.

Vielen Dank an alle.
Ihr habt mir sehr geholfen. Auf die Idee, die CSV komplett neu hoch zu laden, wäre ich als letztes gekommen.


Lonie

In der Regel hält man sich an Coding Standards, in dem Fall PSR-2. Naja, hauptsache das Problem ist beseitigt  ;)

marvin78

In der Regel und in der realen Welt macht man das, was effizient ist. Damit soll es gut sein.