Berechnung per PHP aus Contact Form 7 ausführen

  • Moin,

    ich habe mit Contact Form 7 ein paar Abfragen (Multiple Choice) erstellt und würde diese jetzt gerne per PHP "ausrechnen". Dabei reicht mir zunächst, zu zählen, wie häufig die erste, zweite oder dritte Antwort angekreuzt wurde.

    PHP kann ich ein bisschen. Was mir aber fehlt ist der Ansatz, wie ich Contact Form 7 dazu bringe, ein PHP-Skript auszulösen. Im Netz stand zwar hier uns dort was, ich habe das aber nicht ganz verstanden.

    Kann jemand helfen?

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Was hast du denn mit den Werten vor? Sollen die angezeigt werden oder z.B. in der Mail oder in die Datenbank eingefügt werden?

    Ein möglicher weg wäre, das ganze in JavaScript / Ajax zu machen.

    Möglich ist aber auch einen Hook zu verwenden. Ich denke, "wpcf7_before_send_mail" könnte z.B. passen.

  • Ich möchte wirklich "rechnen". Hintergrund: Ich möchte auf meinen Seiten die Fragen einbinden, die zur Bestimmung des Pflegegrades bei Pflegebedürftigkeit abgefragt werden. Sie alle haben vier Antwortalternativen, vereinfacht Hilfsbedürftigkeit gar nicht - ein wenig - ziemlich viel - total. Je nachdem, was angekreuzt wird, gibt esw unterschiedlich Punkte, die dann noch zweimal umgerechnet werden und am Ende den Pflegegrad (früher Pflegestufe) ergeben.

    Ich brauche also ein Butten, der das PHP-Skript ausführt, wobei das PHP-Skript die Wert der einzelnen Fragen (also was angekreuzt wurde) irgendwie auslesen muss.

    Als Ausgabe steht dann eine Zahl zwischen 0 und 5.

    Die Berechnung bekäme ich per PHP hin. JAVA kenne ich gar nicht.

    Zum Hook: Was ist das? Wo wird er eingebaut?

    Im Netz habe ich folgendes gefunden: https://wordpress.org/support/topic/…-get-viarables/
    Ich kann damit aber nur begrenzt etwas anfangen.

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

    Einmal editiert, zuletzt von ASenna (25. Juli 2017 um 18:05)

  • ASenna:
    Ich meinte meine Frage eigentlich anders. Ich wollte darauf hinaus, was mit den berechneten Werten passieren soll. So wie du es jetzt beschreibst, sollen die ja einfach nur auf der Seite ausgegeben werden.

    Also (vereinfacht gesagt) der User klickt ein paar Radio-Buttons oder Checkboxen an und bekommt einen Wert angezeigt. Soweit korrekt?

    Ich verstehe auch nicht ganz, warum du dann CF7 verwenden willst. Ich würde, wie bgeissler, auch eher ein eigenes HTML-Formular verwenden. Das dürfte auf jeden Fall einfacher sein, als die Werte aus CF7 "herauszufischen"

    Was die Frage zu zum Hook angeht, empfehle ich die WordPress Doku. Hooks sind ein Grundkonzept von WordPress, um "fremde" Funktionen zu erweitern, anzupassen oder zu ergänzen.


    Edit:

    Nur der Vollständigkeit halber:

    JAVA kenne ich gar nicht.

    JavaScript und Java haben eigentlich nichts miteinander zu tun (außer, dass beide "Java" im Namen tragen).

    Einmal editiert, zuletzt von danielgoehr (25. Juli 2017 um 18:34)

  • Ja genau, ein paar mal klicken (genau genommen 64 mal), dann rechnet PHP und dann kommt eine Zahl raus.

    Und zu Java/Java-Skript: Damit siehst du,wie viel ich von Java verstehe :lol:

    Ich schau mir mal das Beispiel von bgeissler an. Vielleicht ist das wirklich der bessere Ansatz.

    Danke Euch beiden!

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • Warning: Division by zero in ~/themes/responsive-child-theme/whtr.php on line 42

    Ist mir auch schon aufgefallen. Das script ist schon einige Jährchen alt, ich werde es heute überarbeiten.

  • Ich habe jetzt noch mal eine Nachfrage. Eurem Tipp nach habe ich das Formular rein in HTML gesetzt (also nur 2 Fragen). Auf der Seite steht jetzt also

    <form action="berechnung_pg.php">
    <input type="Radio" name="Item401" value="0"/>selbständig<br />
    <input type="Radio" name="Item401" value="1"/>überwiegend selbständig<br />
    <input type="Radio" name="Item401" value="2"/>überwiegend unselbständig<br />
    <input type="Radio" name="Item401" value="3"/>unselbständig<br />
    </form>

    und etwas später

    <input type="Submit" name="submit" value="Berechnung des Pflegegrades"/>

    Die Berechnung soll also in einer PHP-Datei erfolgen.

    Frage: Wo muss ich die auf dem Server abspeichern? Und wie bestimme ich, an welcher Stelle das Ergebnis erscheint?

    In der PHP-Datei steht ggw. nur ein Echobefehl:

    <?php
    /*
    Template Name: berechnung_pg.php
    */
    ?>

    <?php
    echo "################ Hier steht der Pflegegrad ###################";
    ?>

    Aber dieser Text erscheint nirgends. Was mache ich falsch?

    AS

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.


  • Aber dieser Text erscheint nirgends. Was mache ich falsch?

    Ich befürchte, so wird das nichts werden. Du kannst nicht in irgendeiner externen Datei Berechnungen durchführen und dann auf einer anderen Seite das Ergebnis ausgeben.

    Du musst die Berechnung und die Ausgabe auf der Seite machen, auf der das Ergebnis angezeigt werden soll.

    Dafür gibt es verschiedene Ansätze, aber der einfachste wäre aus meiner Sicht folgender:

    Erstell einen Shortcode, der das Formular ausgibt. Dann übergibst du im Formular die Post-Daten an sich selbst (einfach das action-Attribut weglassen).
    Im gleichen Shortcode kannst du dann prüfen, ob die entsprechenden Post-Daten des Formulars gesetzt sind. Daran erkennst du, ob es submitted wurde oder nicht.
    Wenn sie gesetzt sind, machst du die Berechnung und gibst den Wert aus.

    https://codex.wordpress.org/Function_Reference/add_shortcode

  • Ok, mit Shortcodes habe ich bereits gearbeitet. Dann probiere ich das mal auf diesem Weg.

    Danke für den Link!

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • So, ich habe das jetzt umgesetzt. Der PHP-Code existiert (wenn zunächst auch nur rudimentär).

    Was mir jetzt nur fehlt ist die Aktualisierung des ShortCodes. Wie bringe ich den PC dazu, auf die Befehle

    <button type="button">Pflegegrad berechnen</button>
    <input type="button" name="submit" value="Berechnung des Pflegegrades">

    hin das hinter dem ShortCode stehende PHP-Skript auszuführen?

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

    Einmal editiert, zuletzt von ASenna (2. August 2017 um 09:06)

  • Wie bringe ich den PC dazu, auf die Befehle [...] hin das hinter dem ShortCode stehende PHP-Skript auszuführen?


    [...] Dann übergibst du im Formular die Post-Daten an sich selbst (einfach das action-Attribut weglassen).
    Im gleichen Shortcode kannst du dann prüfen, ob die entsprechenden Post-Daten des Formulars gesetzt sind. Daran erkennst du, ob es submitted wurde oder nicht.
    Wenn sie gesetzt sind, machst du die Berechnung und gibst den Wert aus.

    https://codex.wordpress.org/Function_Reference/add_shortcode

    Im Grunde sollte es ungefähr so funktionieren (sehr vereinfacht, aber ich denke, das Prinzip wird klar)

    Code
    if(isset($POST_['dein_wert'])
    {
    echo $POST_['dein_wert'];
    }
  • Das habe ich so auch umgesetzt:

    if( isset($_POST["Item401"])){
    //$gewichtetePunkte = $_post["Item401"] * 10;
    $gewichtetePunkte = 40;
    }
    else {
    $gewichtetePunkte = 1;
    }

    Aber Isset ist nie true. $gewichtetePunkte ist immer 1. Das gilt selbst dann, wenn ich bei den Radio-Buttons mit checked="checked" feste Werte voreinstelle.

    Ich sehe zwei mögliche Ursachen:
    Kann es sein, dass bei mir GET, POST-Variablen nicht als globale Variablen registriert werden?
    Kann es sein, dass mein PHP-Code an der falschen Stelle steht (anderer Shortcode wird auf der Seite aber ordentlich ausgeführt).

    AS

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • PHP
    array(0) { }


    wenn ich den befehl gleich zu Beginn des PHP-Codes mit echo aufrufe.

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • var_dump erzeugt eine eigene Ausgabe und wird ohne echo aufgerufen.

    Gleich zu Beginn kann $POST ja keine Daten enthalten. Ich meine natürlich nach dem submit deines Formulars.

    Edit:
    Bitte poste mal den kompletten Code, so wie du ihn jetzt hast.

  • Hier irgendwo liegt mein Missverständnis. Also zur Erläuterung, damit du weißt, was bei mir wo steht:

    Ich habe unter WordPress eine Seite angelegt, in der die Radiobuttons sind:
    Wie kann der Betroffene sich kämmen, seine Zähne pflege, seine Prothesen reinigen und sich rasieren?

    PHP
    <form method="post">
    <input type="Radio" name="Item402" value="0"/>selbständig<br />
    <input type="Radio" name="Item402" value="1"/>überwiegend selbständig<br />
    <input type="Radio" name="Item402" value="2" checked="checked"/>überwiegend unselbständig<br />
    <input type="Radio" name="Item402" value="3"/>unselbständig<br />
    </form>
    <hr />
    
    
    <input type="button" action="eigeneplugins/EigenePlugins.php" name="submit" value="Berechnung jetzt durchführen" />

    Dann habe ich unter WordPress eine eigene Datei angelegt mit dem Namen eigenePlugins.php, in der der PHP-Code läuft. Hier drin steht auch schon Code für andere Seiten, auf denen ich ShortCodes verwendet habe. Das klappt ja auch prima. Diese Datei ist unter der Rubik "Plugins" aufrufbar, aktivierbar/deaktivierbar. Und in dieser Datei steht dann auch der Code für mein hier interessierenden ShortCode, der auch funktioniert, wenn ich den ShortCode irgend einen Text wie "Hallo" zuordne.

    Hier der PHP-Code

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

    Einmal editiert, zuletzt von ASenna (2. August 2017 um 12:00)

  • Das ist alles irgendwie etwas zusammengeschustert.

    Ich persönlich würde die Ausgabe des Formulars auch über den Shortcode regeln und in der Seite nichts einfügen. Das ist aber kein muss.

    Das größte Problem dürfte aber sein, dass du nachwievor ein action-Attribut verwendest. Deshalb nochmal der Hinweis:


    [...] Dann übergibst du im Formular die Post-Daten an sich selbst (einfach das action-Attribut weglassen).

    Nochmal: Dein Formular soll an keiner Stelle ein action-Attribut enthalten!

    Dazu kommt, dass dein Shortcode in einem zusätzlichen init-Hook ist. Du schreibst ja, dass es funktioniert, insofern halb so schlimm. Benötigt wird der aber eigentlich nicht.

    Dein Formular ist auch falsch. Der Submit-Button muss innerhalb des Formulars stehen. Also vor </form>.

    Den Shortcode musst du dann in der Seite einfügen, wo auch das Ergebnis angezeigt werden soll.

    Wenn die die o.g. Punkte so umsetzt, sollte es eigentlich funktionieren.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!