Beiträge von h3llo

    Hallo,


    ich habe eine Seite, auf der sich ein Nutzer registrieren kann. Nach dem Klick auf "Registrieren" soll dem Nutzer eine E-Mail mit einem Link zur Bestätigung seiner Registrierung geschickt werden. Dafür habe ich die mail()-Funktion von PHP verwandt. Leider kommen die Mails nicht an. Getestet habe ich das Ganze mit einem IONOS Webspace und einer IONOS Absende E-Mail Adresse und einer IONOS und einer Outlook E-Mail Adresse als Ziel.


    Hier der Code für das Versenden der Mail:


    Code
    1. $to = $email;
    2. $subject = 'Registrierung';
    3. $url = 'https://www.example.de/registrierungsstatus.php?selector='.$selector.'&validator='.bin2hex($token);
    4. $message = '
    5. <p>Klicken Sie auf den folgenden Link, um Ihre Registrierung abzuschließen.</p>
    6. <a href="'.$url.'">'.$url.'</a>
    7. ';
    8. $headers = 'From: Example <mail@example.de>\r\n Reply-To: mail@example.de\r\n Content-type: text/html\r\n';
    9. mail($to, $subject, $message, $headers);


    Hier eine Testseite: tobiaspietsch.de/registrierung.php


    Wie kriege ich die Mails an die Zieladresse versandt?

    Zitat
    Was war denn jetzt der Knackpunkt? Zuerst hattest Du ja geschrieben, dass es noch nicht funktioniert.


    Da ich alles gleichzeitig umgesetzt habe, kann ich es nicht genau sagen. Aber sehr wahrscheinlich war es das Javascript, das einen Error erzeugt, wenn der Button nicht existiert. (Den Code habe ich in ein If-Statement gesetzt, das zunächst geprüft, ob der Button existiert.)


    Code
    1.             if (event.target.classList.contains('entfernenbutton')) {
    2. $('#liste').load('elementauslisteentfernen.php', {
    3. nummerElement: event.target.value
    4. });
    5. }

    Der Code funktioniert leider nicht. Der Button zeigt keine Reaktion.

    Ich habe nun soweit alle eure Hinweise umgesetzt, außer:


    Zitat

    Für jede ID hast du einen eigenen Modal schließen Code.

    Das geht auch über die Klasse und spart nee Menge Code


    Da weiß ich nicht genau, wie das geht.


    Und

    Zitat

    Dann würde in noch onclick in addEventListener ändern.


    habe ich beim Entfernen-Button nicht umgesetzt. Da weiß ich nicht, wie ich addEventListener zusammen mit Event-Bubbling anwende.


    Ansonsten funktioniert der Code nun soweit!

    Zitat

    Das war doch das Projekt richtig.


    Ja, genau.


    Danke erstmal für die vielen Hinweise. Werde mich dran setzen und den Code entsprechend ändern.


    Zitat

    Was die Vielzahl an PHP-Dateien betrifft, so hatte ich h3llo hier schon einen Hinweis gegeben, wie man es entscheidend vereinfachen kann:

    Klick-Event mehrmals ausgeführt


    Deine Änderungshinweise habe ich auch umgesetzt. eaneingabe.php, film.php, liste.php und filmerstellen.php sind raus geflogen und der Code aus diesen wurde direkt in index.php geschrieben. Außerdem habe ich mir auf deinen Hinweis hin meine anderen Dateien nochmal vorgenommen und auch da einiges raus geschmissen. Also kein Grund zum Ärger! ;)

    filmaktualisieren.php:



    listeaktualisieren.php:



    listeneueneintraghinzufuegen.php:



    elementauslisteentfernen.php:



    listeloeschen.php:



    index.css:


    Zitat

    Kannst du einen vollständigen Testbaren Code posten?


    Hier folgt der Code. Ich habe einiges, was nicht relevant ist, raus gekürzt. Daher sieht der Code an einigen Stellen etwas zusammengewürfelt aus. Die Kommentare habe ich im Wesentlichen drin stehen lassen, damit es etwas übersichtlicher wird:


    index.php:



    header.php:



    Weiteres folgt im 2. Post...

    Hallo,


    ich habe eine Seite mit mehreren Buttons. Außerdem soll eine Infobox angezeigt werden, wenn auf einen bestimmten Link geklickt wird. Sowohl für die Buttons als auch für die Infobox habe ich ein Javascript, das am Ende der Seite eingebunden ist. Leider funktionieren nur die Buttons oder die Infobox, je nachdem, welcher Javascript-Code zuerst steht. Hier der Code:


    Buttons:


    Code
    1. <button id="hinzufuegenbutton" class="button" value="Hinzuf&uuml;gen">Zur Liste hinzufügen</button>
    Code
    1. <button id="entfernenbutton" type="button" class="entfernenbutton" value="'.$i.'">Entfernen</button>


    Link:


    Code
    1. <a href="#" id="eanlink">EAN</a>


    Infobox:


    Code
    1. <div id="eanmodal" class="modal">
    2. <div class="modal_inhalt">
    3. <div class="modalheader">
    4. <span id="eanmodalschliessen" class="closemodal">&times;</span>
    5. </div>
    6. <p class="modaltext">Text</p>
    7. </div>
    8. </div>


    Infobox CSS:



    Javascript:



    Wie bekomme ich Buttons und die Infobox zum Laufen?

    Zitat

    Soll die begrüßung immer angezeigt werden und wenn man die Suche benutzt dann nicht mehr ?


    Nachdem man die Suche das erste mal benutzt hat, soll die Begrüßung nicht mehr angezeigt werden. Also die Seite mit den Informationen aus der Datenbank soll immer angezeigt werden, nachdem man das erste Mal die Suche benutzt hat.


    Zitat


    Ich nehme mal an, du meinst Folgendes:



    Anders macht das für mich erstmal keinen Sinn, aber korrigier mich.


    Aber was, wenn die Seite einfach nur aktualisiert wird (z. B. F5)? Dann ist $_POST['textfeld'] nicht gesetzt und es wird fälschlicherweise die Begrüßung statt der Informationen aus der Datenbank angezeigt.


    Zitat

    Was dann in der filmaktualisiern.php alles gemacht wird , mit dem ganzen Sessions blicke ich gerade nicht durch.


    Noch kurz zu filmaktualisieren.php: Wenn der LOS-Button gedrückt wird, werden die der Textfeldeingabe entsprechenden Informationen aus der Datenbank abgerufen und in Sessionvaraiblen gespeichert. (Das geschieht nur, wenn der LOS-Button gedrückt wird.) Anschließend werden, falls vorhanden, die Informationen und falls nicht, eine Nachricht, dass keine Informationen vorhanden sind, ausgegeben. (Wird der LOS-Button nicht gedrückt, ist das das Einzige, was passiert. (z. B. bei F5)).

    Code
    1. bei den LOS Button , würde ich ein POST request zu der index.php senden.
    2. Dann mit PHP den POST auslesen und deine Datenbank abfrage machen.


    Ich weiß nicht, ob ich dich richtig verstehe. Wie könnte das codetechnisch aussehen?


    Code
    1. Hast du das schon online zum testen ?


    Noch nicht. Und dauert auch noch etwas.


    Code
    1. Der ganze kram mit den Session speichern würde dann weg fallen.


    Das mit der Sessionvariable speichern ist auch dafür gedacht, dass bei Aktualisierung mit z.B. F5 weiterhin die Filminformationen angezeigt werden (und nicht die Begrüßung).

    Hallo,


    ich habe auf jeder Seite/Unterseite meiner Seite oben einen Header mit einem Texteingabefeld und einem "Los"-Button.

    Code
    1. <input type="text" id="textfeld" class="eaneingabeelement" value="" placeholder="EAN eingeben..." size="60">
    2. <button id="losbutton" class="eaneingabeelement eaneingabebutton"" value="Los">Los</button>


    Gibt man in das Texteingabefeld etwas ein und drückt auf den "Los"-Button, soll zur Hauptseite index.php gewechselt, falls die Hauptseite noch nicht angezeigt wird, und sollen zu der Eingabe passende Informationen aus einer Datenbank angezeigt werden.


    Dafür habe ich das folgende Javascript geschrieben (eingebunden am Ende der Header-Datei):



    Dieses speichert zunächst die Eingabe aus dem Texteingabefeld und führt die Datei sessionvariablenspeichern.php aus, in der die Sessionvariable "ausgabe" gesetzt wird:


    PHP
    1. <?php
    2. session_start();
    3. if (isset($_POST['ausgabe'])) {
    4. $_SESSION['ausgabe'] = $_POST['ausgabe'];
    5. }
    6. ?>


    Dann wird die Hauptseite index.php geladen (da zuvor die Sessionvariable "ausgabe" gesetzt wurde, wird nicht die Begrüßung, sondern das div ausgabe_container geladen):



    Zuletzt werden die Informationen aus der Datenbank, die in filmaktualisieren.php abgefragt werden, in das div "film" der Hauptseite geladen (diese werden "nachgeladen", da beim laden der Hauptseite "losButtonGedrueckt" nicht gesetzt war und die Informationen entsprechend nicht aus der Datenbank abgefragt wurden)):



    Es klingt alles ein bisschen kompliziert und ich glaube auch, ich habe mich ein bisschen verhaspelt. Folgendes ist das Problem: Bei Klick auf den "Los"-Button werden, sofern das div "ausgabe_container" nicht bereits angezeigt wird, die Informationen aus der Datenbank nicht ausgegeben (sondern das div "leererfilm_container") und wenn das div "ausgabe_container" bereits geladen ist, werden die Informationen aus der Datenbank "des aktuellen Klicks auf den "Los"-Button" beim darauffolgenden Klick auf den "Los"-Button geladen und die Informationen aus der Datenbank des darauffolgenden Klicks beim wiederum darauf folgenden Klick geladen. Wie erhalte ich das gewünschte Verhalten?


    P.S.: An alle, die bereits meine vorherigen Posts gelesen haben: Ich habe die Struktur der Seite seit dem deutlich verändert. Die alten Posts sind also zu großen Teilen nicht mehr aktuell.

    Funktioniert alles! Vielen Dank!


    Zitat


    Das HTML statisch für beide Varianten anlegen und mit einer Klasse "hidden" das andere jeweils verbergen.


    Das ist eine gute Idee! Ich überlege es mir, das so anzupassen!

    Verstehe. Ich habe jetzt das Javascript nur in den Header eingebunden. Beim Eventbubbling könnte ich noch Hilfe gebrauchen:


    Am Beispiel vom Hinzufügen Button:


    Das nächste "Elternelement" ist das div filmbuttons und der Button soll listeneueneintraghinzufuegen.php in das div liste laden. Also müsste der jQuery-Code lauten:


    Code
    1. $(document).ready(function() {
    2. $('#filmbuttons').on('click', '#hinzufuegenbutton', function() {
    3. $('#liste').load('listeneueneintraghinzufuegen.php', {
    4. buttonGedrueckt: true
    5. });
    6. });
    7. });


    Leider funktioniert der Button so nicht.

    Zitat

    Wie kann das funktionieren? Wenn das Javascript im document-ready ausgeführt wird, existiert der Button doch noch gar nicht, weil das HTML erst später geladen wird?

    Ich weiß nicht genau, was du meinst.


    Ich integriere in jede PHP-Datei, in der Elemente wie Buttons sind, die "von jQuery überwacht" werden, an den Anfang


    Code
    1. <!-- ---jQuery Import--- -->
    2. <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
    3. <!-- ---Javascript / jQuery--- -->
    4. <script src="main.js"></script>


    Den jQuery-Code für alle Elemente habe ich komplett in der Datei main.js.


    Ich bin Anfänger, es kann also sein, dass ich einen einfachen Fehler gemacht habe.

    Zitat

    Ich denke, es würde das Verständnis erleichtern, wenn Du erklären würdest, was es damit im realen Leben auf sich hat, d. h. was die Einträge in diesen beiden Divs zu bedeuten haben. Es hat ja irgend etwas mit Filmen zu tun.

    Zitat

    Da du das ja noch nicht Online hast, wäre eine Erklärung, oder Beispiel Seite von wem anders ganz gut.


    Im ersten div ist ein Eingabefeld, in das man die EAN eines Films eintragen kann. Bei Klick auf Los werden bestimmte Informationen zu dem Film (Titel, Medium, Besonderheiten) aus der Datenbank abgerufen und (anstelle des Eingabefelds) in das div geladen (durch einen Zurück Button kommt man wieder zurück zum EAN-Eingabefeld und kann so weitere Filme und Informationen abrufen).


    Im zweiten div ist zunächst (beim ersten Laden der Seite) eine Begrüßung. Klickt man auf den Los Button aus dem ersten div wird in dem div eine (wenn man nicht eingeloggt ist und bereits zuvor eine Liste erstellt hat, zunächst leere) Liste geladen.


    Durch einen Button im ersten div kann man den Film und die Informationen in die Liste seiner Filme laden.


    Die Seite dient dazu, eine Liste seiner Filme mit den dazugehörigen Filminformationen zu erstellen.


    Zitat

    Könnte mir vorstellen, dass es auch einfacher geht und dadurch auch schon einige Probleme von alleine verduften.


    Ihr seht, es ist schon ein bisschen kompliziert und man benötigt einige Seiten.


    Der jQuery Code ist komplett in einer Datei.


    Hier noch Bilder, die das Ganze vielleicht noch veranschaulichen können (Seite hat erst grundlegende Funktionen und ist nur grundlegend gestyled. Der "Löschen" Button am unteren Rand der Bilder verschwindet auf den Bildern etwas hinter der "Bild-Navigation". Am Besten "Originalversion aufrufen"):


    EAN-Eingabe und leere Liste:


    Image1.jpg


    Filminformationen, die nach der Eingabe der EAN und Klick auf Los angezeigt werden und Liste, der bereits Filme hinzugefügt wurden:


    Image2.jpg

    Hallo,


    ich habe ein div "eingabe_container" und ein div "ausgabe_container":



    Im ersten div wird eaneingabe.php geladen. Es enthält ein Texteingabefeld und einen Button "Los":


    Code
    1.     <div id="eingabe">
    2. <input type="text" id="textfeld" class="eaneingabeelement" value="" placeholder="EAN eingeben..." size="60">
    3. <button id="losbutton" class="eaneingabeelement"" value="Los">Los</button>
    4. <button id="loeschenbutton" class="eaneingabeelement" value="L&ouml;schen">Löschen</button>
    5. </div>


    Bei Klick auf den Button "Los" wird in das erste div film.php und in das zweite div liste.php geladen:


    Code
    1. $(document).ready(function() {
    2. $('#losbutton').click(function() {
    3. $('#eingabe_container').load('film.php', {
    4. buttonGedrueckt: true,
    5. textfeldwert: $('#textfeld').val()
    6. });
    7. $('#ausgabe_container').load('liste.php', {});
    8. });
    9. });


    film.php enthält ein div "film" und einen Button "Hinzufügen":


    PHP
    1.             <div id="film">
    2.     <?php
    3.     include 'filmerstellen.php'
    4.     ?>
    5.     </div>
    6. <div id="filmbuttons">
    7. <p class="textfilmelement"><button id="hinzufuegenbutton" class="button" value="Hinzuf&uuml;gen">Zur Liste hinzufügen</button></p>
    8. <p class="textfilmelement"><button id="zurueckzureaneingabebutton" class="button" value="Zur&uuml;ck">Zurück</button>&nbsp; &nbsp; &nbsp;</p>
    9. </div>


    Im div "film" wird filmerstellen.php geladen. Diese verarbeitet die in das Textfeld von eaneingabe.php eingegebenen Informationen, speichert Informationen in Session Variablen


    Code
    1. $_SESSION['ean'] = $row['ean'];
    2. $_SESSION['titel'] = $row['titel'];
    3. $_SESSION['disctyp'] = $row['disctyp'];
    4. $_SESSION['besonderheit'] = $row['besonderheit'];


    und gibt diese Informationen dann aus (die Ausgabe geschieht in filmaktualisieren.php):


    Code
    1. include 'filmaktualisieren.php';


    liste.php enthält ein div "liste" und einen Button "Löschen":


    PHP
    1. <div id="liste">
    2. <?php
    3. include 'listeaktualisieren.php';
    4. ?>
    5. </div>
    6. <button id="listeloeschenbutton" class="button" value="Liste l&ouml;schen">Liste löschen</button>


    Im div "liste" wird listeaktualisieren.php geladen. Diese listet die Einträge der Session Variable "filme" auf und gibt zu jedem Eintrag einen Button "Entfernen" aus:



    Durch den Button "Hinzufügen" in film.php kann ein neuer Eintrag der Liste hinzugefügt werden:


    Klick-Event, das durch den Button ausgelöst wird:


    Code
    1. $(document).ready(function() {
    2. $('#hinzufuegenbutton').click(function() {
    3. $('#liste').load('listeneueneintraghinzufuegen.php', {
    4. buttonGedrueckt: true
    5. });
    6. });
    7. });


    listeneueneintraghinzufuegen.php:


    PHP
    1. <?php
    2. session_start();
    3. if (isset($_POST['buttonGedrueckt'])) {
    4. if (isset($_SESSION['ean'])) {
    5. $_SESSION['filme'][] = array($_SESSION['ean'], $_SESSION['titel'], $_SESSION['disctyp'], $_SESSION['besonderheit']);
    6. }
    7. include 'listeaktualisieren.php';
    8. }
    9. ?>


    Durch den Button "Löschen" in liste.php können alle Einträge der Liste gelöscht werden:


    Klick-Event, das durch den Button ausgelöst wird:


    Code
    1. $(document).ready(function() {
    2. $('#listeloeschenbutton').click(function() {
    3. var loeschenBestaetigt = window.confirm('Möchten Sie die komplette Liste wirklich löschen?');
    4. if (loeschenBestaetigt == true) {
    5. $('#liste').load('listeloeschen.php', {
    6. buttonGedrueckt: true
    7. });
    8. }
    9. });
    10. });


    listeloeschen.php:


    PHP
    1. <?php
    2. session_start();
    3. if (isset($_POST['buttonGedrueckt'])) {
    4. $_SESSION['filme'] = array();
    5. include 'listeaktualisieren.php';
    6. }
    7. ?>


    Durch den Button "Entfernen" in listeaktualisieren.php können Listeneinträge einzeln gelöscht werden:


    Klick-Event, das durch den Button ausgelöst wird:


    Code
    1. $(document).ready(function() {
    2. $('#liste').on('click', '.entfernenbutton', function() {
    3. $('#liste').load('elementauslisteentfernen.php', {
    4. nummerElement: $(this).val()
    5. });
    6. });
    7. });


    elementauslisteentfernen.php:


    PHP
    1. <?php
    2. session_start();
    3. if (isset($_POST['nummerElement'])) {
    4. array_splice($_SESSION['filme'], $_POST['nummerElement'], 1);
    5. include 'listeaktualisieren.php';
    6. }
    7. ?>


    Soweit zum Aufbau und dazu, was die Buttons tun sollten.


    Tatsächlich passiert Folgendes bei Klick auf die Buttons:


    - Bei Klick auf den Button zum Hinzufügen eines Eintrags werden mehrere gleiche Einträge hinzugefügt. Zusätzlich wächst die Anzahl der bei jedem Klick hinzugefügten Einträge mit der Anzahl der Klicks auf den Button.


    - Bei Klick auf den Button zum Löschen aller Einträge wird das Bestätigungsfenster (das vor dem Löschen aufgerufen wird) mehrmals aufgerufen, bevor die Einträge gelöscht werden. Auch hier wächst die Anzahl (hier: Aufrufe des Bestätigungsfensters) bei jedem Klick mit der Anzahl der Klicks auf den Button.


    - Bei Klick auf einen der Buttons zum Entfernen des einzelnen Listeneintrags werden der Listeneintrag und alle auf diesen folgenden Listeneinträge gelöscht.


    Wie erreiche ich das gewollte Verhalten?