Probleme mit PHP und HTML

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hy zusammen,
    ich bin dabei mir ein Wecker (pizero und Jessie) zu programmieren wollte das gern per Smartphone einstellen, verstellen und und.
    Mein Problem ist die Steuerung der HTML-Buttons, zum Test sollte eine Funksteckdose ausschalten werden, aber es passiert nichts. Wenn ich die PHP zum Ausschalten per Terminal aufrufe klappt es.
    Zur meiner Verteidigung muss ich sagen bin ich ein Grünschnabel in der PHP und HTML-Programmierung. Mit Google habe ich ein Grundgerüst gefunden auf dem ich meins Aufbauen will. Der Programmteil vom Taster sieht so aus:
    [code=php]
    <div onClick="Ausschalten()" class="backbox">
    Alles ausschalten</a>
    </div>
    [/php]
    und die Funktion zum ausschalten ist:
    [code=php]
    function Ausschalten() {
    $.get("Ausschalten.php");
    return false;
    }
    [/php]

    Die "Startseite" des Weckers ist auch PHP wird zu beginn als doctype html deklariert.
    Irgend wie stehe ich da voll auf dem Schlauch, wie ich die PHP-Datei aufrufen kann, ich hoffe ihr könnt mir da Licht ins Dunkle bringen.

    mfg Kluski


  • Um meigrafd einmal zuvor zu kommen:

    Ich war gestern zu müde :sleepy:

    Er will zwar keine GPIO schalten, dennoch sollte er sich die Grundlagen anschauen.

    Und dann hätte ich zu dem Thema auch noch was beizusteuern: [PHP] Wecker ;)

  • Danke für Eure hilfe, tut mir leid für mein späte Rückmeldung.
    Ich habe mir den Wecker von meigrafd durch gelesen, ich fand es für den Einstieg einfacher als das was ich gefunden hatte.
    Wenn eine Weckzeit eingestellt wurde, reagiert das Programm nicht drauf. Zu beginnt soll erstmal nur eine LED angehen, leider bleibt sie aus.
    Es kommt auch die Meldungen das ein Wecker ansteht. Wenn der shell_exec mit dem Button "Wecker Stellen" verbinde/aufrufe geht die LED an.
    Woran kann das Liegen?

    hamyam und meigrafd
    Danke für den Links.

  • In meiner wecker.php ist auch noch keine Aktion eingebaut, die muss man selber im markierten bereich hinterlegen ;)

    shell_exec mag nicht nicht. Lies dir dazu mal das "shell_exec vs exec" hier durch: FAQ => Nützliche Links / Linksammlung => Befehle über PHP mit root Rechten ausführen (sudo webscript)

  • Das hatte ich gesehen, das dort nichts hinterlegt war.
    In Zeile 30 , habe ich zum Test/Verstehen einfach:


    Code
    if ($Date[0] == $DAY AND $Date[1] == $MONTH) {
                if ($Time[0] == $HOUR AND $Time[1] == $MINUTE) {
                    // ALART! :)
                    
                    echo "Alarm!\n";
                    shell_exec("/usr/local/bin/gpio -g write 15 1");
                    // Delete Alert.
                    deleteLine($WeckZeitenDatei, $line_num);
                }
            }


    eingetragen. Damit irgendwas passiert, Leider kamm die Gewünschte Erleuchtung nicht :lol:.
    Deswegen habe ich den Befehl in die Funktion,


    angehängt, Sobald die Funktion ausgeführt wird geht die LED an.


    Das mache ich als nächstes, erst will ich den Link
    Ansichts-Optionen [PHP] Anleitung zum schalten von GPIO (Grundlagenverständnis)
    und anschließend kommt der andere Link.


  • Das hatte ich gesehen, das dort nichts hinterlegt war.
    In Zeile 30 , habe ich zum Test/Verstehen einfach:


    Code
    if ($Date[0] == $DAY AND $Date[1] == $MONTH) {
                if ($Time[0] == $HOUR AND $Time[1] == $MINUTE) {
                    // ALART! :)
                    
                    echo "Alarm!\n";
                    shell_exec("/usr/local/bin/gpio -g write 15 1");
                    // Delete Alert.
                    deleteLine($WeckZeitenDatei, $line_num);
                }
            }


    eingetragen. Damit irgendwas passiert, Leider kamm die Gewünschte Erleuchtung nicht :lol:.

    Dann les mal FAQ => Nützliche Links / Linksammlung => PHP: Anleitung zum schalten von GPIO

    Aber vielleicht ist das auch hierfür besser: FAQ => Nützliche Links / Linksammlung => [Python] Webserver, Websocket und ein bisschen AJAX
    PHP ist eh blöd :fies:

  • Guten Abend zusammen,

    Ich bin mir nicht sicher ob ich hier wieterschreiben soll oder ein neues Thema aufmachen.
    Habe mich durch den Tut [Python] Anleitung: Webserver, Websocket und ein bisschen AJAX
    gearbeitet. Nur jetzt stehe ich vor dem Problem um von der HTML seite Eingaben an das Python script weiterzuleiten, dort werden alle Befehle von der control.js empfangen und weiter geleitet.
    Wie sieht es den mit Variablen und Eingabe über Textfenster (Uhrzeit, Name) aus? Wird die control.js erweiter oder Wird die HTML durch PHP erweitert? Wenn ja, was muss alles in der Anleitung angepasst werden?

    Danke im Voraus
    Kluski

  • PHP kommt da überhaupt nicht mehr zum Einsatz.

    Daten die ans Python Script gereicht werden sollen, erfolgt in meinem Tutorial über zwei verschiedene Wege - je nachdem was du verwendest: mit oder ohne WebSocket.
    Mit WebSocket werden die Daten vom control.js über Websocket ans Python Script übergeben. => [Python] Anleitung: Webserver, Websocket und ein bisschen AJAX
    Ohne WebSocket werden die Daten vom control.js über eine bestimmte URL (routes) ans Python Script übergeben. => [Python] Anleitung: Webserver, Websocket und ein bisschen AJAX

    In Deinem Fall würde ich es erst mal mit der "mit WebSocket" Variante (chapter2) probieren.

    Beispiel für ein Formular:
    [code=php]
    <form name="AlarmTimer" onSubmit="return setAlarm();">
    <input type="number" min="0" max="23" class="Button3" name="hour" required="required"> : <input type="number" min="0" max="59" class="Button3" name="min">
    <input type="submit" value="Absenden">
    <input type="reset" value="Abbrechen">
    </form>
    [/php]

    Wir behelfen uns hier des Events "onSubmit" => http://brauchbar.de/html-4-referenz/attribute-onsubmit

    Und programmieren dann eine extra JavaScript Funktion setAlarm() zum auswerten und übermitteln der Daten via WebSocket - und auch direkt zum sicherstellen das zumindest ne Stunde angegeben wurde:
    [code=php]
    function setAlarm() {
    hour = document.AlarmTimer.hour.value;
    min = document.AlarmTimer.min.value;
    if (hour == "") {
    alert("missing Hour!");
    document.AlarmTimer.hour.focus();
    return false;
    }
    if (min == "") { min = '00'; }
    WebSocket_Send('setALARM:' + hour + ':' + min);
    return true;
    }
    [/php]

    Übermittelt wird dann zum Beispiel: setALARM:22:00
    Dafür müsste man dann noch im Python Script in der "WebRequestHandler" Funktion eine Behandlung einbauen...

  • Danke für deine Hilfe, ich habe da zwei Fragen:
    Um die Funktionsweise besser zu verstehen habe ich, eine Taste hinzugefügt

    Code
    <br/> <input type="button" value="CPU Temperatur" onClick="WebSocket_Send('PiTEMP')" />
       <br/> <b>CPU Temperatur:</b> <span id="PiTEMP">0</span> &deg;C
      <br/> <input type="button" value="RAM" onClick="WebSocket_Send('RAMperc')" />
      <br/> <b>CPU Temperatur:</b> <span id="RAMperc">0</span> MB


    Dabei sollte der Ram ausgegeben werden. Bei Der Temperatur bekomme ich zwei Ausgaben 1) an der definierten Stelle in HTML
    und 2) als

    Code
    Received message: >>> PiTEMP:46.54<<<


    Beim RAM wird nur

    Code
    Received message: >>> RAMperc:27<<<


    ausgegeben, an der definierten Stelle bleibt die "0MB" stehen. Die Funktion zum Ram ist aus [Andere] [Python] Anleitung: Webserver, Websocket und ein bisschen AJAX [#4], Ich habe aus der web_bottle nicht verändert, ich habe mir in den WebRequestHandler eine Ausgabe rein gemacht, die wird auch aufgerufen und der Richtige Command wird abgearbeitet.

    Die zweite Frage ist zu deinen Programmabschnitten die du gepostet hast

    [code=php]<form name="AlarmTimer" onSubmit="return setAlarm();">
    <input type="number" min="0" max="23" class="Button3" name="hour" required="required"> : <input type="number" min="0" max="59" class="Button3" name="min">
    <input type="submit" value="Absenden">
    <input type="reset" value="Abbrechen">
    </form> [/php]

    [code=php]function setAlarm() {
    hour = document.AlarmTimer.hour.value;
    min = document.AlarmTimer.min.value;
    if (hour == "") {
    alert("missing Hour!");
    document.AlarmTimer.hour.focus();
    return false;
    }
    if (min == "") { min = '00'; }
    WebSocket_Send('setALARM:' + hour + ':' + min);
    return true;
    }[/php]

    Wenn ich auf absenden drücke wird die Verbindung kurz getrennt und es wird eine neue Verbindung aufgebaut.
    Ist das normal?

  • RAMperc sind Prozent nicht MB :fies:
    Das Problem ist dass die Handhabung in control.js eine andere ist als bei PiTEMP:

    Code
    document.getElementById("RAMperc").value = val;
    # Vs.
    document.getElementById("PiTEMP").innerHTML = val;

    Siehst du den Unterschied? ;)


    Die "perc" Werte nutze ich anders:
    [code=php]
    RAM: &nbsp;&nbsp; &nbsp; <progress id="RAMperc" value="0" max="100"></progress> <span id="RAMnum" ></span> <br/>
    [/php]Das ergibt einen schönen Balken der sich ändert und dahinter steht ne Zahl ;)


    Die zweite Frage ist zu deinen Programmabschnitten die du gepostet hast

    Wenn ich auf absenden drücke wird die Verbindung kurz getrennt und es wird eine neue Verbindung aufgebaut.
    Ist das normal?

    Ja, das ist leider normal ... und liegt am "input type=submit" Gedöns, deswegen mag ich das generell nicht weil dann die Seite neu geladen wird.
    Ausweg: AJAX mit jQuery. Google Suche nach: html javascript input submit without reload

    Oder einfach kein "input type=submit" nutzen sondern ein normalen "input type=button" eben genau so wie's mit PiTEMP usw gemacht wird ;)
    [code=php]
    <!DOCTYPE html>
    <html>
    <head>
    <title>Submit Form Without Reloading Page</title>

    <script type="text/javascript">
    function setAlarm() {
    hour = document.AlarmTimer.hour.value;
    min = document.AlarmTimer.min.value;
    if (hour == "") {
    alert("missing Hour!");
    document.AlarmTimer.hour.focus();
    return false;
    }
    if (min == "") { min = '00'; }
    alert("Hour: " + hour + "\nMin: " + min);
    }
    </script>

    </head>
    <body>

    <form name="AlarmTimer">
    <input type="number" min="0" max="23" class="Button3" name="hour" required="required"> : <input type="number" min="0" max="59" class="Button3" name="min">
    <input type="button" id="submit" value="Absenden" onClick="return setAlarm()">
    <input type="reset" value="Abbrechen">
    </form>

    </body>
    </html>
    [/php]Demo: http://RaspberryPi.roxxs.org/test/f.html

  • Danke, ich dachte es werden nur die die Dateien benötigt:
    websocket.js , web_bottle.py und index.html
    Hatte es dennoch in control.js geändert aber es wird trotzdem nicht an der Richtigen stelle aktuallisiert.
    Habe das zur zweiten Frage eingebunden, läuft :D keine neues verbinden. Leider habe ich da eine neue Frage, Wobei ich mir denke :-/ hee, ich habe dein
    [code=php]
    <!-- alert("missing Hour!");-->
    <!-- Geändert zu-->
    alert("Da fehlt etwas!");
    [/php]
    Dann muss der Text "Da fehlt etwas" auftauchen, es kommt trotzdem "missing Hour!"
    Aus dem websocket.js habe ich Funktion setAlarm() entfernt. Weil dort wird Sie ja nicht mehr benötigt und ich ging davon aus die Meldung wird dort erzeugt.

    Einmal editiert, zuletzt von kluski (1. Oktober 2016 um 11:33)


  • ich dachte es werden nur die die Dateien benötigt:
    websocket.js , web_bottle.py und index.html

    Jein. websocket.js handhabt nur das verbinden, absenden und trennen der WebSocket Geschichte. Zusätzlich benötigst du aber auch noch die control.js in der die Verarbeitung drin steht und auch weitere Funktionen usw. Das wird in Chapter2 aber auch so aufgeführt/beschrieben.
    Zusätzliche JavaScript Funktionen kannst du ebenfalls ins control.js einfügen, in diesem Fall also "setAlarm"


    Hatte es dennoch in control.js geändert aber es wird trotzdem nicht an der Richtigen stelle aktuallisiert.

    Wie gesagt,
    document.getElementById("RAMperc").value = val;
    macht etwas anderes als
    document.getElementById("PiTEMP").innerHTML = val;

    Wenn du also unbedingt "RAMperc" als Wert direkt angezeigt haben möchtest, musst du die Zeile so abändern:
    document.getElementById("RAMperc").innerHTML = val;

    Google einfach mal nach: innerHTML


    Durch drücken des "Absenden" buttons wird die Funktion "setAlarm" ausgeführt und dort wird geprüft ob "hour" gesetzt ist - falls nicht erscheint die Meldung "missing Hour!".
    [code=php]
    function setAlarm() {
    hour = document.AlarmTimer.hour.value;
    min = document.AlarmTimer.min.value;
    if (hour == "") {
    alert("missing Hour!");
    document.AlarmTimer.hour.focus();
    return false;
    }
    if (min == "") { min = '00'; }
    alert("Hour: " + hour + "\nMin: " + min);
    }
    [/php]Das "return false;" sorgt dafür dass der Code an der Stelle unterbrochen und nicht weiter verarbeitet wird.
    Wenn du nun also etwas ins Feld "hour" einträgst und dann "Absenden" drückst, wird der da drunter stehende Code verarbeitet und erst dann erfolgt deine "Da fehlt etwas" Ausgabe.
    Wichtig ist ebenfalls das der "onClick" Event ein "return" enthält:
    [code=php]<input type="button" id="submit" value="Absenden" onClick="return setAlarm()">[/php]ansonsten erscheint kein alert.
    Willst du später kein "alert" nutzen kann auch das "return" wieder raus.

    Wieso/weshalb/warum bei dir trotz Änderung der alert Zeile noch der alte Text kommt kann ich nicht sagen - vielleicht vergessen die Seite zu reloaden?

  • :daumendreh2: , Ich weis, wer lesen kann ist klar im Vorteil. Habe das mir der Meldung gesehen. Es kommt die Meldung und diese wird auch soweit Übergeben. Die Meldung kam weil in der control.js noch die Funkion "setAlarm()" drin war. Habe diese entfernt und jetzt geht.

    Zitat


    Wenn du also unbedingt "RAMperc" als Wert direkt angezeigt haben möchtest, musst du die Zeile so abändern:

    document.getElementById("RAMperc").innerHTML = val;

    Nein es geht mir nicht um die Anzeige, mir geht es mehr um die Funktionsweise und warum läuft es da und warum hier nicht.

    Einmal editiert, zuletzt von kluski (1. Oktober 2016 um 12:32)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!