Variable aus javascript an php übergeben


Sempervivum

Erfahrenes Mitglied
Dann ist Debuggen angesagt. Bist Du mit dem Debugger deines Browsers vertraut? Wenn nicht, zunächst Konsolausgaben verwenden. Eine ist ja schon im onreadystatechange-Callback drin (console.log). Außerdem würde ich eine für die Parameter einbauen:
Code:
        var data = "firma=" + SMShop.getFormValue("BILLTO", "BILLTO_COMPANY") + "&nachname=" + SMShop.getFormValue("BILLTO", "BILLTO_LASTNAME");
console.log(data);
 

Sempervivum

Erfahrenes Mitglied
Du kannst z. B. hier nachlesen, wo Du sie findest:
https://wiki.selfhtml.org/wiki/JavaScript/Tutorials/Debuggen_für_Anfänger
Ich habe das JS übrigens bei mir getestet und es hat funktioniert. Mit festen Parametern:
Code:
        var data = "firma=die-firma&nachname=mustermann";
        var xhr = new XMLHttpRequest();
        var url = "testpost.php";
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                document.getElementById("ausgabe1").innerHTML = xhr.responseText;
            }
        };
        xhr.send(data);
    </script>
 

Sempervivum

Erfahrenes Mitglied
Und lösche die HTML-Kommentare in deinem Javascript:
Code:
<!--
                //-->
Du schreibst zwar, dass dieser Block funktioniert, aber bei mir erkennt der Interpreter sie als Fehler.
 

Andre Lieske

Grünschnabel
Das habe ich gefunden
Code:
Synchrone XMLHttpRequests am Haupt-Thread sollte nicht mehr verwendet werden, weil es nachteilige Effekte für das Erlebnis der Endbenutzer hat. Für weitere Hilfe siehe http://xhr.spec.whatwg.org/
smjslib.js:1:6866
SyntaxError: missing ) after condition[Weitere Informationen]
bestellung-erfolgreich-gesendet.php:179:41
INIT: 2ms
bestellung-erfolgreich-gesendet.php:254:1
CSI/tbsd_
cb=gapi.loaded_0:256:127
CSI/_tbnd
 

Sempervivum

Erfahrenes Mitglied
In Javascript darfst Du keine HTML-Kodierungen verwenden. Ersetze sie durch das einfache Zeichen:
Code:
if (xhr.readyState === 4 && xhr.status === 200) {
if (xhr.readyState === 4 &amp;&amp; xhr.status === 200) {
Oder hat das die Forensoftware gemacht, Du hast ja keine Code-Tags verwendet? Oder dein Editor?
 

Sempervivum

Erfahrenes Mitglied
PS: Offenbar die Forensoftware. Du musst Codetags verwenden, wenn Du Code postest. Diese Zeile allein ist OK. Poste noch Mal das vollständige JS, der Fehler muss irgend wo anders liegen.
 

Andre Lieske

Grünschnabel
Code:
<script type="text/javascript">
           

            var sBestelldaten = ''
              + 'Firma: ' + SMShop.getFormValue("BILLTO", "BILLTO_COMPANY") + '<br>'
                + 'Email: ' + SMShop.getFormValue("BILLTO", "BILLTO_EMAIL") + '<br>'
                + 'Vorname: ' + SMShop.getFormValue("BILLTO", "BILLTO_FIRSTNAME") + '<br>'
                + 'Nachname: ' + SMShop.getFormValue("BILLTO", "BILLTO_LASTNAME") + '<br>'
                + 'Bestellnummer: ' + SMShop.getAttribute(_SMAMailOrderID) + '<br>';
                document.write(sBestelldaten);
           
            </script>
    <span id="ausgabe1"></span>       
                <script>
                var data = "firma=die-firma&nachname=mustermann";

               console.log(data);
        var xhr = new XMLHttpRequest();
        var url = "brokerdatei/testpost.php";
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
               xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                document.getElementById("ausgabe1").innerHTML = xhr.responseText;
            }
        };
        xhr.send(data);
    
    </script>
 

Sempervivum

Erfahrenes Mitglied
Das funktioniert auf meiner Testseite einwandfrei. Du hast doch geschrieben, dass Du es auf dem Webserver hast. Dann poste doch mal die URL.
 

Andre Lieske

Grünschnabel
Gerne, kannst auch einen FTP Zugang haben, aber nicht über das Forum, meine Seite ist Passwortgeschützt
Kann Dir die Daten per Mail schicken
 

Sempervivum

Erfahrenes Mitglied
Du kannst mir die Zugangsdaten ja in einer Unterhaltung schicken, dann sind sie nicht öffentlich. FTP nicht nötig.
 

Andre Lieske

Grünschnabel
Hallo Sempervivum,
vielen, vielen Dank für den Support, es funktioniert es so wie ich es mir gedacht hatte.
Eins muss ich noch los werden, Du hast dir unwahrscheinlich viel Mühe gegeben, das ist nicht selbstverständlich. Dafür 1000 Dank
 

hermy82

Grünschnabel
Hi, bin neu hier, und ich habe ähnliches Problem. Ich will mit JS ein Befehl oder Variable an PHP senden.
Und hab folgendes vor will Textarea CKEditor in eine DB speichern, ohne dabei die Webseite neu zu laden, leider klappt das nicht.

Das senden via JS funktioniert eigentlich, kann das unter Konsole XHR sehen:

Code:
XHR POST http://192.168.1.44/www/index.php?module=reparaturauftrag&action=edit&id=86
[HTTP/1.1 200 OK 273ms]

       meine.js:95:17
4     meine.js:96:5
200 meine.js:97:5
       meine.js:98:5
postbefehl=tech_zustand
was ich festgestellt habe sind die beiden leer, haben doch gleiche Bedeutung oder:
console.log(xhr.response);
console.log(xhr.responseText);

hier meine.js:
Javascript:
function sendRequest(id, befehl)
{
        var data = "postbefehl=" + befehl;
        var xhr = new XMLHttpRequest();
        var url = "index.php?module=reparaturauftrag&action=edit&id=" + id;
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onload = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                console.log(xhr.readyState);
                console.log(xhr.status);
                console.log(xhr.response);
                console.log(data);
                //div_tech_zustand.innerHTML = xhr.responseText;
            }
        };

        xhr.send(data);
}

Diesen postbefehl will ich in PHP empfangen, und hier klappt bei mir leider nicht:
reparaturauftrag.php:
PHP:
?>
<?php
include ("_gen/reparaturauftrag.php");
//require_once("Payment/DTA.php"); //PEAR

class Reparaturauftrag extends GenReparaturauftrag
{

  function __construct(&$app, $intern = false)
  {
    $this->app=&$app;
    if($intern)return false;

    $this->app->ActionHandlerInit($this);
    $this->app->ActionHandler("list","ReparaturauftragList");
    $this->app->ActionHandler("create","ReparaturauftragCreate");
    $this->app->ActionHandler("positionen","ReparaturauftragPositionen");
    $this->app->ActionHandler("addposition","ReparaturauftragAddPosition");
     
      ...
    $this->app->ActionHandler("edit","ReparaturauftragEdit"); // Hier der Sprung bei "index.php?module=reparaturauftrag&action=edit&id=86"
      ....
         
         
         
function ReparaturauftragEdit()
  {
...
   
    $this->app->Tpl->SET('JSSCRIPTS','<script type="text/javascript" src="./js/meine.js"></script>');  
    $this->app->Tpl->Add('JAVASCRIPT',"CKEDITOR.on('instanceReady', function(){ set_visibility('tech_zustand');});");
   
    $this->app->Tpl->SET('SAVE_TEXT_TECH_ZUSTAND',"<img src=\"themes/new/images/save.png\" alt=\"Bild\" onclick=\"toggle('tech_zustand'); sendRequest($id, 'tech_zustand');\">");    
         
...  
   
    // klappt leider nicht
    if(isset($_POST['postbefehl'])){
   die;
   
   // das auch nicht
    $msg = $this->app->Secure->GetPOST("postbefehl");
    if($msg=="tech_zustand") die;
       
       
}
}
Wo ist mein Denkfehler, kann mir das einer sagen, Danke.
 

hermy82

Grünschnabel
Hat keiner eine Idee? Ich bin leider in PHP und JS nicht fit, komm aus embedded Soft- & Hardware Bereich.
Das System ist CRM und ist nicht von mir, will nur ein Modul schreiben und dabei noch was lernen:)


Hier noch eine JS Funktion, die auch ohne Probleme sendet:
Javascript:
function clickJStoPHP(befehl){
   // Daten an Server senden
   $.ajax({
   // pfad zur PHP Datei (ab HTML Datei)
        url: "index.php?module=reparaturauftrag&action=edit&id=86",
   // Daten, die an Server gesendet werden soll in JSON Notation
        data: {postbefehl: "mach_was"},
        dataType: "json",
   // Methode POST oder GET
   type: "POST",
   // Callback-Funktion, die nach der Antwort des Servers ausgefuehrt wird
        success: function(data) { }
   });
}
Also JS sendet das sehe ich auch, nur ich empfange nichts an PHP (Server seitig) woran kann das liegen?
 

Markus.l14

Grünschnabel
Hallo zusammen,

und auch ich habe leider so ein kleines Problem mit der Übergabe an php.

Mein Ziel:
Ich habe einen Countdown der in Javascript codiert ist und sobald der abgelaufen ist, soll eine Mail an mich versendet werden. Da das leider nicht in Javascript geht will ich zum Beispiel das Word "Jetzt" an PHP übergeben und in php würde es dann heißen:
IF das Wort = "Jetzt" DANN versende die Mail.

Kann mir jemand helfen wie ich das mache?
ODer kennt jemand nen anderen Weg?

Danke im Voraus

Mein Code bis jetzt:

<script>
var countDownDate1 = new Date("Mar 25, 2020 15:00:00").getTime(1);

var x1 = setInterval(function() {

var now1 = new Date().getTime(1);

var distance1 = countDownDate1 - now1;

var days1 = Math.floor(distance1 / (1000 * 60 * 60 * 24));
var hours1 = Math.floor((distance1 % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes1 = Math.floor((distance1 % (1000 * 60 * 60)) / (1000 * 60));
var seconds1 = Math.floor((distance1 % (1000 * 60)) / 1000);

document.getElementById("Test").innerHTML = days1 + " Tage " + hours1 + " Stunden " + minutes1 + " Minuten " + seconds1 + " Sekunden ";

if (distance1 < 0) {
clearInterval(x1);
document.getElementById("Test").innerHTML = "Viel Spaß am Test!";
}
}, 1000);
</script>


<?php
if ($VariableausJavascript = "Jetzt")
{
mail('mail@test.de', 'Ein Countdown ist abgelaufen!', 'Ein Countdown ist abgelaufen!', "From: Absendermail <mail@test.de>");
}
?>
 

Sempervivum

Erfahrenes Mitglied
Wenn Du dich ein wenig in diesem Thread umgesehen hättest, hättest Du gelernt, dass das so, wie Du es andenkst, nicht geht sondern dass Ajax erforderlich ist, um von Javascript aus ein PHP-Skript zu aktivieren.
Statt XMLHttpRequest, wie hier verwendet, empfehle ich jedoch, die fetch-API zu verwenden. Hier ist eine kompakte Einführung: