• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

php Problem

xXxPeterPanxXx

Neues Mitglied
Hi,
ich bastel mal wieder an einem Code, nur leider habe ich ein Problem. Der Code funktioniert einfach nicht:D.

Code:
<?php
while (TRUE) {
    echo "Bitte treffen Sie Ihre Auswahl:\n";
    echo "1 für Ausgabe\n";
    echo "2 für Eingabe\n";
    echo "X zum Beenden des Programms\n\n";
    
    switch ($test = fgets(STDIN)) {
        case 1:
            echo "\n1 Ausgabe:\n";
            if (isset($eingaben)) {
                var_dump($eingaben);
            } else {
                echo "Keine Eingaben vorhanden\n\n";
            }
            break;
        case 2:
            echo "\n2 Eingabe:\n";
            $eingaben[] = fgets(STDIN);
            echo "\n\n";
            break;
        case "X\n":
        case "X\n":
            echo "\nDanke, besuchen Sie uns bald wieder!\n\n";
            break 2;
        default:
            echo "\nUnbekannte Auswahl\n\n";
            break;
}
}
?>

Das wird im Browser ausgegeben(Diese Ausgabe wiederholt sich bis der Browser das abbricht, oder abstürzt:lol:):

Warning
: fgets(): supplied argument is not a valid stream resource in C:\xampp\htdocs\projects\php-training\kommandozeile.php on line 14
Unbekannte Auswahl Bitte treffen Sie Ihre Auswahl: 1 für Ausgabe 2 für Eingabe X zum Beenden des Programms


Line 14 ist die mit switch nur da kann ich zu 99,9%sagen das da kein Fehler ist, weil ich diese Zeile und den ganzen Code ganz oft durchgegangen bin.

P.s:Ja ich weiss der Titel ist sehr kreativ.
 
Kann man das auch mit "gets_s"machen anstatt "fgets". Ich habe das einmal ausprobiert , nur leider erscheont nun eine nueu Fehlermeldung:

Fatal error: Call to undefined function gets_s() in C:\xampp\htdocs\projects\php-training\kommandozeile.php on line 14
 
Wenn ich das richtig gemacht habe funktioniert das nicht. Ich verstehe immoment nur sehr wenig von php und bin dabei es zu lernen.
Könnte mit irgenteiner beim Code helfen?

Code:
<?php
while (TRUE) {
    echo "Bitte treffen Sie Ihre Auswahl:\n";
    echo "1 für Ausgabe\n";
    echo "2 für Eingabe\n";
    echo "X zum Beenden des Programms\n\n";
    
    switch ($test = fopen ("php://stdin")) {
        case 1:
            echo "\n1 Ausgabe:\n";
            if (isset($eingaben)) {
                var_dump($eingaben);
            } else {
                echo "Keine Eingaben vorhanden\n\n";
            }
            break;
        case 2:
            echo "\n2 Eingabe:\n";
            $eingaben[] = fopen ("php://stdin") ;
            echo "\n\n";
            break;
        case "X\n":
        case "X\n":
            echo "\nDanke, besuchen Sie uns bald wieder!\n\n";
            break 2;
        default:
            echo "\nUnbekannte Auswahl\n\n";
            break;
}
}
?>
 
Zuletzt bearbeitet:
wer sagt das du es richtig machst? du musst mit fopen erst einen stream öffnen den du dann mit fgets auslesen kannst ;)
 
So ich glaube ich bin kurz vor des Rätselslösung :D.

Code:
<?php
while (TRUE) {
    echo "Bitte treffen Sie Ihre Auswahl:\n";
    echo "1 für Ausgabe\n";
    echo "2 für Eingabe\n";
    echo "X zum Beenden des Programms\n\n";
    
    switch fopen ($test = fgets("php://stdin")) {
        case 1:
            echo "\n1 Ausgabe:\n";
            if (isset($eingaben)) {
                var_dump($eingaben);
            } else {
                echo "Keine Eingaben vorhanden\n\n";
            }
            break;
        case 2:
            echo "\n2 Eingabe:\n";
            fopen ($eingaben[] = fgets("php://stdin"));
            echo "\n\n";
            break;
        case "X\n":
        case "X\n":
            echo "\nDanke, besuchen Sie uns bald wieder!\n\n";
            break 2;
        default:
            echo "\nUnbekannte Auswahl\n\n";
            break;
}
}
?>

Es erscheint nun diese Fehlermeldung:

Parse error: parse error, expecting `'('' in C:\xampp\htdocs\projects\php-training\kommandozeile.php on line 14


Tut mir Leid, aber ich habe erst vor zwei Wochen mit php angefangen.
 
du musst erst eine resource öffnen

$a = fopen('datei', 'mode');

wie das geht liest du auf php.net/fopen durch

dann musst du auslesen und das machst du mit fgets

$b = fgets($a);

und DANN machst du den switch (switch($b) { ... })
 
Er redet von STDIN, diese Recourse ist wie STDERR und STDOUT immer offen. Er versucht nur ein CLI-Script mit dem Browser aufzurufen, das kann gar nicht gehen.
 
Über den Browser werden Benutzer-Daten mittels Cookies ($_COOKIE), POST-Daten ($_POST) oder GET-Daten ($_GET) übertragen. Du musst dir also ein HTML-Formular bauen, was heißt, dass du das ganze Script dort wegschmeißen kannst.

STDIN ist ülicherweise eine Tastatur (über die Console) oder ein Datenstrom umgelenkt aus einer Datei.
 
Zurück
Oben