Ich habe eine WordPress-Seite und möchte ein Formular erstellen (Eingabe → Datenbank).
Ich habe zwei Tutorials gesehen:
- Wie Sie ganz einfach ein benutzerdefiniertes Formular in WordPress erstellen können
- Wie erstelle ich benutzerdefinierte Formulare in WordPress ohne Plugins zu verwenden?
Sie sind sich beide sehr ähnlich. Erstellung des Frontends mit HTML und JavaScript und anschließende Verarbeitung der Informationen in der Datenbank mit PHP.
Mein Problem ist, dass jedes Mal, wenn ich das Formular absende, eine 404-Seite angezeigt wird, auf der steht:
Hoppla! Diese Seite kann nicht gefunden werden.
Jetzt ist mein Problem (oder ich will wissen):
-
Wo muss ich die einfügen
process.php
Datei? (Ich benutze FileZilla). Ich habe mehrere Orte in der versuchtpublic_html/wp-content
Mappe. -
Warum werden die Namens- und E-Mail-Felder nicht validiert? (keine Warnung bei leerem Namensfeld etc.)
Formularaufbau:
Ihren Namen: [TEXT]Deine E-Mail: [TEXT]Geschlecht: [*male *female]Ihr Alter:[TEXT], [Submit Button]
Formularseite:
<form name="myForm" method="POST" onsubmit="return form_validation()" action="../process.php">
Your Name: <input id="customer_name" name="customer_name" type="text" />
Your Email: <input id="customer_email" name="customer_email" type="text" />
Sex: <input name="customer_sex" type="radio" value="male" />Male <input name="customer_sex" type="radio" value="female" />Female
Your Age: <input id="customer_age" name="customer_age" type="text" />
<input type="submit" value="Submit" />
</form>
<script type="text/javascript">
function form_validation() {
/* Check the Customer Name for blank submission */
var customer_name = document.forms["myForm"]["customer_name"].value;
if (customer_name == "" || customer_name == null) {
alert("Name field must be filled.");
return false;
}
/* Check the Customer Email for invalid format */
var customer_email = document.forms["myForm"]["customer_email"].value;
var at_position = customer_email.indexOf("@");
var dot_position = customer_email.lastIndexOf(".");
if (at_position < 1 || dot_position < at_position + 2 || dot_position + 2 >= customer_email.length) {
alert("Given email address is not valid.");
return false;
}
}
</script>
Datei process.php
(nicht bearbeitet):
<?php
$customer_name = $_POST["customer_name"];
$customer_email = $_POST["customer_email"];
$customer_sex = $_POST["customer_sex"];
$customer_age = $_POST["customer_age"];
$conn = mysqli_connect("Database Host", "Database Username", "Database Password", "Database Name");
if(!$conn) {
die(‘Problem in database connection: ‘ . mysql_error());
}
$query = "INSERT INTO ‘Database Name’.’Table Name’ ( ‘customer_name’, ‘customer_email’, ‘customer_sex’, ‘customer_age’ ) VALUES ( $customer_name, $customer_email, $customer_sex, $customer_age )";
mysqli_query($conn, $query);
header("Location: my-site.com/success"); // Redirects to success page
?>
Wenn Sie einer WordPress-Site Ihre eigene Funktionalität hinzufügen, ist es am besten, ein Plugin zu erstellen.
– Mikey
9. Oktober 2016 um 14:01 Uhr
Entweder Sie rollen Ihr eigenes Plugin auf oder suchen nach kostenlosen Plugins, die genau das tun, was Sie wollen. Sicherlich gibt es viele von denen da draußen …. machen Sie einfach ein paar Suchen
– Poiz
9. Oktober 2016 um 15:56 Uhr
Sie können das pods.io-Framework verwenden, damit Sie alles erstellen können, was Sie erstellen möchten
– Masivuye Cokile
14. November 2016 um 14:19 Uhr
Diese Antwort veranschaulicht die Antwort auf diese Frage hervorragend, aber zu Ihrer Information an alle Entwickler, die ein benutzerdefiniertes WordPress-Formular erstellen, verwenden Sie keine direkten POST-Feldeinfügungen in Ihre MySQL-Abfragen. Niemals. Dies kann zu schweren führen SQL-Injection-Hacks. Verlassen Sie sich auch nicht darauf einzig und allein auf Client-Side-Validierung. Jeder kann a ausführen Denial-of-Service-Angriff direkt zum PHP-Server selbst. Die Moral der Geschichte ist Führen Sie immer eine serverseitige Validierung durch!
– Michael Plautz
15. April 2019 um 17:19 Uhr
@Michael Plautz: Welche Antwort? M. Abdulai ist hier? Oder eine andere Antwort? Oder ein Kommentar hier? Oder etwas anderes?
– Peter Mortensen
25. November 2019 um 14:03 Uhr