Ankündigung

Einklappen
Keine Ankündigung bisher.

[OOP] Form überträgt Daten nicht

Einklappen

Neue Werbung 2019

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

  • [OOP] Form überträgt Daten nicht

    Hallo,

    mein Script will nicht funktionieren, ich möchte Daten in ein Objekt übertragen und es passiert nichts. Ich habe zum Test ein Objekt erstellt und die Parameter mit Strings gefüllt und alles funktioniert. Ich habe auch das Formular überprüft ob die Daten verloren gehen, aber Sie werden mir angezeigt, wenn ich Sie mit Echo aufrufe.

    PHP-Code:

    <form action="index.php" method="post" class="navbar-form navbar-left">
        Vorname: <br/>
        <input type="text" name="name" class="form-control" ><br/>
        Nachname: <br/>
        <input type="text" name="lastname" class="form-control" ><br/>
        Benutzername: <br/>
        <input type="text" name="user" class="form-control" ><br/>
        Passwort: <br/>
        <input type="password" name="pw" class="form-control" ><br/>
        Passwort(Wiederholen): <br/>
        <input type="password" name="pw_c" class="form-control" ><br/>
        E-Mail Adresse: <br/>
        <input type="email" name="email" class="form-control" ><br/>
        <p></p>
        <input type="submit" value="Registrieren" class="btn btn-primary">
        
    </form>
    <?php
    error_reporting
    (0);

    $name       $_POST['name'];
    $lastname   $_POST['lastname'];
    $user       $_POST['user'];
    $email      $_POST['email'];
    $password   $_POST['pw'];
    $confirm    $_POST['pw_c'];

    include(
    "User.class.php");

    /* Überprüft ob die Passwörter identisch sind */
    if($password === $confirm){
        
        
    /* Validiert die Eingaben "Vorname","Nachname","Benutzername","E-Mail-Adresse" */        
        
    if(!empty($name) AND !empty($lastname) AND !empty($user) AND !empty($email)){
        
            echo 
    $name;
            echo 
    $lastname;
            echo 
    $user;
            echo 
    $password;
            echo 
    $confirm;
            echo 
    $email;
            
    /*Erzeugt ein Objekt "newUser"*/
            
    $user = new User;
            
    $user->newUser($name,$lastname,$user,$password,$email);
            
            
        }else {
            echo 
    "<div class=\"alert alert-danger\" role=\"alert\">Die Passwörter stimmen nicht überein</div>";
        }
    }
    ?>


  • #2
    Wie sieht denn der Code der User-Klasse aus?

    Weitere Hinweise zum Debugging: http://phpforum.de/forum/showthread.php?t=216988, http://php-de.github.io/#debugging

    EVA-Prinzip beachten: http://phpforum.de/forum/showthread.php?t=221678, http://php-de.github.io/jumpto/eva-prinzip/

    Bitte auch die Ankündigung ganz oben in diesem Unterforum mal lesen, auch wenn sie inhaltlich vielleicht mittlerweile etwas überholt ist: http://www.php.de/php-fortgeschrittene/

    Kommentar


    • #3
      Als Error wird mir

      Catchable fatal error: Object of class User could not be converted to string in C:\xampp\htdocs\dev1\User.class.php on line 15
      Ausgespuckt.

      Google konnte mir bis jetzt nicht helfen.
      Meine PHP Code.

      PHP-Code:
      <?php
      class User {
          
      /* Datenbank */
          
      protected $mysqli;
          public function 
      __construct(){
              
      $this->mysqli = new mysqli("localhost""root""""user_m");
          }
          
          
      /* Erstellt das Objekt newUser */
          /* Nach der Validierung der Registrierung wird ein neuer User in der DB abgelegt */
          
      public function newUser($name,$lastname,$user,$pw,$email) {
              
      $stmt $this->mysqli->prepare("INSERT INTO `user_m` (`name`,`lastname`,`user`,`pw`,`email`)
                                     VALUES(?,?,?,?,?)"
      );
              
      $stmt->bind_param("sssss"$name,$lastname,$user,$pw,$email);
              if(
      $stmt->execute()){
                  echo 
      "<div class=\"alert alert-success\">Erfolgreich registriert</div>";
              }else {
                  echo 
      "<div class=\"alert alert-danger\"Registrierung fehlgeschlagen</div>";
              }  
          }
          
          
      }

      ?>

      Kommentar


      • #4
        Ach, klar, logisch. Guck mal, was du mit der Variablen $user im Code aus dem ersten Post so anstellst.

        Kommentar


        • #5
          Danke
          Hab aus aus dem "$user", dass das Objekt erstellt, ein "$user1" raus gemacht und plötzlich funktioniert es.

          Kommentar


          • #6
            Wenn ich mich nicht täusche, fehlt vor dem else-statement mit der Passwort-Fehlermeldung noch ein "}".

            So wie es jetzt da steht, wird das else-Statement ausgeführt, wenn eines der Felder leer ist.

            Kommentar


            • #7
              ich möchte auch hoffen, dass du deine Postdaten in der Userklasse escapst, und das dein Passwort verantwortungsbewusst hashst.
              Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

              Kommentar


              • #8
                Ich werde mal ein wenig den Nikosch spielen einer muss es ja Machen.

                Wenn ich diesen Code ansehe, sehe ich sofort dass deine Kentnisse nicht Fortgeschritten sind.

                Zunächstmal, bei der Registrierung erwartest du daten aus dem $_POST array dir ist es an der Stelle aber völlig egal ob der Request per $_GET oder $_POST ankommt, das überprüfst du garnicht.

                Danach includest du User.class.php, Fortgeschrittene User würden Composer benutzen.

                Deine erste Abfrage zeigt keine Fehler
                Und wenn einer der Eingabe felder leer sind, würde ich an der Stelle "Die Passwörter stimmen nicht überein" kriegen

                Deine User klasse baut im konstruktor eine verbinung zu der Datebank auf, d.h. diese User Klasse kannst du nicht wiederverwenden. Willst du ein Array an Usern anlegen so haste automatisch mehrere Datenbank verbindungen.

                Zudem stehen die Zugangsdaten im User Objekt drin. Ich sehe es jetzt schon dass du eine Datenbank klasse anlegen wirst und deine Userklasse wird dann von der Datenbank klasse Erben. Oder du wist eine Statische methode in deine Datebank klasse einbauen.

                Ein fortgeschrittener User würde ein DI Container benutzen

                Dann hast du bei der Registrierung auch gleich die Ausgabe mit drin. Ein Fotgeschrittener User würde die Erfolgsmeldung an die Stelle wo die Fehlermeldungen rauskommen, übertragen.

                Jeder fängt mal klein an und das ist alles Legitim nur sollte man sich nicht als Fortgeschritenen bezeichnen bie solchen anfänger typischen Fehlern

                Just my 2ct
                apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                Kommentar

                Lädt...
                X