• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[Beginner] PHP Script Problem

Xypro

NGBler

Registriert
15 Juli 2013
Beiträge
341
Ort
127.0.0.2 !!
Hallo zusammen,

ich versuche gerade bisschen mit php zu basteln und komme - bei einem wahrscheinlich kleinem Anfängerproblem - nicht weiter:

Ich habe eine txt Datei "produktliste.txt":
[src=php]10001|rot
10002|rot
10003|gelb
10004|gelb[/src]

und dann folgenden php Code:
[src=php]<?php
$produktnr = $_POST["prod_nr"];

$log = 0;
$produktdatei = fopen ("produktliste.txt","r");
while (!feof($produktdatei))
{
$zeile = fgets($produktdatei,500);
$produktarray = explode("|", $zeile);

if ($produktarray[0]==$produktnr and $produktarray[1]=="rot"){
echo "Rot!";
$log = 1;
} elseif ($produktarray[0]==$produktnr and $produktarray[1]=="gelb"){
echo "Gelb!";
$log = 2;
}
}
fclose($produktdatei);

if ($log==0)
{
echo "Grün!";
}
?>[/src]

Egal welche Eingabe ich im Vorgeschalteten Formular mache - als Ergebnis kommt immer "Grün!" heraus.
Die Weitergabe des Formulars habe ich schon geprüft "$produktnr = $_POST["prod_nr"];" funktioniert korrekt.

Sinnigkeit des ganzen sei dahingestellt - ist einfach eine Spielerei mit Code.

Schonmal Danke vorab!
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.829
Ort
Midgard
Und was soll der Code tun?

Aus deinem Post kann man jetzt mutmaßen das es in einigen Eingabefällen wohl nicht "Grün" ausspucken soll, aber das kann man auch deutlich einfacher bewerkstelligen.
[src=php]if($input != "green")
{
die("Definetly not green!");
}[/src]
:D

Generell:
Verzichte auf Steinzeitfunktionen wenn du keinen trifftigen Grund für ihren Einsatz hast. Es gibt Tausend einfachere Wege mit Dateien zu arbeiten wenns schon unbedingt eine Datei sein muss.

In deinem Fall wäre file() vielleicht angebracht.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.829
Ort
Midgard
Offenbar willst du es nicht verstehen. Denn exakt wegen diesem Satz habe ich dir sogar noch ein Beispiel gegeben.

Wenn du keine Hilfe willst, dann frag nicht. Aber wenn dir einer helfen soll muss zumindest das Ziel klar sein.
 

sars

Agent Provocateur

Registriert
15 Juli 2013
Beiträge
54
Hast du dich schonmal gefragt woher ein Texteditor eigentlich weiss, wo er einen Zeilenumbruch zu machen hat und wo nicht?

Um zu speichern, wo eine neue Zeile beginnt werden neben dem eigentlichen Text zudem sogenannte Steuerzeichen eingefügt, vielleicht hast du sowas schonmal in Form einer Escape-Sequenz (Bspw. \n) gesehen:

[src=php]echo "Eine neuer Absatz\n"[/src]

Dein Script liest diese Steuerzeichen mit aus, deswegen sieht deine Abfrage für PHP etwa so aus:

[src=php]if("rot\r\n" == "rot") { ... // false[/src]

Mit der PHP-Funktion trim kannst du solche Steuerzeichen rausfiltern.


Update
Gut, du hast die Lösung selbst gefunden, aber hier nochmal die Erklärung.
 

Xypro

NGBler

Registriert
15 Juli 2013
Beiträge
341
Ort
127.0.0.2 !!
  • Thread Starter Thread Starter
  • #6
@Alter_Bekannter

Dass man die Sinnigkeit dahinter nicht versteht war mir klar. Aber ich wollte nicht wissen auf welch anderem Weg ich zum gleichen Ergebnis komme, sondern wo der Fehler in dem gelisteten Code ist. Hätte ich an der Stelle mehr verdeutlichen sollen als nur den Hinweis, dass die Sinnigkeit zu vernachlässigen sein. Bin dir für deinen Hinweis auf file() trotzdem dankbar!

@ sars
Ja weiß ich... eigentlich... *peinlich* aber manchmal vergisst man das Offensichtliche ;)
Das meinte ich auch, dass sich irgendwo ein "Anfängerfehler" eingeschlichen hat *g*

Danke!
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.829
Ort
Midgard
Noch mal in aller Deutlichkeit: Die Sinnigkeit ist mir Scheissegal.

Aber ohne Zielvorgabe gibts auch keine Definition von "Fehler".

In der alten Weisheit das man erstmal sein Ziel kenne muss ist durchaus was dran. Da scheitern überraschend viele.
 

Xypro

NGBler

Registriert
15 Juli 2013
Beiträge
341
Ort
127.0.0.2 !!
  • Thread Starter Thread Starter
  • #8
Hast ja Recht, ich habe nicht explizit geschrieben "Warum zeigt er mir 'Grün!' an wenn ich '10001' eingebe statt dem erwarteten 'Rot!'. Wo ist der Fehler im Code?"
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.829
Ort
Midgard
Nicht ganz, an der Sache mit der Zieldefinition müssen wir noch arbeiten. Aber ich denke es geht in die richtige Richtung.
Die Tatsache das du es alleine geschafft hast deutet ja auch darauf hin.

DIe Zeildefinition wäre in deinem Fall wohl:
Herauszufinden welche Farbe das Produkt mit ID "X" hat.

Um die Problematik näher zu beleuchten nenne ich jetzt mal noch ein weiteres Beispiel das du erst mit Post #6 Andeutungsweise ausgeschlossen hast.
Nämlich den Fall das du versucht hast quasi eine eigene Dateibearbeitungsbibliothek zu erstellen. Nur eine der Milliarden von Möglichkeiten die einem
dazu spontan einfallen könnten. Im Brainstorming (äquivalent zu Forum) lässt sich sowas dann leicht bis zur Unendlichkeit verkomplizieren.
Je nachdem auf welche Ideen man da noch kommt weshalb du eine eigene Bibliothek möchtest. Geraten würde ich sagen du hast ganz erfolgreich ein
uraltes Tutorial durchgearbeitet richtig?

Daher würde ich Grundsätzlich dazu raten die verwendeten Funktionen hier: http://de1.php.net/manual/de/function.fopen.php gegen zu checken
Denn da wäre schon der Verweis auf file() gewesen. Dessen Seite wiederum die Verwendung von trim() empfiehlt. Denn in die "Falle" rennen die meisten
mehr oder weniger häufig, das gehört echt zu den Dingen die nahezu jeden Programmieranfänger mehr oder weniger lang beschäftigen.
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
Eigentlich wird ja schon zu fopen alles in der Doku gesagt:

Hinweis:

Verschiedene Betriebssysteme haben unterschiedliche Zeilenende Konventionen. Wenn sie eine Text Datei schreiben und einen Zeilenumbruch einfügen möchten, müssen sie das/die korrekte(n) Zeilenende Zeichen für ihr Betriebssystem nutzen. Unix basierte Systeme nutzen \n als Zeilenende Zeichen, Windows basierte Systeme nutzen \r\n als Zeilenende Zeichen und Macintosh basierte Systeme nutzen \r als Zeilenende Zeichen.

Wenn sie die falschen Zeilenende Zeichen beim Schreiben ihrer Dateien nutzen, kann es sein, dass andere Anwendungen, die diese Dateien öffnen, "seltsam aussehen".

Auch wenn das mit dem "seltsam aussehen" genau meine Redewendung ist, hätte man es in der Doku natürlich spezifizieren können/sollen.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.829
Ort
Midgard
Ein reines \n reicht Windows allerdings Erfahrungsgemäß auch.

So einfach ist das also nicht ganz, ich würde lieber bei trim() bleiben.
 
Oben