FHEM Forum

Verschiedenes => Off-Topic => Thema gestartet von: IKaRuS1978 am 29 November 2016, 12:32:36

Titel: Hilfe bei PHP Script
Beitrag von: IKaRuS1978 am 29 November 2016, 12:32:36
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"]...
Titel: Antw:Hilfe bei PHP Script
Beitrag von: marvin78 am 29 November 2016, 12:47:53
Steht wirklich Pause drin oder Pause<blank> oder ähnliches?

Versuche es mit

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

oder gleich mit Regex (preg_match).
Titel: Antw:Hilfe bei PHP Script
Beitrag von: IKaRuS1978 am 29 November 2016, 13:14:59
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...
Titel: Antw:Hilfe bei PHP Script
Beitrag von: marvin78 am 29 November 2016, 13:17:55
Was macht denn

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


?
Titel: Antw:Hilfe bei PHP Script
Beitrag von: IKaRuS1978 am 29 November 2016, 13:20:27
bringt auch durchgehend $v = 0
Titel: Antw:Hilfe bei PHP Script
Beitrag von: IKaRuS1978 am 29 November 2016, 13:22:43
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
Titel: Antw:Hilfe bei PHP Script
Beitrag von: marvin78 am 29 November 2016, 13:26:47
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.
Titel: Antw:Hilfe bei PHP Script
Beitrag von: Lonie am 29 November 2016, 13:32:03
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;
}

Titel: Antw:Hilfe bei PHP Script
Beitrag von: marvin78 am 29 November 2016, 13:34:34
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.
Titel: Antw:Hilfe bei PHP Script
Beitrag von: IKaRuS1978 am 29 November 2016, 13:39:20
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)
Titel: Antw:Hilfe bei PHP Script
Beitrag von: marvin78 am 29 November 2016, 13:41:00
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?
Titel: Antw:Hilfe bei PHP Script
Beitrag von: IKaRuS1978 am 29 November 2016, 13:44:09
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?
Titel: Antw:Hilfe bei PHP Script
Beitrag von: Lonie am 29 November 2016, 13:47:41
@marvin78: Die Klammern waren nur ein Hinweis wegen der Lesbarkeit.

@IKaRuS1978: Das würde var_dump mit ausgeben.
Titel: Antw:Hilfe bei PHP Script
Beitrag von: marvin78 am 29 November 2016, 13:52:07
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.
Titel: Antw:Hilfe bei PHP Script
Beitrag von: IKaRuS1978 am 29 November 2016, 13:56:35
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.

Titel: Antw:Hilfe bei PHP Script
Beitrag von: Lonie am 29 November 2016, 14:10:17
In der Regel hält man sich an Coding Standards, in dem Fall PSR-2. Naja, hauptsache das Problem ist beseitigt  ;)
Titel: Antw:Hilfe bei PHP Script
Beitrag von: marvin78 am 29 November 2016, 14:12:20
In der Regel und in der realen Welt macht man das, was effizient ist. Damit soll es gut sein.