Abmeldelinkbestätigung


#1

Hallo Leute

Ich habe folgendes Problem: Ich habe ein Abmeldelink gemacht,
und jetzt möchte ich, dass der Benutzer, wenn er die Email eingibt, aus der Datenbank gelöscht wirld und dann eine Bestätigung bekommt, das er aus der Datenbank gelöscht wurde.

Was muss ich ändern oder hinzufügen?

Hier mein Code: http://hkmworld.bplaced.net/test12.txt

HKM


Kein Zugriff auf meine Seite ottokola.bplaced.net
Bild änder mit hover
[ERLEDIGT] Users können sich mit Email us Datenbank löschen
PHP Fehler
#2

So wird dir hier keiner helfen, wenn du in allen möglichen anderen Threads anfängst zu Spamen.
So wie du gespamt hast, erhälst du auch Antworten.

Auf deine Frage, was du hinzufügen musst:
Einen Code, welcher eine Mail abschickt, bzw. eine Text Ausgabe mit dem Hinweis:

Auf die Frage, was du ändern musst:
Fast den kompletten code.
Siehe z.B.: http://php.net/manual/en/function.isset.php
Dann sollte dir bereits PHP einen Fehler ausgeben, durch eine doppel Belegung von Variablen; $result = $statement = [...]
Desweiteren rufst du 2x die selbe SQL auf. Wofür (die 2. führst du nicht zu Ende aus und es wurde doch bereits gelöscht)?
Außerdem hast du eine “}” Klammer zu viel.

Bitte post das nächste mal deinen Code direkt hier im Forum. Dafür gibt es den “code” BBC => [ code ] xxx [ /code ]

PS: Programmier Tutorials?


#3

Moin Moin!

Ich hab dir das Skript eben fertig gemacht, ich denke du blickst da durch…:
Kannst es gerne vorher testen: https://www.heeke-photography.de/email.php
Die Test-E-Mail ist "test@test.de" funktioniert einwandfrei!

Wichtig ist beim Skript vorher zu prüfen ob überhaupt ein Eintrag mit dieser E-Mail vorhanden ist :slight_smile:

Download der .php:
https://www.heeke-photography.de/email.txt


#4

In der Datei fehlt der Lösch-Request :wink:

if($user['Anzahl'] == 0)
        { 
             [...]
         } else {
             $statement = $conn->prepare("DELETE FROM newsletter1 WHERE email =:email");
             $result = $statement->execute(array('email' => $email));
             [...]
         }

#5

Nein der ist unten mit drin :stuck_out_tongue:

  } elseif(isset($mail)) {
//Wenn die Mail vorhanden ist folgt hier die Loeschung aus der Datenbank
          echo $mail; 
          $stmt = $conn->prepare("DELETE FROM newsletter1 WHERE email = :email");
          $stmt_result = $stmt->execute(array('email' => $email)); 
   } else {
//Falls noch kein Aufruf getaetigt wurde das Formular einbinden

Letzendlich ja egal ob oben oder unten eingebunden :smiley: Skript funktioniert ja :slight_smile:


#6

Oh ok :smiley:
Da hast du recht. Hab das da oben erwartet, da du PHP vom HTML “getrennt” hast :stuck_out_tongue: .
So weit runter hab ich garnicht gescrollt :stuck_out_tongue:


#7

Und an dich @HKM,
Deine Seite gibt aus: Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /users/hkmworld/www/index.php:88 Stack trace: #0 {main} thrown in /users/hkmworld/www/index.php on line 88

Solltest also entweder die PHP-Version wieder runterstellen auf 5.x oder eben deine Datenbank auf PDO oder mysqli umstellen :slight_smile: Gruß

Und noch ein Hinweis, so kann jeder der eine E-Mail aus der Datenbank kennt, diese auch löschen. Besser wäre es wenn bei dem Aufruf des Skripts ein Hashschluessel generiert wird und dem User in einem Link zur Bestaetigung der Abmeldung per Mail zugesendet wird. Ruft der User den Bestaetigungslink auf, wird der Newslettereintrag entfernt. Aber das ist deine Sache, dass musst du wissen :slight_smile:


#8

@HKM Was mir auch aufgefallen ist, der Datenschutz.
Den solltest du unbedingt bei dir selbst Hosten, da er sonst nicht als dein eigener angesehen wird. Siehe Kontakt-Formular. Wenn du das gewerblich betreiben willst reicht auch der, welcher dort hinterlegt ist längst nicht aus, selbst beim privaten Gebrauch ist dieser nicht komplett. Google mal nach “Datenschutz Generator”, z.B. https://datenschutz-generator.de/.
Ein hoch auf das DSGVO :angry: :-1: :smiley:


#9

Ich find das “wir helfen beim Programmieren” super, auch wenn er anscheinend kein einfaches, kurzes Skript schreiben kann :smiley: und stimmt die Datenschutzerklärung ist echt nix :smiley: meine ist bestimmt 100 mal so lang :smiley:


#11

was heisst das: #############INHALT FUER DIE CONFIG.PHP (DANN UEBER INCLUDE EINSETZEN)###########

Und was heisst das?
Parse error: syntax error, unexpected ‘?’ in /home/hkmworld/www/www.hkmworld.bplaced.net/abmeldelink1.php on line 24


#12

Das heißt, dass du die Variabeln mit deine Daten oben anpassen musst…

Du sollst das in eine config.php packen:

        error_reporting(E_ALL);
  
	$PDO_HOST = "LOCALHOST:3306";
	$PDO_USER = "hkmworld";
	$PDO_PASS = "??????????";
	$PDO_DATABASE ="hkmworld";

Und dann packst du oben dann ein
include(“config.php”);

Die ??? Musst du natürlich auch durch deine datenbankpasswort ersetzen…


#13

@Tira45 Was heisst das :
Parse error: syntax error, unexpected ‘?’ in /home/hkmworld/www/www.hkmworld.bplaced.net/abmeldelink1.php on line 19

HKM


#14

Funktioniert nicht! :persevere:


#15

Nein


#16

Die Fehlermeldung bedeutet, das dort ein Fragezeichen falsch ist.
Dort sind 2 “?”. Entferne einfach eines von denen, in Zeile 19.
Im Host kannst du den Port (":3306") auch weg lassen.

PS: Mit “Programmier Tutorials”, meinte ich “Bietest du Tutorials an, zur Programmierung und Designen?”. Dies deutest du zumindest in deinem Menü an.


#17

@icatch funktioniert nicht.
Es kommt ein andere Fehler.
Fehler:
Parse error: syntax error, unexpected ‘;’ in /home/hkmworld/www/www.hkmworld.bplaced.net/abmeldelink1.php on line 19


#18

So kann man dir nicht helfen.
Bitte poste hier mit dem Befehl “[ code ] xxx [ /code ]” (ohne Leerzeichen) deinen Code.
Und lese die Fehlermeldung bitte.
Dort steht, das dort ein “;” ist, welches dort nicht hin soll, bzw. es fehlt dort eins.
Vielleicht findest du das auch alleine raus.


#19
<?php

  include(“config.php”);
  
// Verbindung zur Datenbank via PDO aufbauen
   try { 
    $conn = new PDO("mysql:host=$PDO_HOST;dbname=$PDO_DATABASE", $PDO_USER, $PDO_PASS);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $conn->exec("set names utf8");
    }
catch(PDOException $e)
    {
    echo "Connection to Database failed! " . $e->getMessage();
    exit;
    }
 


	
	$email = $_POST ['email'] ? null;
 
if(isset($_POST['submit'])){


//Datenbankeintraege die zu der E-Mail passen aufzaehlen
$statement = $conn->prepare("SELECT COUNT(*) as Anzahl FROM newsletter1 WHERE email = :email");
$result = $statement->execute(array('email' => $email));
$user = $statement->fetch();

 //Pruefen ob es diese E-Mail in der Datenbank gibt
   if($user['Anzahl'] == 0)
           { 
             $errorMessage = '<font color="red">Fehler: Diese E-Mail ist in der Datenbank nicht vorhanden!</font><br><br>'; 
           } else {
             $mail = '<font color="green">Die E-Mail-Adresse wurde aus dem Newsletter gel&ouml;scht!</font>';
         }

}
//Formularausgabe definieren 
$formular =  '<div id="Z">
<form action="email.php" method="post">
Bitte E-Mail eingeben:<br>
<input type="email" name="email"><br><br>
 
<input type="submit" value="Abmelden" name="submit" class="button">';


echo '
<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <link href="https://fonts.googleapis.com/css?family=Concert+One" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Audiowide" rel="stylesheet"><link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /><title>Newsletter abmelden</title>
 
 </head>
   <body>
    <div id="webseite">
        <div id="header">
		<img src="Logo.jpg" height="133" width="268" alt="mein-logo">
		</div>
     <div id="main">
     <div id="inhalt">
<h2>Newsletter abmelden</h2>';
if(isset($errorMessage)) {
//Bei einem Fehler die Fehlermeldung und das Formular erneut ausgeben
          echo $errorMessage;  
          echo $formular;
  } elseif(isset($mail)) {
//Wenn die Mail vorhanden ist folgt hier die Loeschung aus der Datenbank
          echo $mail; 
          $stmt = $conn->prepare("DELETE FROM newsletter1 WHERE email = :email");
          $stmt_result = $stmt->execute(array('email' => $email)); 
   } else {
//Falls noch kein Aufruf getaetigt wurde das Formular einbinden
  echo $formular;
}

echo'</form>
</div>
			</div>
			<div id="footer">
			<p>&copy;2018 by xy</p>
			</div>
		</div>
	</div>


<script>











</script>






</body>
</html>';

?>

Html wird nicht angezeigt


#20

Dieser Code passt nicht zu deiner Fehlermeldung.
Wenn wir dir helfen sollen, kopiere den Code zu der Fehlermeldung. In deinem geposteten Code ist die Zeile 19 komplett Leer (18-22 ist Leer).

Aber ich schätze das der Fehler in der short IF Abfrage liegt, da diese nur halb vollständig ist.
Zeile 22:

$email = $_POST ['email'] ? null;

Abändern in:

$email = $_POST ['email'] ? $_POST ['email'] : null;

#21

Nein, richtig wäre: $email = $_POST['email'] ?? null;

Und wenn du den Code von mir übernommen hast, dann klappt das auch…