funkervogt
Goto Top

Funktionsfrage zu Per PHP-Script ausgewertete bzw. bearbeitete Daten in aufrufender HTML Seite anzeigen lassen.

Mahlzeit Gemeinde und danke vorab für die Hilfe.


Situation/Frage 1

Ich scripte gerade an einer Seite welche Daten als Diagramm auswertet.
Programmablauf ist: Ich übergebe diverse Nutzereingaben, per $_Post in einer Session an ein PHP-Script.
In dem PHP-Script werden diese Daten dann mittels Datenbankzugriff ausgewertet und es wird ein
Diagramm erstellt. Dazu nutze ich phplot! Funktioniert auch soweit.

Allerdings hätte ich gern, dass das Diagramm in der aufrufenden HTML Seite angezeigt wird.

<form target="_self" method="post" action="getdata.php" >  
.
.
.
<input type="submit" value="Diagramm erstellen!" name="submit" />  

funktioniert leider nicht. Im Prinzip soll die PHP-Seite nicht angezeigt werden, was sie aber
unverständlicherweise macht.

Wenn ich das PHP-Script "getdata.php" testweise im html-code includiere, wird auch wieder
ein neues Fenster geöffnet.

Situation/Frage 2
In dem PHP-Script habe ich Fehlerbehandlungen, welche fehlerhafte Eingaben abfängt.
z.B. sowas:

<?
    if(!checkdate($EZMon1,$EZTag1,$EZJahr1))
    {
    echo "<script language=\"JavaScript\">  
<!--
 alert(\"Bitte noch einmal ueber das Enddatum nachdenken\");  
 window.location.href=\"dia.html\";  
//-->
</script>";  
 
}
?>


Wenn ich mit fehlerhaften Eingaben die Ausgabe provoziere, öffnet sich kein Popup sondern
der Quellcode wird in einem neuen Fenster angezeigt.


Habt Ihr nen Rat/Tip zu den beiden Problematiken??

Content-ID: 219248

Url: https://administrator.de/contentid/219248

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

certifiedit.net
certifiedit.net 13.10.2013 um 11:55:04 Uhr
Goto Top
Guten Morgen,

zur Frage 1: Dann musst du eine JS Datei aufrufen, die die Daten per PHP verarbeiten lässt und diese dynamisch ins aufrufende HTML einbettet. So ist die Funktion wie designt. Du gibst dem Gerät nur die falschen Befehle für das, was du wünschst.

Zur Frage 2:

Gleiches Problem teste das ganze einfach mal mit einer HTML Datei, so dass das JS direkt beim Aufruf das Pop Up provoziert - wobei ich das persönlich eher als einfache Ausgabe generieren würde.

Viel Erfolg.

Christian
certified IT
colinardo
colinardo 13.10.2013 aktualisiert um 12:31:05 Uhr
Goto Top
Hallo FunkerVogt,
das ist für deine beiden Fälle ein Fall für Ajax. Du übermittelst z.B. mit jQuery und der Funktion post() die Eingabedaten an dein PHP-Script, welches dann die Daten an dein JavaScript in der HTML-Seite zurückgibt, wo du diese Daten dann verarbeitest und darstellst.
Ich hatte hier mal ein einfaches Beispiel dazu gepostet.
Alternativ könntest hier auch mit einem iFrame arbeiten welches nur das zurückgegebene PHP-Dokument in der HTML-Seite darstellt.

Grüße Uwe
Arano
Arano 13.10.2013 um 13:38:20 Uhr
Goto Top
Hallo

PAPERLAPAP !
Drück erst einmal alles Javascript (ja auch JQuery und Konsorten) __in die Tonne__ !
Als erstes muss es so funktionieren und __danach__ kann man es mit JS ausschmücken !

Und jetzt die wichtigste Frage !
WAS MACHT "getdata.php" ?
Erzeugt es die Grafik und gibt sie aus ODER wird die Grafik als Datei gespeichert !?
Oder doch was anderes !?

Trenne deinen Code !
Überprüfe erst die Eingaben und erst wenn diese Korrekt sind gib sie an die nächste Datei weiter.

Allerdings hätte ich gern, dass das Diagramm in der aufrufenden HTML Seite angezeigt wird.
[...]
funktioniert leider nicht. Im Prinzip soll die PHP-Seite nicht angezeigt werden, was sie aber unverständlicherweise macht.
Wieso unverständlicherweise ?
Du hast die PHP-Datei doch im "action"-Attribut des Formulars explizit angegeben, also wird sie auch aufgerufen !

Wenn die PHP-Datei die Grafik auch gleich anzeigt und sonst keine anderen Ausgaben (wie z.B. Hinweise auf falsche Eingaben) generiert, kannst du sie auch direkt als Bild einbinden: <img src="getdata.php">
Allerdings musst du dann die Daten entweder per GET an die Datei weitergeben <img src="getdata.php?wert1=$_POST['wert1']&wert2=$_POST['wert2']"> oder in einer PHP-Session zwischenspeichern !
Und wenn die Grafik z.B. unter dem Formular angezeigt werden soll, könnte das in etwa so aussehen:
<html>
  <head>
    <title>Seitentitel</title>
  </head>
  <body>
  
  <form action="dia.php" method="POST">  
    <input type="text" name="wert1" value="">  
    <input type="text" name="wert2" value="">  
    <input type="submit" name="gfxGenBtn" value="Grafik generieren">  
  </form>
  
  <?php
    // wurden Daten vom Formular per Post übergeben ?
    if( isset($_POST['gfxGenBtn]) )  
    {
        // hier sämtliche Eingaben auf Gültigkeit überprüfen
        // hier sämtliche Eingaben auf Gültigkeit überprüfen
        // hier sämtliche Eingaben auf Gültigkeit überprüfen
        // man könnte eine eigene PHP-Funktion dafür schreiben die an dieser Stelle aufgerufen wird,
        // dann bleibt der Haupt-Code übersichtlicher ;)

        // ggf. die Daten aus den $_POST-Variablen in die $_SESSION-Variablen kopieren
        
        // wenn alle Eingaben gültig sind
        if( FALSE===$inputError )
        {
            // per Session
            echo '<img src="gatdata.php?'.time().'" alt="Chart">';  
            // oder per GET
            echo '<img src="gatdata.php?wert1='.$_POST['wert1'].'&wert2='.$_POST['wert2'].'" alt="Chart">';  
            // time() wird bei der Session-Variante mit angehangen, um den Cache des Browsers "auszutricksen" weil  
            // die Grafiken sonst alle gleich heißen und so aus dem Cache immer die alten Daten angezeigt würden.
        }
        else
        {
            echo 'Es gab '.$inputErrorCounter.' Eingabefehler !';  
            echo '<ul>'.$inputErrorMessages.'</ul>'  
            // $inputErrorMessages enthält die Fehlermeldungen der Eingabeprüfung.
            // Jede Meldung ist mit einem '<li> ... </li>' umschlossen um eine gültige UL-Liste zu erzeugen.  
        }
    }
  ?>
  </body>
</html>
Das Formular ruft sich selber auf und übergibt die eingegebenen Daten so per POST an sich selber.
Der nachfolgende PHP-Code prüft ob die POST-Variable des "submit"-Buttons vorhanden ist und führt erst dann den restlichen PHP-Code aus.
So wird sichergestellt, das beim ersten aufrufen des Formulars - es existieren noch keine POST-Daten - nicht fälschlicherweise versucht wird eine Grafik zu erzeugen, mit Daten und Variablen die es noch nicht gibt, denn das würde jede Menge Fehlermeldungen produzieren.


~Arano
FunkerVogt
FunkerVogt 13.10.2013 um 14:50:58 Uhr
Goto Top
Nur mal zur Erklärung!

Was macht getdata.php!!!!

Getdata.php verarbeitet die per $_POST übergebenen Werte in einer Datenbankabfrage.
Diese Daten werden dann für die Darstellung des Diagrammes benutzt, welches auch
innerhalb des .php Skriptes generiert wird (phplot).

Die Datenbanken bestehen aus Datum|Uhrzeit|Wert.
Innerhalb der html Seite gibt es eine Benutzereingabe, in der der Nutzer einen
Startzeitpunk, Endzeitpunkt (Menü) und Zählerpunkte (Radiobuttons) angeben kann.

Zuerst nehme ich im php-Script, die übergebenen Werte aus $_Post und prüfe auf Richtigkeit also
ob z.B. nicht der 30.02.2013 gewählt wurde, der Endzeitpunkt nicht vor dem Startzeitpunkt
liegt und ob auch min. ein Zählerpunkt angegeben wurde (siehe Frage 2 oben).

Innerhalb der Datenbankabfrage werden die Werte bezüglich der Zählpunkte und der
Zeitpunkte aus der Datenbank gelesen und dann von phplot zu einem Diagramm verarbeitet.

Wenn ich fixe Werte in die getdata.php eintragen würde, wäre die Seite auch allein
lauffähig. Sprich es würde das Diagramm dargestellt.

Soweit funktioniert es alles auch wunderbar!
Arano
Arano 13.10.2013 aktualisiert um 15:57:05 Uhr
Goto Top
Hi

Huii, das war jetzt aber ausführlich face-smile
So genau hätte es gar nicht sein müssen *g*
Aber lieber so, als das was wichtiges vergessen wird ;)

__getdata.php__
  • Eingaben prüfen
  • Daten aus DB Holen
  • Grafik generiere UND ausgeben

Da der Benutzer hier nur drei Werte als Parameter vorgibt, wäre es doch einfacher alles auf GET umzustellen und die Werte als Parameter beim einbinden von 'getdata.php' als IMG mit anzugeben.
Es so zu machen wie ich es eben schon vorschlug.
__dia.php__
  • Formular
  • Eingaben Prüfung und ggf
  • Anzeigen der Grafik / Ausgabe von Fehleingaben

__getdata.php__
  • Datenbank lesen
  • Grafik generieren und ausgeben

Oder spricht etwas anders dagegen !?


~Arano
FunkerVogt
FunkerVogt 13.10.2013 um 17:34:43 Uhr
Goto Top
Ne ne neeee... sind nur 2 Seiten!

Es gibt die dia.HTML (Quasi Startseite)--- da werden die Formulardaten für $_POST eingetragen und an
die getdata.PHP (zweite Seite) übertragen.

In der dia.HTML soll auch das Diagramm der getdata.PHP ausgegeben werden.

oder meinst Du alles auf 3 Seiten aufteilen?

Das mit dem IMG..werde ich mal testen. face-smile
Arano
Arano 13.10.2013 um 20:48:43 Uhr
Goto Top
Na dann ist mein Vorschlag genau richtig face-smile
(Das sind auch nur zwei Dateien ! Allerdings wird aus der "dis.html" eine "dia.php" weil diese dann PHP-Code enthält)

Das mit dem IMG..werde ich mal testen.
Dann sei noch mal drauf hingewiesen:
In diesem Fall ist es absolut WICHTIG, das die 'getdata.php' __nichts außer den Bilddaten__ ausgibt !
Sollte da vorher auch nur ein einziges Leerzeichen ausgegeben werden - funktioniert es nicht.
Gleichzeitig sollte klar sein, das jegliche Fehlermeldungen die der PHP-Code in 'getdata.php' erzeugt oder die von dir generiert sind nicht auf der Seite angezeigt werden, denn diese Daten werden ja als vermeintliches Bild in die Seite eingebunden und verschwinden so zusagen "im Bild".

Wenn was ist, weißt ja wo du uns findest.

Dann mal viel Erfolg
~Arano
nxclass
nxclass 13.10.2013 aktualisiert um 21:46:30 Uhr
Goto Top
der Quellcode wird in einem neuen Fenster angezeigt.
.. "short open tags" deaktiviert ?
- <?
+ <?php
FunkerVogt
FunkerVogt 20.10.2013 um 21:18:23 Uhr
Goto Top
@nxclass

Nein.
Benutze ich auch nicht.

In der .htaccess hab ich dennoch "php_flag short_open_tag off" eingetragen.
Selbstverständlich auch den Server neugestartet.

Start und End-Tags sind bei mir:

<?php
.
.
.
?>

@Arano

Mit dem selbstaufrufen der Seite funktioniert auch mit img nich..
Fehler sind keine, zumindest nicht sichtbar. Fehlerlogging über:

error_reporting(E_ALL);
ini_set('display_errors', 0);  
ini_set('log_errors', 1);  
ini_set('error_log', 'fehler.txt');  

Gruss Uwe