Beiträge von Arne Drews

    Hallo,

    Grundsätzlich dazu

    Zitat

    es werden keine mails per mail funktion versendet

    Verwende eine Mailerklasse wie PHPMailer oder SwiftMailer, wobei PHPMailer vielleicht einfacher für den Einstieg ist.

    Zitat

    könnt ihr mir einen tipp geben , welcher mailserver bzw. welche konfiguration für meinen zweck geignet ist und ausserdem leicht zu konfigurieren ist? Es geht hier nicht um professionellen einsatz im internet, nur um eine übungsplattform im intranet um erfahrungen zu sammeln, lediglich der emailverkehr soll über freemailanbieter über das internet erfolgen.

    Der Mailserver wäre egal, wenn Du bei den Mailerklassen bspw. den SMTP-Transport nutzt. Auch Frremail-Anbieter geben ihre Mailserver namentlich an, so dass Du mit einem Mail Account leicht darüber Mails per SMTP versenden kannst.

    Gruß Arne

    Formatiere bitte Deinen Code sauber ( ich habe mal PHP-Tags verwendet, wegen Syntax-Highlightning ), dann erkennt man auf den ersten Blick Kuriositäten:

    Hallo,

    Zitat

    Ok. Nein $check nutze ich wie du es mir oben in dem script gecodet hast.

    Nein, tust Du nicht ;)
    Dann wäre wie gesagt auch die Mail Adresse drin. Du versendest - wie bereits gesagt - den Link ohne die Mail-Adresse.
    Kannst Du machen, aber dann benötigst Du das explode() nicht, weil Du eh nur den Hashwert hast.

    Zitat

    Was macht den ___DIR___ ?

    Damit bekommst Du den absoluten Serverpfad zu der Datei, in der Du dies anwendest: http://php.net/manual/de/language.constants.predefined.php

    Zitat

    Warum wird da ein ? genommen als value der email ?


    Das ist ein Platzhalter, numerisch basiert ist. PDO :: prepare() liefert ein PreparedStatement, es macht Sinn, diese auch zu verwenden, wenn man prepare() schon verwendet.

    Zitat

    Was macht denn diese Zeile ?


    Die bindet eine Variable an das PDOStatement: http://php.net/manual/de/pdostatement.bindparam.php

    Zitat

    Habe nun deins getestet und es kommt folgender error wie bei mir :

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: Columns/Parameters are 1-based' in /users/apple231/www/Registriervorgang/registration_weiterleitung.php:38 Stack trace: #0 /users/apple231/www/Registriervorgang/registration_weiterleitung.php(38-): PDOStatement->bindParam(0, 'Hans.klais...', 2) #1 {main} thrown in/users/apple231/www/Registriervorgang/registration_weiterleitung.php on line 38

    Das ist mein Fehler, die Parameter für das Prepared Statement sind nicht 0- sondern 1-basierend, die Zeile muß richtigerweise so lauten:

    PHP
    $statement->bindParam( 1, $userEmail, PDO::PARAM_STR );

    Nicht für die Anforderung des Threads:

    Zitat

    Wie kann ich per Klick eines Links, den Inhalt eines Div-Elements ändern, ohne dass sich die Seite komplett neulädt (verschiedene html Seiten)


    Es sei denn, Du willst alle Inhalte laden und die jeweils Ein- bzw. Ausblenden. Aber selbst dazu würde er JS benötigen, denke ich.

    Dafür ist der Link da! Da bekommst Du das alles ausführlicher und besser erklärt, als das hier überhaupt möglich ist.

    Grundsätzlich ist ein XmlHttpRequest nichts weiter als eine Anfrage an den Server, dessen Antwort man verarbeitet.
    Für Deinen Fall würdest Du bei Klick auf ein Menüelement einen solchen Request durchführen, meinetwegen an die get_content.php mit dem Menüpunkt selber als Parameter.

    Die get_content.php sucht nun den entsprechenden Content zu diesem Menüpunkt und gibt diesen in Form einer Ausgabe zurück.
    Die Rückgabe verarbeitest Du, indem Du einfach das HTML innerhalb des DIV ersetzt.

    Details und Beispiele findest Du wie gesagt haufenweise, musst nur den Link klicken und lesen ;)

    Hallo,

    Die Ausgabe der Query kann nicht aus dem von Dir geposteten Script stammen, denn

    • fehlen dort die Quotes komplett
    • nutzt MySQL SingleQuotes für VARCHAR- und TEXT-Datentypen


    Desweiteren:
    Mit $result kannst Du nur prüfen, ob die Abfrage erfolgreich war, hast aber kein Ergebnis.
    Du vergleichst also in dem Moment typsicher einen Boolean ( $result ) mit einem Array ( $check ), da kann nur false bei rauskommen!

    Warum die Fehler nicht ausgegeben werden lassen wir mal für den Moment dahingestellt.
    Wichtig ist erstmal, was für eine Logik Du verfolgst, bzw. verfolgt werden muss!

    • Wurde die Query korrekt verarbeitet ( $result )?
    • Gibt es einen resultierenden Datensatz aus der Query ( fehlt bei Dir! )
    • Ist die resultierende HashId aus der Query gleich der aus $check?


    Diese drei Fälle musst Du mindestens verarbeiten, um dem Ziel näher zu kommen.

    Weiterhin nutzt Du $check anders, wie ich.
    Wenn Du den Link so versendest, wie ich, steht in $_SERVER['QUERY_STRING'] etwas in der Form:

    Code
    test@example.com$a1d22d92f96a0bb64032aaf25ebb9b68b6b98122e755fa7406e03a5f0a73fd1d


    Wenn Du dann per explode beim $ trennst, sollte Dein Array $check so aussehen:

    Code
    Array (
        [0] => test@example.com
        [1] => a1d22d92f96a0bb64032aaf25ebb9b68b6b98122e755fa7406e03a5f0a73fd1d
    )


    Bei Dir hat das Array allerdings nur ein Element, was mich vermuten lässt, dass Du die Mail mit dem $-Zeichen nicht vorangestellt hast.
    Die Abfrage innerhalb der Datenbank würde ich allerdings auf die E-Mail beziehen und nicht auf den Benutzernamen.


    EDIT ( Code grob überarbeitet ):
    Hier mal eine Variante, die zumindest von der Logik passen sollte, allerdings ungetestet offline im Editor angepasst!


    Die IF-Olympiade bekommt man sicher auch noch besser hin, aber hier soll erstmal nur die Logik aufzeigen, die Du verfolgen musst.

    Gruß Arne

    Mir scheint, Du weißt nicht so recht, was Du tust, kann das sein?

    $check ist bei Dir ein Array
    $result ist eine ResourceId oder false
    Du vergleichst beide typsicher und erwartest was?

    In dem Fall sollte zwar die else if Bedingung greifen und $fehler zumindest dort befüllt werden.
    Jetzt musst Du debuggen. Lass Dir die Variablen mit var_dump() an den entsprechenden Stellen ausgeben und schau, ob darin das ist, was Du erwartest.

    Ich könnte mir vorstellen, dass die Query keine Datensätze oder sogar einen false liefert.
    Evtl. passiert die Ausgabe auch an der falschen Stelle?

    Sieht insgesamt noch sehr abenteuerlich aus...
    ;)

    Hallo,

    Eine einfache Möglichkeit von vielen ist, einen Hash aus der der E-Mail und dem Passwort zu bilden, bspw. auf diese Weise:

    PHP
    $sEmail = $_POST['email']; // E-Mail vom User eingegeben
    $sPasswordHash = password_hash( $_POST['password'] ); // Hash des Passwortes vom User eingeben
    $sHashId = hash( 'sha256', implode('$', [$sEmail, $sPasswordHash]) );
    
    
    $sDoubleOptInLink = 'http://apple231.bplaced.net/Registriervorgang/registration_weiterleitung.php?' . $sHashId;


    Diesen Link versendest Du dann per Mail an die eingegebene E-Mail Adresse. Zusätzlich speicherst Du den Hashwert in ein weiteres Feld bei dem User.
    Auf der Zielseite ( bei Dir: registration_weiterleitung.php ) kannst Du das bspw. so abfangen:

    PHP
    if ( !empty($_SERVER['QUERY_STRING']) ) {
    
    
        $aData = explode( '$', $_SERVER['QUERY_STRING'] );
    
    
    }

    In $aData hast Du jetzt ein Array mit der E-Mail und dem Hashwert zur Verification.
    Jetzt musst Du nur noch schauen, ob es einen Eintrag in der DB gibt, der mit der E-Mail Adresse und dem Hashwert übereinstimmt!

    Das ist wie gesagt nur eine von vielen Möglichkeiten und aufgrund der Überschaubarkeit auch ohne Datenfilterung etc.

    Gruß Arne

    Hallo,

    Beim Registrieren einen Hashwert/-ID bilden und zu der E-Mail Adresse speichern.
    Dann einen Link mit diesem Hashwert als Parameter und der E-Mail Adresse per Mail schicken.

    User klickt auf den Link ( oder kopiert den in die Adresszeile des Browsers ) und Du musst dann nur noch in der Datenbank schauen, ob E-Mail und Hashwert zusammenpassen.

    Gruß Arne

    Hallo,

    Du benötigst nur ein der beiden Möglichkeiten.
    Ich persönlich empfehle PDO und kann Dir dazu auch ein einfaches Tutorial anbieten: http://www.php-rocks.de/thema/49-ein-k…statements.html

    Der Vorteil ( für mich ) bei PDO ist, dass ich nicht nur MySQL gebunden bin. Ich kann bspw. auf SQLite mein Projekt aufbauen und tausche später einfach nur den Treiber gegen einen MySQL-Treiber aus.
    Der Rest der Anwendung macht weiterhin das, was es soll.

    Wenn Du Fragen dazu hast, kannst Du mich gerne dazu kontaktieren.

    Gruß Arne

    Selbst die Gesamtbesucherzahl ist fast nie das, was man annimmt.
    Das resultiert ganz einfach daraus, dass man nicht eindeutig feststellen kann, ob ein Benutzer wirklich neu auf der Seite ist oder einfach mal F5 gedrückt hat.

    Alle fantastischen Verfahren, das einzugrenzen bilden nur eine Näherung.
    Am Ende lohnt sich der Aufwand einfach nicht. GA und BA bieten eine Fülle an Auswertungsmöglichkeiten, die relativ gute Zahlen liefern und das sogar kostenfrei!

    Hallo,

    Eine Prüfung setzt erwartungsgemäß vorherige Lerneinheiten voraus, hast Du die verpasst?!
    Ich hoffe, es wird Dir hier keiner Deine Aufgaben erledigen, denn dann lernst Du das erst recht nicht!

    Am besten Du zeigst uns zu den Aufgaben Deine Ansätze und wir machen Vorschläge oder geben Tipps.
    Aber umsetzen musst Du die Aufgaben schon selber...

    Gruß Arne