Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankätze ändern über Formular

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenbankätze ändern über Formular

    Hallo zusammen,

    ich habe von hier mal ein Script bekommen (extra angefertigt) und bräuchte nun, weil ich was ändern möchte, Unterstützung.
    Ich kann ein wenig SQL und bin nun aber überfragt.

    Der User gibt an ob er an einem Treffen teilnehmen möchte und ob er auch Essen bestellen möchte. Die beiden Sachen werden nun in einer Datenbank erfasst, bisher war es so das der User seine
    Entscheidung nicht ändern konnte, bzw. musste ich das per eingriff in die Datenbank selber vornehmen.

    Ich habe nun eine Seite, auf der der User seine Entscheidung selber ändern kann. Ich lasse per SESSION sein bisherige Entscheidung anzeigen, leider lassen sich die Daten aber nicht ändern.
    Bei der durchsicht des Scriptes bin nun auf das Problem gestoßen und kann es mit meinem Wissen nicht lösen.

    Hier jetzt mal die Codes.

    Erste abfrage beim ersten mal Einloggen

    HTML-Code:
    <p>Sag uns ob du kommst oder nicht. <br>Wenn du an der Feier teilnimmst, dann sag uns bitte auch ob du essen möchtest. <br>Das erleichtert uns die Vorbereitungen.</p>
    
    <form method="post" action="form_logic.php">
    <div class="option">
    <label>Zusage: </label>
     <input type="radio" name="selection" value="commitment"  />
    </div>
    <div class="option">
    <label>Absage: </label>
    <input type="radio" name="selection" value="cancellation" />
    </div>
    <div class="option">
    <label>Unentschlossen: </label>
    <input type="radio" name="selection" value="undecided" />
    </div>
    <br>
    <div class="option">
    <label>Mit Essen: </label>
    <input type="radio" name="meal" value="yes" />
    </div>
    <div class="option">
    <label>Ohne Essen: </label>
    <input type="radio" name="meal" value="no" />
    </div>
    <br />
    <label for="email">E-Mail-Adresse: </label>
     <input type="email" name="email" placeholder="  abcd@example.com"/>
     <br />
     <br />
     <input type="hidden" name="form_type" value="appointment confirmation" />    <!-- if you use the script for more forms, you will need this -->
     <input type="submit" value="Abschicken" /><br>
     <p><br>Bitte trage deine E-Mail Adresse ein.<br><b><font color=red>Mit deiner E-Mail Adresse sparen wir uns das Porto für die nächste Einladung ;).</font></b><br>Wir k&ouml;nnen dann auch nach dem Treffen so einfacher bescheid geben, wann und wo die Fotos zu sehen sind.</p><br />
    </form>
    Die Datei die den POST befehl verarbeitet

    PHP-Code:
    <?php
    include_once 'meeting_logic.php';
    include_once 
    'database_connection.php';
    if(
    $_POST['form_type'] == 'login'){
        if((isset(
    $_POST['username'])) && (isset($_POST['password']))) {
            
    //Setze Datenbankverbindung
            
    $mysqli = new mysqli(MYSQL_HOSTMYSQL_BENUTZERMYSQL_KENNWORTMYSQL_DATENBANK);
            
    //Abfragen, ob Verbindung nicht geklappt hat
            
    if ($mysqli->connect_errno) {
                die(
    "Verbindung fehlgeschlagen: " $mysqli->connect_error);
            }
            
    //Hole Benutzernamen
            
    $temp_username $_POST['username'];
            
    //Hole Password
            
    $temp_password $_POST['password'];

            
    $input_array = array($temp_username$temp_password);
            
    $prepared_input = array();
            foreach (
    $input_array as &$input_var) {
                
    $temp_var trim($input_var);
                
    $temp_var $mysqli->real_escape_string($temp_var);
                
    $temp_var utf8_decode($temp_var);
                
    array_push($prepared_input$temp_var);
            }
            
    $user = new user();
            
    $user->name $prepared_input[0];
            
    $user->password $prepared_input[1];
            
    $user->loginUser();
        }

        else {
            echo 
    '<p class="rot">Bitte geben Sie Benutzername und Passwort ein!</p>';
        }
    }

    else if(
    $_POST['form_type'] == 'appointment confirmation') {
        
    $user = new user();
        
    $user->name $_SESSION['username'];
        if(!(empty(
    $_POST['email']))) {
            
    $user->email $_POST['email'];
        }

        else {
            
    $emailExists $user->proveEmailInput();
            if(
    true == $emailExists){
                
    $user->email '';
            }

            else {
                
    $user->copyEmail();
            }    
        }

        if(
    $_POST['selection'] == "commitment"){
            
    $user->status 'Zusage';
            
    $_SESSION['status'] = "Zusage";
        }

        else if(
    $_POST['selection'] == "cancellation"){
            
    $user->status 'Absage';
            
    $_SESSION['status'] = "Absage";
        }

        else{
            
    $user->status 'Unentschlossen';
            
    $_SESSION['status'] = "Unentschlossen";
        }

        if(
    $_POST['meal'] == "yes"){
            
    $user->essen 'Ja';
            
    $_SESSION['essen'] = "Ja";
        }

        else if(
    $_POST['meal'] == "no"){
            
    $user->essen 'Nein';
            
    $_SESSION['essen'] = "Nein";
        }


        
    $user->setDecision();
        
    ob_start();
        
    header("Location: logout.php");    //Weiterleitung auf logout
        
    ob_flush();
        
    ob_end_flush();
    }
    Ich kann diese Art der Verarbeitung anscheinend nicht einfach ein zweites mal nutzen. Ich habe den HTML Code von oben in die andere Seite so übernommen, bekomme aber keine änderung der Datenbank.
    Meine Frage nun, wie bekomme ich eine Änderung der Daten?

    Falsches Forum? Dann bitte verschieben, Danke.


    Schöne Grüße Marc

  • #2
    Das sieht so aus als würdest du die user Klasse ändern müssen.

    Kommentar


    • #3
      Zitat von Dormilich Beitrag anzeigen
      Das sieht so aus als würdest du die user Klasse ändern müssen.
      Dafür reichen meine Kenntnisse nicht. Ich war für mich jetzt soweit, eine andere
      Code:
      action="xyz.php"
      mit einer UPDATE Funktion anzulegen, wofür mir leider auch das Wissen fehlt.

      Kommentar


      • #4
        Code:
        //Überprüft, ob User schon eine Entscheidung abgegeben hat
            public function proveUserDecision() {
                //Setze Datenbankverbindung
                $mysqli = new mysqli(MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT, MYSQL_DATENBANK);
                //Abfragen, ob Verbindung nicht geklappt hat
                if ($mysqli->connect_errno) {
                    die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);
                }
                $query = 'SELECT vorname, password, status, essen FROM meeting_data WHERE username = ?'; //Datenbankabfrage
                $statement = $mysqli->prepare($query);    //Datenbankabfrage vorbereiten
                $statement->bind_param('s', $this->name);    //Binde Parameter an Datenbankabfrage --> keine SQL-Injections
                $statement->execute();    //Führe Datenbankabfrage aus
                $result = $statement->get_result();
                while ($row = $result->fetch_assoc()) { //Hole Resultat als Array
                    if($row['status'] == NULL) {
                        return true;
                    }
        
                    else {
                        $_SESSION['vorname'] = $row['vorname'];
                        $_SESSION['password'] = $row['password'];
                        $_SESSION['status'] = $row['status'];
                        $_SESSION['essen'] = $row['essen'];
                        return false;
                    }
                }
                $result->free();    //Gebe Ressourcen wieder frei
            }
        }
        In diesem Abschnitt wird ja geprüft ob der User schon einen Eintrag gemacht hat, kann man da nicht in der else (für ja, hat er) ein DELET FROM meeting_data WHERE status = ?, essen = ? einsetzen statt der $_SESSION, damit er dann den false ausgibt und dann auf die neue Seite springt?

        Kommentar


        • #5
          Zitat von MrCheeky Beitrag anzeigen
          In diesem Abschnitt wird ja geprüft ob der User schon einen Eintrag gemacht hat, kann man da nicht in der else (für ja, hat er) ein DELET FROM meeting_data WHERE status = ?, essen = ? einsetzen statt der $_SESSION, damit er dann den false ausgibt und dann auf die neue Seite springt?
          Wieso ein DELETE? Ich dachte du möchtest die Daten ändern (also UPDATE)? Aber egal, der Code den du da gepostet hast ist zum einen Murks und zum anderen hat er mit Problem (erstmal) nichts zu tun, zumindest wird die Methode im Code in #1 nicht aufgerufen.

          Ich glaube es ist sinnvoller wenn du die Änderung machen lässt, entweder von demjenigen der das Script verbrochen[sic] hat oder hier in der Scriptbörse - ich glaube deine Kenntnisse reichen dafür nicht aus.

          Kommentar


          • #6
            Zitat von tk1234 Beitrag anzeigen
            Ich glaube es ist sinnvoller wenn du die Änderung machen lässt, entweder von demjenigen der das Script verbrochen[sic] hat oder hier in der Scriptbörse - ich glaube deine Kenntnisse reichen dafür nicht aus.
            Tja, der jenige ist hier leider nicht mehr aktiv.

            Kommentar

            Lädt...
            X