Ich würde davon abraten: die Seite beachtet das EVA-Prinzip nicht. Schau dir mal das Beispiel bei SELFHTML an, ganz optimal ist das (wegen dem die()) auch nicht aber definitiv besser als das bei php-kurs.
Ok, gesagt getan und das Script übergibt zumindest die Daten weiter an die Datenbank. Aber..
- Nach der Registrierung werde ich wieder auf eine weiße Seite mit der Fehlermeldungen bzw. Erfolgsmeldung weitergeleitet die eigentlich aus der newsletter.php stammt.
- Sollte bei einem Fehler, die Fehlermeldung nicht direkt beim Formular angezeigt werden?
- Oder nach einem erfolgreichen registrieren eine Weiterleitung auf die Startseite geschähen?
- Sonderzeichen wie ', oder < und > im Eintrag werden immer noch an die db übertragen, ist das normal?
html-seminar.de/woltlab/attachment/2788/
html-seminar.de/woltlab/attachment/2787/
Ich kenne deine aktuellen Dateien nicht, irgendwas "verknüpfen" musst du aber nicht: es gibt halt eine Datei in der die komplette Verarbeitung der Daten sowie das Formular steht. Vielleicht hilft die entsprechende Seite im Wiki von SELFHTML bzw. die dort verlinkte Seite bei php.de beim Verständnis.
Es gibt auf dem Server nur 2 Dateien und einen Ordner für Bilder und css.
Das Affenformular und die Verarbeitung der Daten sind in der index.php.
In der newsletter.php befindet sich das prepared statement.
<div id="newsletter">
<section class="news">
<h3>Jetzt registrieren</h3>
<!-- START AFFENFORMULAR -->
<?php
if(isset($_POST['sent'])) {
$messages = [];
// Eingaben überprüfen:
if(!filter_var($_POST['mail'], FILTER_VALIDATE_EMAIL)) {
$messages[] = 'Bitte prüfen Sie die eingegebene E-Mail-Adresse.';
}
if(empty($messages)) {
// Registrierung ausführen...
// Erfolg vermelden und Skript beenden, damit Formular nicht erneut ausgegeben wird
die('<div class="success">Herzlichen Glückwunsch, Ihr Benutzeraccount wurde angelegt.</div>');
} else {
// Fehlermeldungen ausgeben:
echo '<div class="error"><ul>';
foreach($messages as $message) {
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
?>
<!-- ENDE AFFENFORMULAR -->
<form action="newsletter.php" method="post">
<ul>
<li>
<label>E-Mail
<input name="mail" type="mail"
value="<?=htmlspecialchars($_POST['mail']??'')?>" required>
</label>
</li>
<li>
<button class="news-button" name="sent" value="1">Registrieren</button>
</li>
</ul>
</form>
</section>
</div>
Alles anzeigen
<?php
// DB-Connection!!
$pdo = new PDO('mysql:db_host=localhost;db_db=emg_local', 'root', 'root');
if(isset($_POST['mail'])) {
$mail = $_POST['mail'];
} else {
die("E-Mail Adresse ungültig. Bitte folge dem Link und versuche es erneut!");
}
// Abfrage
echo 'E-Mail: ' . htmlspecialchars($_POST['mail']) . ' wurde erfolgreich registriert!';
$statement = $pdo->prepare("INSERT INTO emg_local.newsletter(mail) VALUES (?)");
$statement->execute(array($mail));
Alles anzeigen