kostenloser Webspace werbefrei: lima-city


PHP Grundrechnungsarten

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    bestlinks

    bestlinks hat kostenlosen Webspace.

    Hallo,
    kann jemand so lieb sein und dieses triviale Problem ansehen?
    ------------------
    $handyWidth = 400;
    $screenWidth = 0;
    $screenWidth = '<script type=text/javascript>document.write(screen.availWidth)</script>';
    $diff = $screenWidth-$handyWidth;
    if ( $screenWidth <= $handyWidth ){
    echo $screenWidth; // "<script type=text/javascript>window.alert($emsg)</script>";
    }
    echo $error;
    echo $screenWidth - $handyWidth;
    echo $diff;

    -----------------
    $screenwidth =1846
    $handyWidth = 400
    Bei der Rechnung wird $screenwidth als leer (0) verwende
    -----------------
    Herzlichen Dank euch allen!
    ------------------
    PS: das Skript ist in php verfasst. javascript ist nur eingebettet um availWidth auszulesen, weil es diesen Befehl in PHP nicht gibt.
    Es wird übrigens der korrekte Wert (in diesem Fall 1846) übergeben und kann auch angezeigt werden. Nur rechnen kann man damit nicht..
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. h***********r

    Das hängt vermutlich damit zusammen, dass '1846' als String und nicht Integer zurück gegeben wird. Damit kann man dann auch nicht rechnen.Versuch mal $int = intval($string) zu benutzen um an den Wert zu kommen, dann sollte es eigentlich funktionieren.
  4. prinz-und-gloeckner

    prinz-und-gloeckner hat kostenlosen Webspace.

    Zunächst einmal wird bei PHP bei Variablennamen zwischen Groß- und Kleinschreibung unterschieden:
    http://php.net/manual/de/language.variables.basics.php
    Von daher ist $screenwidth bei dem Skript natürlich unbelegt.

    Und dann hast du $screenWidth in Zeile drei mit einer Zeichenkette gleichgesetzt, wenn du also die Variable ausgeben solltest, kommt da diese Zeichenkette heraus, weder 0 noch eine andere Zahl.

    PHP wird auf dem Dienstrechner ausgeführt, JavaScript, sofern die Interpretation aktiviert ist, wird auf dem Rechner des Publikums ausgeführt, Ergebnisse davon kommen also zu spät, um sie mit dem PHP-Skript auszuwerten, welches die Zeichenkette mit dem JavaScript ausgegeben hat.
    Du könntest das Publikum allenfalls mit einem Formular veranlassen, das JavaScript-Ergebnis oder eine andere Eingabe stattdessen an ein weiteres PHP-Skript zu schicken, welches das dann auswertet
    (Ajax ginge prinzipiell auch, davon würde ich aber abraten, weil das unzugänglichen Schnickschnack produziert, beziehungsweise keinen Effekt hat, wenn die Interpretation von JavaScript deaktiviert ist).
  5. h***********r

    prinz-und-gloeckner schrieb:
    Zunächst einmal wird bei PHP bei Variablennamen zwischen Groß- und Kleinschreibung unterschieden:
    http://php.net/manual/de/language.variables.basics.php
    Von daher ist $screenwidth bei dem Skript natürlich unbelegt.

    Und dann hast du $screenWidth in Zeile drei mit einer Zeichenkette gleichgesetzt, wenn du also die Variable ausgeben solltest, kommt da diese Zeichenkette heraus, weder 0 noch eine andere Zahl.

    PHP wird auf dem Dienstrechner ausgeführt, JavaScript, sofern die Interpretation aktiviert ist, wird auf dem Rechner des Publikums ausgeführt, Ergebnisse davon kommen also zu spät, um sie mit dem PHP-Skript auszuwerten, welches die Zeichenkette mit dem JavaScript ausgegeben hat.
    Du könntest das Publikum allenfalls mit einem Formular veranlassen, das JavaScript-Ergebnis oder eine andere Eingabe stattdessen an ein weiteres PHP-Skript zu schicken, welches das dann auswertet
    (Ajax ginge prinzipiell auch, davon würde ich aber abraten, weil das unzugänglichen Schnickschnack produziert, beziehungsweise keinen Effekt hat, wenn die Interpretation von JavaScript deaktiviert ist).

    Wenn JS deaktiviert ist wird dir JS auch kein Ergebnis für ein Formular ausgeben.

    Das ganze hält sich recht übersichtlich:
    var xhr = new XMLHttpRequest();
       xhr.onreadystatechange = function () {
       if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
         document.getElementById("Ausgabe").innerText = xhr.responseText;
       }
       }
       xhr.open("GET", "./script.php?screenwidth="+screen.availWidth , true);
       xhr.send();

    Wobei script.php über GET die Variable zum Verarbeiten nimmt und über echo das Ergebnis zurück gibt welches dann in Ausgabe angezeigt werden soll.Irgendwie so in der Art:
    <?php
    $screenwidth = intval(htmlspecialchars($_GET['screenwidth']));
    $handywidth = 400;
    $diff = $screenwidth-$handywidth;
    if ( $screenwidth <= $handywidth ){
       echo "<script type=text/javascript>window.alert(".$screenWidth.")</script>";
    }
    echo $screenwidth;
    echo $handywidth;
    echo $diff;

    (Ungetestet)

    Wobei es sicher ganz interessant wäre was du mit dem Code versuchst. Wenn es nur darum geht Mobilgeräte zu erkennen, geht das ganze über $_SERVER['HTTP_USER_AGENT'] einfacher.
  6. prinz-und-gloeckner

    prinz-und-gloeckner hat kostenlosen Webspace.

    Natürlich kommt dabei nichts heraus, wenn die Interpretation von JavaScript deaktiviert ist, daher riet ich zum einen von solchen Ajax-Anwendungen ab, zum anderen dazu, es per Formular zu senden.
    Da kann das Publikum bei Bedarf selbst einen Wert manuell eingeben. Sofern ein Skript aktiv ist, kann es ja einen Vorschlag in das Formularfeld eintragen.
    So entstehen keine Barrieren.

    Wenn es nur um dekorative Aspekte geht - Anzeige für verschieden große Darstellungsbereiche anpassen oder auch an verschiedene Auflösungen, gibt es dafür ja CSS-Medienanfragen/angaben (media queries).

    Hinsichtlich der Auflösung oder Größe kann es auch inhaltliche Gründe geben, andere Bilder anzubieten.
    Dafür haben neue Versionen von HTML5 bei den Elementen img, picture, source spezielle Attribute.

    In beiden Fällen ist die Logik nur etwas anders, es wird eher beschrieben, was verfügbar ist und angeboten wird, das Darstellungsprogramm wählt dann passend aus.
    Zumeist wird man ja nicht für jeden Pixel Unterschied in Breite oder Höhe eine andere Dekoration anbieten wollen. Von daher kommt es gar nicht darauf an, die Werte genau mitgeteilt zu bekommen, zumal ja der Darstellungsbereich nicht unbedingt direkt etwas mit der Größe des Monitors in Pixeln zu tun hat, sinnvoller sind da schon Maße für den verfügbaren Darstellungsbereich.
    Der Informationsgehalt einer Seite sollte sowieso immer derselbe sein.

    Der Wert für user-agent kann vom Publikum ja auf einen beliebigen Wert gesetzt werden, das taugt allenfalls, um es in eine Statistik einzutragen, um einen Eindruck zu haben, als was sich das Publikum so ausgibt.
  7. h***********r

    prinz-und-gloeckner schrieb:
    Natürlich kommt dabei nichts heraus, wenn die Interpretation von JavaScript deaktiviert ist, daher riet ich zum einen von solchen Ajax-Anwendungen ab, zum anderen dazu, es per Formular zu senden.
    Da kann das Publikum bei Bedarf selbst einen Wert manuell eingeben. Sofern ein Skript aktiv ist, kann es ja einen Vorschlag in das Formularfeld eintragen.
    So entstehen keine Barrieren.

    Wenn es nur um dekorative Aspekte geht - Anzeige für verschieden große Darstellungsbereiche anpassen oder auch an verschiedene Auflösungen, gibt es dafür ja CSS-Medienanfragen/angaben (media queries).

    Hinsichtlich der Auflösung oder Größe kann es auch inhaltliche Gründe geben, andere Bilder anzubieten.
    Dafür haben neue Versionen von HTML5 bei den Elementen img, picture, source spezielle Attribute.

    In beiden Fällen ist die Logik nur etwas anders, es wird eher beschrieben, was verfügbar ist und angeboten wird, das Darstellungsprogramm wählt dann passend aus.
    Zumeist wird man ja nicht für jeden Pixel Unterschied in Breite oder Höhe eine andere Dekoration anbieten wollen. Von daher kommt es gar nicht darauf an, die Werte genau mitgeteilt zu bekommen, zumal ja der Darstellungsbereich nicht unbedingt direkt etwas mit der Größe des Monitors in Pixeln zu tun hat, sinnvoller sind da schon Maße für den verfügbaren Darstellungsbereich.
    Der Informationsgehalt einer Seite sollte sowieso immer derselbe sein.

    Der Wert für user-agent kann vom Publikum ja auf einen beliebigen Wert gesetzt werden, das taugt allenfalls, um es in eine Statistik einzutragen, um einen Eindruck zu haben, als was sich das Publikum so ausgibt.

    Den Benutzer die Bildschirmauflösung eingeben zu lassen um Content auf einer Seite zu optimieren ist so ziemlich die schlechte Lösung. Am besten läuft so etwas unbemerkt im Hintergrund oder eben nicht, wie wenn JS deaktiviert ist.

    Den User-Agent zu benutzen um zu erkennen ob es sich um ein Mobilgerät handelt oder nicht, ist um den Content zu optimieren ne feine Sache. Natürlich kann man den anpassen und hat dann ein anderes Verhalten, aber wieso sollte man dies tun ohne auf ein bestimmtes Verhalten abzuzielen? Möchte ich keine 'Mobil' Version entscheide ich mich dagegen und bekomme auch keine.
    Das ganze ist besser für Anwendungen geeignet die nicht mit CSS umgesetzt werden können, z.Bsp zum einschränken oder erweitern von Funktionen eben auf Ebenen wo CSS und JS nicht ausreichen.

    Beitrag zuletzt geändert: 14.11.2018 17:07:10 von horstexplorer
  8. prinz-und-gloeckner

    prinz-und-gloeckner hat kostenlosen Webspace.

    Wie du oben schon schreibst, kommt eben ganz drauf an, wozu das verwendet werden soll.
    Kommt immer darauf an, die richtigen Fragen zu stellen, um eine gute Methode zu finden, die sicher funktioniert und das Publikum am wenigsten gängelt, nervt oder einschränkt.

    Klar, hat man ein massiv interaktives Spiel mit Ausgabe von Pixelbildern/Graphik, kann es schon notwendig sein, daß komplett mit Java oder JavaScript (+SVG oder canvas? Bei SVG wird man die Größenangaben eher nicht brauchen, das ist ja skalierbar) umzusetzen.
    Dann ist eben die Textalternative auf anderem Wege beizusteuern (bei einem Spiel wird ja eine Kurzbeschreibung des Spieles reichen).

    Aber wenn es für die Nutzer so wichtig ist, daß ein PHP-Skript solche Daten auf den Pixel genau mitgeteilt bekommt, warum sollte man die Daten nicht per Formular übermitteln?
    Ich sehe da kein Problem. Bei Relevanz kann das Publikum nachvollziehen, was das soll.
    Sonst wird es auch nicht wirklich wichtig sein ;o)
  9. h***********r

    prinz-und-gloeckner schrieb:
    Aber wenn es für die Nutzer so wichtig ist, daß ein PHP-Skript solche Daten auf den Pixel genau mitgeteilt bekommt, warum sollte man die Daten nicht per Formular übermitteln?
    Ich sehe da kein Problem. Bei Relevanz kann das Publikum nachvollziehen, was das soll.
    Sonst wird es auch nicht wirklich wichtig sein ;o)

    Man könnte fragen wieso ein PHP-Script nicht die Daten auf Pixel genau mitgeteilt bekommen sollte :) . Für den Nutzer ist es eventuell etwas schwer abzuschätzen wie viel von der Auflösung noch übrig bleibt wenn man Scrollbar, Webbrowser und oder Taskleiste noch abziehen muss. Man könnte ihm das natürlich auch in dem Formular vorgeben, aber dann kann man das auch gleich ans Script versenden.
    Solange wie es darum geht das der Nutzer nicht unbedingt Werte selbst festlegt (egal für was diese benutzt werden), sollte man das von ihm auch so fern wie möglich halten.

    Beitrag zuletzt geändert: 14.11.2018 17:41:51 von horstexplorer
  10. prinz-und-gloeckner

    prinz-und-gloeckner hat kostenlosen Webspace.

    Privatsphäre des Nutzers könnte ein Grund sein.
    Natürlich verrät die Größe des Monitors da nicht sonderlich viel, zusammen mit einem unveränderten user-agent-Wert schon etwas mehr.
    So kann es schon gelingen, zusätzlich mit Ajax-Anwendungen allerhand auszulesen, bei dem der Nutzer vielleicht wissen möchte, wieso und weshalb das überhaupt relevant ist oder mit welchem Knopf das sicher zu unterbinden ist (Datenschutz und solch ein Kram).
    Bildschirmgröße ist natürlich ziemlich harmlos.
    Aber ich weiß ja auch, was ich früher so zum Spaß versucht habe herauszufinden ;o) - je transparenter der Datenfluß für das Publikum ist, desto besser für alle Seiten.
    Ajax bietet eben viele Möglichkeiten, Datenflüsse zu verschleiern oder hinten dem Rücken des Publikums Dinge zu ermöglichen, die vom Publikum ohne Wissen vielleicht gar nicht gutgeheißen werden.
  11. h***********r

    prinz-und-gloeckner schrieb:
    Privatsphäre des Nutzers könnte ein Grund sein.
    Natürlich verrät die Größe des Monitors da nicht sonderlich viel, zusammen mit einem unveränderten user-agent-Wert schon etwas mehr.
    So kann es schon gelingen, zusätzlich mit Ajax-Anwendungen allerhand auszulesen, bei dem der Nutzer vielleicht wissen möchte, wieso und weshalb das überhaupt relevant ist oder mit welchem Knopf das sicher zu unterbinden ist (Datenschutz und solch ein Kram).
    Bildschirmgröße ist natürlich ziemlich harmlos.
    Aber ich weiß ja auch, was ich früher so zum Spaß versucht habe herauszufinden ;o) - je transparenter der Datenfluß für das Publikum ist, desto besser für alle Seiten.
    Ajax bietet eben viele Möglichkeiten, Datenflüsse zu verschleiern oder hinten dem Rücken des Publikums Dinge zu ermöglichen, die vom Publikum ohne Wissen vielleicht gar nicht gutgeheißen werden.

    Das stimmt natürlich. So etwas gehört meiner Ansicht nach aber nicht auf die Website da es zu aufdringlich wirkt, was negativ empfunden werden kann. Dafür stehen in der Datenschutzerklärung Kontaktdaten um Informationen über die Datenverarbeitung zu bekommen. Da die wenigsten Besucher einer Website dieses Angebot in Anspruch nehmen, ist alles andere etwas übertrieben.

    Beitrag zuletzt geändert: 14.11.2018 19:09:56 von horstexplorer
  12. Autor dieses Themas

    bestlinks

    bestlinks hat kostenlosen Webspace.

    Herzlichen Dank alle zusammen!

    Da hab ich ja ordentllich viele Antworten bekommen.

    Werde sie mir gleich einzeln durchsehen.

    Vorweg nur soviel:
    Es geht bei dem Formular nur darum, dass beim Mobilphone eine (zusätzliche) Alerrtbox geöffnet wird. Ansonsten ist der Fragebogen selbstverständlich responsiv.

    Im code ist selbstverständlich die casesensivity beachtet worden, im schnell geschrieben begleittext nicht - mea culpa.

    Ich hoffe doch noch zu einer Lösung zu kommen.

    Das Problem auf den Punkt gebracht ist:
    1846-400 = -400

    d.h. ichkann zwar sowohl 1846 als auch 400 mit "echo" ausgeben, bei der Rechnung allerdings wird ScreenWidth auf 0 gesetzt. Habe alle möglichen Konvertierungen versucht, aber es nutzt nix, egal welches Format ich verwende ScreenWidth wird bei einer Rechnung 0 oder " " ...

    Die Ursache liegt möglicherweise im einegbetteten js, aber die Variable ist auch in php da!

    Herzlichen Dank nochmals für eure Mühe

    lG
    derquerdenker@gmx.at
  13. h***********r

    Der Wert der Variable ist nicht in php da, höchstens der JS String. (hat prinz-und-gloeckner bereits beschrieben)
    Wenn du die Variable setzt setzt du den JS String als Variable. Gibst du die Variable als echo aus setzt es dir den JS Code in die Website ein und führt ihn nach dem laden der Seite aus. So zeigt es dir den Wert an aber der kommt nicht von PHP.
    Somit rechnet php 0-400=-400 da der JS String keinen Wert zum berechnen hat. (Müsste sogar nen Fehler in Richtung non-numeric value ausgeben)

    Wie wir beschrieben hatten gibt es verschiedene Möglichkeiten den Wert nach dem Laden der Seite an PHP zu übergeben und das Ergebnis dann wieder zurück. Das geht mit nem Formular, mit AJAX oder eben über den User-Agent. Hat alles seine vor und Nachteile.

    Wieso will man den eigentlich an PHP übergeben wenn der von JS kommt und in JS eine Aktion auslösen soll? :confused:
    if (screen.availWidth < 620){
       window.alert("XYZ");
    }

    (ungetestet)

    Daneben ist, wenn es wirklich darum geht zu kucken ob es ein Mobilgerät ist, die Auflösung kein sinnvoller Faktor (höchstens das Seitenverhältnis aber eigentlich auch nicht).

    Beitrag zuletzt geändert: 14.11.2018 20:45:33 von horstexplorer
  14. prinz-und-gloeckner

    prinz-und-gloeckner hat kostenlosen Webspace.

    Hier erklärt jemand, wie man mit der Angabe im user-agent vorgehen kann (wenn jemand den entsprechend für ein mobiles Gerät angibt, ist ja auch eine Anzeige dafür erwünscht, insofern nicht so wichtig, ob es wirklich ein mobiles Gerät ist ;o)
    http://my-websites.de/mobile-browser-per-php-erkennen/

    Sofern ein Element aktuell nicht relevant ist, kann per HTML5 das Attribut 'hidden' gesetzt werden.
    Wenn dann per PHP doch eine Relevanz für ein mutmaßlich mobiles Gerät erkannt wird, läßt man es entweder weg oder setzt es per CSS auf sichtbar.

    Umgedreht könnte man auch per CSS für Klassen festlegen, ob etwas sichtbar ist oder nicht.
    Per PHP wird dann festgestellt, welche Klasse beim betroffenen Element gesetzt ist.

    Deaktiviert das Publikum die Interpretation von CSS testweise, so ist das sichtbar, was als grundsätzlich relevant gesehen wird.
    So hat das Publikum immer die Möglichkeit, den zusätzlichen Inhalt zu rezipieren.
    Wenn man den hingegen komplett per PHP einsetzt oder nicht, besteht die Möglichkeit für das Publikum nicht.

    Noch einfacher kannst du natürlich einfach vor den fraglichen Text schreiben:
    'Hinweis für Nutzer von mobilen Geräten:'
    Dann kann das Publikum einfach selbst über die Relevanz entscheiden, eigentlich die eleganteste, einfachste und transparenteste Lösung des Problems, auf die Intelligenz des Publikums zu setzen.
    Die wird zwar auch oft überschätzt, ist aber fast immer der von Skripten noch überlegen ;o)
  15. Autor dieses Themas

    bestlinks

    bestlinks hat kostenlosen Webspace.

    Also herzlichen Dank euch allen.

    Ich habe das Projekt inzwischen ohne Unterscheidung zwischen Mobil und PC umgesetzt. Es kriegen jetzt alle die alertbox.

    Am WE komme ich vielleicht dazu die tipps von euch auszuprobieren.

    Ein Hinweis noch wegen der case-sensivity: imm Originalscript habe ich natürlich darauf genau geschaut, im Begleittext nicht.

    Danke
    derquerdenker
    Für diejenigen, die es interessiert: es ist der Feedbackbogen zu diesem Skriptum:

    https://astronomieskripten.lima-city.de/Astronomieskripten/index.htm
  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!