• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

<a><button> geht nicht

Timer

Mitglied
Hey,
ich habe jetzt ne Bezahlfunktion entwickelt, bei der man beim Drücken auf Spenden auf PayPal weitergeleitet werden soll und gleichzeitig die Daten auf dem Server gespeichert werden sollen. Dabei habe ich nun mit <a href="..."><button>... versucht eine Weiterleitung und gleichzeitig das Speichern der Daten zu erreichen. Leider werden die Daten nur gespeichert, jedoch wird man nicht weitergeleitet. Warum?
Seite: timer.bplaced.net/spenden.php
Code:
<form id="spenden-popup" method="get">
                <h1 id="spenden-title">Spenden</h1>
                <fieldset id="spenden-radio">
                    <label>
                        <input type="radio" id="uberweisen" name="spenden" value="v-uberweisen" onclick="spenden_func('div-uberweisen', 'uberweisen')" class="option-buttons">
                        <img src="bilder/ec.jpg" alt="Fehler 404" class="spenden-img"><br>
                    </label>
                    <label>
                        <input type="radio" id="kreditkarte" name="spenden" value="v-kreditkarte" onclick="spenden_func('div-kreditkarte', 'kreditkarte')" class="option-buttons">
                        <img src="bilder/kredit.jpg" alt="Fehler 404" class="spenden-img"><br>
                    </label>
                    <label>
                        <input type="radio" id="paypal" name="spenden" value="v-paypal" onclick="spenden_func('div-paypal', 'paypal')" class="option-buttons">
                        <img src="bilder/paypal.jpg" alt="Fehler 404" class="spenden-img"><br>
                    </label>
                    <label>
                        <input type="radio" id="paysafecard" name="spenden" value="v-paysafecard" onclick="spenden_func('div-paysafecard', 'paysafecard')" class="option-buttons">
                        <img src="bilder/paysafecard.jpg" alt="Fehler 404" class="spenden-img"><br>
                    </label>
                    <label>
                        <input type="radio" id="steamcard" name="spenden" value="v-steamcard" onclick="spenden_func('div-steamcard', 'steamcard')" class="option-buttons">
                        <img src="bilder/steam.jpg" alt="Fehler 404" class="spenden-img"><br>
                    </label>
                    <div id="close-div" onClick="close_spenden_popup()">
                        &#10006;
                    </div>
                </fieldset>
                <div id="spenden-right-side" action="">
                    <div id="betrag">
                        <input type="text" placeholder="Vor- und Nachname" name="name-input" id="name-input" class="spenden-inputs">
                        <input type="email" placeholder="E-Mail Adresse" name="email-input" id="email-input" class="spenden-inputs">
                        <input type="text" placeholder="Steam Name" name="steam-name" id="steam-name" class="spenden-inputs">
                        <input type="number" placeholder="Betrag eingeben" name="betrag-input" id="betrag-input" class="spenden-inputs" style="margin-bottom: 10px">€
                        <input type="number" placeholder="PaySafeCard Code" name="paysafecard-input" id="paysafecard-input" class="spenden-inputs" maxlength="16">
                        <input type="number" placeholder="Steam Card Code" name="steam-input" id="steam-input" class="spenden-inputs">
                    </div>
                    <div id="spenden-choose">
                        <div id="div-uberweisen" class="spenden-div">
                            <a href="https://paypal.me/oblivioncomunity/<?php echo $_GET['betrag-input'] ?>" target="_blank"><button type="submit" class="spenden-betrag-button">Spenden</button></a><br>
                            Beim Klicken auf den Spenden Button wirst du auf die PayPal Seite weitergeleitet. Um dort mit einer EC Karte zu bezahlen, braucht man nicht zwingend einen PayPal Account.<br><br>
                            <importa style="font-weight: bold; text-decoration: underline">Wichtig: </importa><br>Bitte ändern Sie den oben angegebenen Betrag nicht mehr nachträglich auf der PayPal Seite, da wir den hier angegebenen Betrag zur Einschätzung unserer Spendeneinnahmen benutzen. Danke
                        </div>
                        <div id="div-kreditkarte" class="spenden-div">
                            <a href="https://paypal.me/oblivioncomunity/<?php echo $_GET['betrag-input'] ?>" target="_blank"><button type="submit" class="spenden-betrag-button">Spenden</button></a><br>
                            Beim Klicken auf den Spenden Button wirst du auf die PayPal Seite weitergeleitet. Um dort mit einer Kreditkarte zu bezahlen, braucht man nicht zwingend einen PayPal Account.<br><br>
                            <importa style="font-weight: bold; text-decoration: underline">Wichtig: </importa><br>Bitte ändern Sie den oben angegebenen Betrag nicht mehr nachträglich auf der PayPal Seite, da wir den hier angegebenen Betrag zur Einschätzung unserer Spendeneinnahmen benutzen. Danke
                        </div>
                        <div id="div-paypal" class="spenden-div">
                            <a href="https://paypal.me/oblivioncomunity/<?php echo $_GET['betrag-input'] ?>" target="_blank"><button type="submit" class="spenden-betrag-button">Spenden</button></a>
                            <br><br>
                            <importa style="font-weight: bold; text-decoration: underline">Wichtig: </importa><br>Bitte ändern Sie den oben angegebenen Betrag nicht mehr nachträglich auf der PayPal Seite, da wir den hier angegebenen Betrag zur Einschätzung unserer Spendeneinnahmen benutzen. Danke
                        </div>
                        <div id="div-paysafecard" class="spenden-div">
                            <button type="submit" class="spenden-betrag-button">Spenden</button>
                            <br><br>
                            <importa style="font-weight: bold; text-decoration: underline">Wichtig: </importa><br>Unabhängig des oben eingegebenen Betrags wird das gesamte Guthaben der angegebenen PaySafeCard abgehoben. Der oben angegebene Betrag dient nur zur Einschätzung unserer Spendeneinnahmen und sollte im Idealfall nicht zu stark von dem Betrag des Guthabens der PaySafeCard abweichen.
                        </div>
                        <div id="div-steamcard" class="spenden-div">
                            <button type="submit" class="spenden-betrag-button">Spenden</button>
                            <br><br>
                            <importa style="font-weight: bold; text-decoration: underline">Wichtig: </importa><br>Unabhängig des oben eingegebenen Betrags wird das gesamte Guthaben der angegebenen Steam Card abgehoben. Der oben angegebene Betrag dient nur zur Einschätzung unserer Spendeneinnahmen und sollte im Idealfall nicht zu stark von dem Betrag des Guthabens der Steam Card abweichen.
                        </div>
                    </div>
                </div>
            </form>
            <?php
                if($_GET['name-input'] != "")
                {
                    if($_GET['email-input'] != "")
                    {
                        if($_GET['steam-name'] != "")
                        {
                            if($_GET['betrag-input'] != "")
                            {
                                $zahlmethode = $_GET['spenden'];
                                if ($zahlmethode == "v-paysafecard")
                                {
                                    if($_GET['paysafecard-input'] != "")
                                    {
                                        $handle = fopen("spenden.txt", "a");
                                        fwrite ($handle, $_GET['name-input']." | ".$_GET['email-input']." | ".$_GET['steam-name']." | ".$_GET['betrag-input']." | ".$_GET['paysafecard-input']." | PaySafeCard \n");
                                        echo "Ihre E-Mail-Adresse wurde gespeichert";
                                    }
                                }
                                else if ($zahlmethode == "v-steamcard")
                                {
                                    if($_GET['steam-input'] != "")
                                    {
                                        $handle = fopen("spenden.txt", "a");
                                        fwrite ($handle, $_GET['name-input']." | ".$_GET['email-input']." | ".$_GET['steam-name']." | ".$_GET['betrag-input']." | ".$_GET['steam-input']." | SteamCard \n");
                                        echo "Ihre E-Mail-Adresse wurde gespeichert";
                                    }
                                }
                                else
                                {
                                    $handle = fopen("spenden.txt", "a");
                                    fwrite ($handle, $_GET['name-input']." | ".$_GET['email-input']." | ".$_GET['steam-name']." | ".$_GET['betrag-input']." | PayPal \n");
                                }
                            }
                        }
                    }
                }
            ?>

MfG
Timer
 
Werbung:
Das kommt, weil dein Form dein Button ein Absenden des Forms auslöst, der für ein Neuladen der Seite sorgt, anstatt einer Weiterleitung.
Du hat nun 2 Möglichkeiten:
  • Du benutzt einen Ajax-Request um das neuladen der Seite zu verhindern
  • Du schreibst in dein PHP-File beim Absenden rein, dass eine neue Seite geöffnet werden soll. Jedoch ist ein einem der letzten Threads dabei aufgefallen, dass es ab und zu von manchen Browsern als Popup blockiert wird. Variante 1 hätte das nicht.
 
Werbung:
Ich habe da jetzt ein bisschen was umgeschrieben (alles zu JavaScript umgewandelt und mehr) und habe nun sehr lange gesucht, wie ich in eine Datei schreiben kann. Wenn ich Ajax Request suche, kommt nur eine Möglichkeit, wie ich eine Datei öffnen kann jedoch nicht wie ich reinschreiben kann. Kann mir da jemand eine Funktion oder ein Tutorial schicken (für JavaScript)?
Oder gibt es eine Möglichkeit, PHP im JavaScript aufzurufen und dort mit fopen und fwrite in die Datei zu schreiben? (da habe ich auch nichts gutes gefunden, was gut funktioniert)
 
Also @Timer ein Ajax-Request führt das PHP-File aus und verhindert ein neuladen der Seite.
Alles was du also mit den Daten in der Form machen willst, muss in diesem PHP-File gemacht werden.
Mit PHP kannst du alles mit Dateien machen, also auch reinschreiben.
Ich hab mich das erste mal auch mit Ajax schwer getan, deswegen hier ein Beispielcode:

Code:
function ajaxSendData()
{
    //Jedes input muss eine ID haben. Die trägst du hier ein:
    var name = document.getElementById('name').value;
    var eMail = document.getElementById('eMail').value;
    var termin = document.getElementById('termin').value;
    var message = document.getElementById('message').value;
    //Auch hier tat ich mir das erste mal schwer. Aber falls du ein Google-Recaptcha als kleinen Spamschutz benutzt, funktioniert das so:
    var grecaptcharesponse = document.getElementById('g-recaptcha-response').value;

    //Das hier ist der dataString. Ich empfehle die ID genauso wie die Variable oben zu nennen.
    var dataString = 'name=' + name + '&eMail=' + eMail + '&termin=' + termin + '&message=' + message + '&grecaptcharesponse=' + grecaptcharesponse;
    $.ajax({
        type: "post",
        //Hier der Name des PHP-Files, bzw. der Pfad dorthin:
        url: "./php/sendform.php",
        data: dataString,
        cache: false,
        //Wenn durch PHP z.B. ein echo ausgegeben wird (Falls ein Feld leer ist z.B.) dann soll es bei einem Element mit der ID msg ausgegeben werden (optional).
        success: function (html) {
            document.getElementById('msg').html(html);
        }
    });
}

Wichtige Info:

Du benutzt oben in deinem Form als method="get". Benutze am besten method="post".

Aber du kannst auch Sempervivum's Vorschlag in Angriff nehmen.

Edit:
Vergiss nicht Jquery als Script in deinen Header-Tag einzubinden!!
 
Zuletzt bearbeitet:
Ich hatte leider erst Zeit, es gestern zu ändern. Gestern hat auch alles wunderbar funktioniert und ich habe bisher nichts mehr geändert. Leider funktioniert es heute plötzlich nicht mehr. Beim klicken des Spenden Buttons kommt folgender Fehler:
Code:
Uncaught TypeError: Cannot read property 'html' of null
    at Object.success (spenden.php:201)
    at i (jquery.min.js:2)
    at Object.fireWith [as resolveWith] (jquery.min.js:2)
    at A (jquery.min.js:4)
    at XMLHttpRequest.<anonymous> (jquery.min.js:4)
Zeile 201 ist folgende:
document.getElementById('msg').html(html);
 
Werbung:
Oh fail. Ich hab gerade nur beim Fehler gelesen, dass da was mit html falsch ist und hab mir den Befehl gar nicht durchgelesen. Danke ^^
 
Ich habe die Seite gerade von meinem billig Webserver auf meinen Root Server gezogen. Leider werden dort die Daten nicht in die txt File geschrieben. Ich habe alle Berechtigungen genau übernommen. Woran liegt das?
 
Werbung:
Werbung:
Code:
<?php
    if($_POST['zahlmethode'] == "paysafecard") {
        $handle = fopen("spenden.txt", "a");
        fwrite ($handle, $_POST['name']." | ".$_POST['email']." | ".$_POST['steamname']." | ".$_POST['betrag']." | ".$_POST['paysafecard']." | PaySafeCard \n");
        echo "Ihre E-Mail-Adresse wurde gespeichert";
    }
    else if($_POST['zahlmethode'] == "steamcard") {
        $handle = fopen("spenden.txt", "a");
        fwrite ($handle, $_POST['name']." | ".$_POST['email']." | ".$_POST['steamname']." | ".$_POST['betrag']." | ".$_POST['steamcard']." | SteamCard \n");
    }
    else {
        $handle = fopen("spenden.txt", "a");
        fwrite ($handle, $_POST['name']." | ".$_POST['email']." | ".$_POST['steamname']." | ".$_POST['betrag']." | PayPal \n");
    }
?>
Code:
[Sun Dec 10 20:02:26.609409 2017] [core:error] [pid 20922:tid 140715963127552] (13)Permission denied: [client 95.91.249.232:32753] AH00132: file permissions deny server access: /var/www/html/spenden.txt
 
Ich hab auch schon gesucht, jedoch nichts gefunden. Ich habe bei Berechtigungen von spenden.txt auf jeden Fall schreiben zugelassen.
 
Werbung:
Da vertraue ich PHP mehr als dir. Die Fehlermeldung lässt da keine Zweifel offen.

So sieht das auch schöner aus:
PHP:
<?php
    if (isset($_POST['zahlmethode']))
    {
       switch ($_POST['zahlmethode'])
       {
          case "paysafecard":
                $output = $_POST['name'] . " | " .
                          $_POST['email'] . " | " .
                          $_POST['steamname'] . " | " .
                          $_POST['betrag'] . " | " .
                          $_POST['paysafecard'] . " | PaySafeCard \n";
                break;
          case "steamcard":
                $output = $_POST['name'] . " | " .
                          $_POST['email'] . " | " .
                          $_POST['steamname'] . " | " .
                          $_POST['betrag'] . " | " .
                          $_POST['steamcard'] . " | SteamCard \n";
                break;
          default:
                $output = $_POST['name'] . " | " .
                          $_POST['email'] . " | " .
                          $_POST['steamname'] . " | " .
                          $_POST['betrag'] . " | PayPal \n";
                break;
       }
     
       $handle = @fopen("spenden.txt", "a");
     
       if ($handle)
       {
         fwrite ($handle,$output);
         fclose($handle);
      }
      else
        die ("File open error");
   }
?>
 
Ich behaupte ja nicht, dass mein Script das Problem löst. Fakt ist, dass die Rechte der Datei nicht passen.
 
Werbung:
Ich habe bei der spenden.txt und bei jedem Ordner, wo die Datei drin ist, die Berechtigungen testweise auf 777 gestellt. Das hats auch nicht gelöst
 
Ich weiß nicht, was du genau gemacht hast, ich kann dir da auch nicht weiterhelfen. Aber wenn PHP ein "Permission denied" ausspuckt, liegt es zu 100% an den Rechten.
 
Zurück
Oben