Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP ausführen ohne Seite neu zu laden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP ausführen ohne Seite neu zu laden

    Hallo,

    ich hoffe ich bin hier in dem Sub richtig. Aber da ich ein blutiger Anfänger bin, hoffe ich, dass ich das richtige gefunden habe.

    Mein Problem ist wahrscheinlich ganz einfach zu lösen aber ich bekomme es leider nicht hin. Ich habe zuhause einen kleinen Server (Synology DiskStation) und auf dieser eine Webseite für den internen Hausgebrauch liegen.
    So weit so gut.

    Auf dieser Webseite möchte ich nun einige kleine "Gimmicks" laufen lassen.
    Eines davon ist ein kleiner Rechner, mit dem man die Kalorien eines Gerichtes pro x Gramm ausrechen kann. Daher habe ich den Rechner geschrieben und eingebunden, das war soweit kein Problem und er läuft auch recht zuverlässig.

    Das einzige Problem ist, dass ich sobald ich einen Button zum Ausrechnen anklicke (egal ob kcal oder kJ) sofort die ganze Seite neu geladen wird. Ich hätte aber gerne dieses Ergebnis einfach nur unter dem Formular ausgegeben ohne die Seite komplett neu zu laden. Da der Rechner ganz unten auf der Seite eingebaut ist, muss man immer wieder ganz runterscrollen, was echt doof ist.

    Der Rechner an sich sieht so aus (mit Beispielwerten für kcal/kJ pro Gramm):
    PHP-Code:
    <form method="POST">
                <h4>Kalorienberechnung:</h4>
                <input name="gramm" size=10>
                g <br>
                <br>
                <input type=submit name=kcal value="kcal berechnen">
                <input type=submit name=kJ value="kJ berechnen">
              </form>
              <br/>
              <br/>
              <?php
        
    if (!empty($_POST["kcal"]))
            {
            
    $_gramm $_POST["gramm"];
            
    $_kcal 1.1;                    /*kcal pro g des Essens eingeben */
            
    $c=bcmul($_gramm$_kcal2);
            echo 
    "<h4> $_gramm g entsprechen $c kcal<h4>";
            }
    ?>
              <?php
        
    if (!empty($_POST["kJ"]))
            {
            
    $_gramm $_POST["gramm"];
            
    $_kJ 4.4187;                    /*kJ pro g des Essens eingeben */
            
    $c=bcmul($_gramm$_kJ2);
            echo 
    "<h4> $_gramm g entsprechen $c kJ<h4>";
            }
    ?>
    Eine andere (unwichtigere) Sache ist, dass beim Laden der Seite automatisch bereits der Rechner die kcal für 100g ausgerechnet hat. Kann man das irgendwie unterbinden, so dass erst beim Klick auf den Submit Button wirklich gerechnet wird?

    Ich würde mich freuen, wenn mir einer erklären kann, was ich falsch mache.

    Viele Grüße und schonmal jetzt vielen Dank!

  • #2
    Rechne es zB rein clientseitig komplett in JavaScript
    oder du rechnst es mit PHP am Server und schaust dich mal nach AJAX um zB jQuery um.
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Zitat von Antwort42 Beitrag anzeigen
      Das einzige Problem ist, dass ich sobald ich einen Button zum Ausrechnen anklicke (egal ob kcal oder kJ) sofort die ganze Seite neu geladen wird. Ich hätte aber gerne dieses Ergebnis einfach nur unter dem Formular ausgegeben ohne die Seite komplett neu zu laden. Da der Rechner ganz unten auf der Seite eingebaut ist, muss man immer wieder ganz runterscrollen, was echt doof ist.
      Evtl mit Anker setzen?

      Zitat von Antwort42 Beitrag anzeigen
      Eine andere (unwichtigere) Sache ist, dass beim Laden der Seite automatisch bereits der Rechner die kcal für 100g ausgerechnet hat. Kann man das irgendwie unterbinden, so dass erst beim Klick auf den Submit Button wirklich gerechnet wird?
      PHP-Code:
      <?php 
      $_gramm 
      $_POST["gramm"]; 

      if(
      $_gramm!="")
      {
         if (!empty(
      $_POST["kcal"])) 
         { 
            
      $_kcal 1.1;                    /*kcal pro g des Essens eingeben */ 
            
      $c=bcmul($_gramm$_kcal2); 
            echo 
      "<h4> $_gramm g entsprechen $c kcal<h4>"
         } 
         if (!empty(
      $_POST["kJ"])) 
         { 
            
      $_kJ 4.4187;                    /*kJ pro g des Essens eingeben */ 
            
      $c=bcmul($_gramm$_kJ2); 
            echo 
      "<h4> $_gramm g entsprechen $c kJ<h4>"
         } 
      }
      ?>
      Mein Vorschlag

      Kommentar


      • #4
        Zitat von Crazynet Beitrag anzeigen
        Evtl mit Anker setzen?

        […]
        Also ich habe mal deinen Vorschlag ausprobiert und die ursprüngliche Berechnung ist weg. Das ist schonmal super!

        Wie setze ich denn in PHP einen Anker bzw. rufe diesen nach dem Ausführen wieder auf?

        Kenne das nur von HTML und würde da eben einen Anker bspw. auf die Überschrift setzen und diesen dann aufrufen. Damit wäre ja alles was unter der Überschrift ist, also auch das Ergebnis, quasi oben.

        @hausl: Ich bin ehrlich gesagt froh, dass ich so langsam einen ganz vorsichtigen "Überblick" über PHP bekomme, deswegen wäre mir eine Lösung damit ganz lieb. Von JS, AJAX und jQuery habe ich leider echt Null Ahnung.

        Kommentar


        • #5
          berechnungen in js wären wohl besser, ajax brauchste wohl nicht, aber egal:
          anker:
          http://de.selfhtml.org/html/verweise...tern.htm#anker

          und dann die url von get/post entsprechend deffinieren.

          Kommentar


          • #6
            Kenne das nur von HTML und würde da eben einen Anker
            Dann weisst Du (fast alles), was du wissen musst.

            Bedenke, was PHP ist...
            [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

            Kommentar


            • #7
              PHP ausführen ohne Seite neu zu laden
              Ich hielt mich daran ..

              Egal... jedenfalls beachte beim Lernen gleich auch das E-V-A Prinzip. Die Berechnungen mitten in den HTML-Formular-Code reinzuknallen (der zur Ausgabe gehört) ist nicht gut.

              http://php-de.github.io/jumpto/eva-prinzip/

              LG
              The string "()()" is not palindrom but the String "())(" is.

              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Alles klar, jetzt funktioniert es.
                Zwar offenbar so gesehen unsauber per PHP, aber nach und nach werde ich mich noch in JS einarbeiten und die anderen Tipps von euch versuchen zu bearbeiten.

                Vielen Dank nochmal an alle! Ist echt das schnellste Forum, das ich kenne.

                @hausl: Keine Frage, aber die Krücke mit dem Anker funktioniert vorerst. Der Rest kommt bestimmt noch und irgendwann lache ich dann über mich selbst, dass ich es nicht besser gelöst habe.

                Das EVA Prinzip werde ich mir definitiv zu Gemüte führen, bin eigentlich ein Freund von sauberem Code und Text. Danke für den Link.

                Kommentar


                • #9
                  Sorry für den Doppelpost.

                  Ich bin jetzt doch umgestiegen auf JS.

                  Code:
                  <script language="JavaScript"> <!--
                  function rechner()
                  {
                  var z=document.kalorienberechnung.gramm.value*1.1;
                      document.kalorienberechnung.kcal.value=(z.toFixed(0));
                  }
                  </script>
                  und

                  Code:
                            <form name="kalorienberechnung">
                              <p>
                                <input name="gramm" size="10" border="none">
                                g entsprechen
                                <input name="kcal" size="10" border="0">
                                kcal.</p>
                              <p>
                                <input type=button value="kcal Berechnen" onClick="rechner()">
                              <p>
                            </form>

                  Erfüllt es genauso und ich bin die unsaubere Lösung los. Morgen wird es noch als externes JS gespeichert.

                  Danke nochmal an alle.

                  Kommentar


                  • #10
                    Ich muss doch nochmal nachfragen, nachdem ich eigentlich die Sache per JS gelöst habe wollte ich es trotzdem in PHP versuchen, um was zu lernen.

                    Ich habe jetzt folgendes Beispiel gemacht und es nochmal mit header probiert. Scheint aber wohl durch ein Neuladen nicht zu funktionieren. Das war wohl auch mein Denkfehler, dass es beim ersten Mal geklappt hatte, da ich dort eine URL hatte die schon auf "unbenannt.php#test" endete.

                    PHP-Code:
                    <html>
                    <head>
                    <title></title>
                    </head>
                    <body>
                    <a href="unbenannt.php?#test">gehe zu test</a>
                    <div> blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                    </div>
                    <div id="test">
                      <h1>test</h1>
                           <form method="POST">
                              <input name="gramm" size=10>
                              g <br>
                              <input type=submit name=kcal value="kcal berechnen">
                            </form>
                            <br/>
                            <br/>
                            <?php ;
                    $_gramm $_POST["gramm"]; 
                    if(
                    $_gramm!="")
                    {       

                          
                    $_kcal 1.1;                    /*kcal pro g des Essens eingeben */ 
                          
                    $c=bcmul($_gramm$_kcal2); 
                          echo 
                    "<h4> $_gramm g entsprechen $c kcal<h4>";
                    header("Location: unbenannt.php#test");
                       } 
                    }
                    ?>
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                      blindtext<br />
                    </div>
                    </body>
                    </html>
                    Wäre echt super, wenn mir jemand sagt, wie ich beim ausführen des PHP wieder runterscrolle zum Ergebnis. Das "normale" Referenzieren im HTML habe ich ja oben im ersten Link "gehe zum test", aber wie bekomme ich den in das PHP?

                    Viele Grüße

                    Kommentar


                    • #11
                      Vor dem header()-Aufruf darf keine Ausgabe erfolgen.

                      → EVA-Prinzip

                      Kommentar


                      • #12
                        Genau, das meinte ich ja. Ich habe da eine Ausgabe und die wird quasi dadurch wieder gelöscht, da neugeladen wird.

                        Einen passenden Anker habe ich ja definiert, aber ich habe Probleme den "Link" nach ausführen der Berechnung zu laden und an die entsprechende Stelle zu springen. Ich habe bereits nach Anker ausführen nach PHP etc. gegooglet aber leider immer nur header() gefunden. Auch mein Versuch erstmal nur die Seite mit Anker aufzurufen und dann erst zu berechnen hat nicht geklappt, logisch, da nach dem Aufrufen des Links die Eingabe gelöscht wurde.

                        Mein Problem ist einfach, dass ich nicht auf die passende Ausgabe komme, wie ich nach der Berechnung nur noch den Anker an die URL hänge und somit an die Stelle springe. Per HTML bekomme ich es ja ohne Probleme hin, nur eben nicht als PHP Ausgabe, mit der ich doch quasi einen Klick auf den entsprechenden Link simulieren müsste, oder?

                        Kommentar


                        • #13
                          Schon versucht sowas "unbenannt.php?#test" als action fürs Formular zu nehmen?
                          Du solltest deinen Code übrigens besser strukturieren, etwa Berechnungen etc. an den Anfang nehmen. Irgendwann wird dieses durcheinander von Verarbeitung und Ausgabe unübersichtlich und eklig anzupassen.
                          [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                          [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                          Kommentar


                          • #14
                            Die Frage wie man "Anker in PHP ausführt" finde ich klingt als hättest du die Art und Weise und Reihenfolge noch nicht ganz verstanden, oder?

                            Das ein Anker nur eine Sprungmarke für den Browser ist die nur im Browser relevant ist bzw. ausgeführt wird und der Browser vom PHP reines HTML (+ JS/CSS) ausgeleifert bekommt um dieses dann eben zu interpretieren - inkl. der Sprungmarken - ist die aber schon klar, oder?

                            Ansonten ist mit EVA eigentlich schon alles gesagt, die Ausgabe von HTML und deinem Anker geört zu PHP und du brauchst du gar kein header(), wenn du EVA und das Affenformular http://php-de.github.io/jumpto/affenformular/ verwendetst und im Ziel (target) deines Formulars den Anker mit aufnimmst, fertig.

                            LG
                            The string "()()" is not palindrom but the String "())(" is.

                            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                            PHP.de Wissenssammlung | Kein Support per PN

                            Kommentar


                            • #15
                              Kopiere das mal ein eine leere PHP Datei und schau was passiert, wenn du ganz unten auf den button klickst. (Das Beispiel dient nur zur Verdeutlichung von dem Prinzip und ist weder vollständig noch ganz korrekt!)

                              PHP-Code:
                              <?php
                              // ...
                              // Hier würdest du $_POST auslesen/die Werte abholen, validieren und dann deine Berechnungen machen
                              // und in Variable(n) abstellen, die du dann ganz unten irgendwo zur Ausgabe verwenden kannst.
                              // ...
                              ?>
                              <html><body>
                              <?php
                              // 50 Absätze erzeugen
                              for ($i 1$i <= 50$i++) {
                                  echo 
                              "<p>Zeile ".$i."</p>\n";
                              }
                              ?>
                              <form id="theForm" method="post" action="#theForm">
                                  <button type="submit">klick mich</button>
                              </form>
                              </body></html>
                              The string "()()" is not palindrom but the String "())(" is.

                              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                              PHP.de Wissenssammlung | Kein Support per PN

                              Kommentar

                              Lädt...
                              X