Problem mit Werteübergabe an eine Funktion

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

  • Problem mit Werteübergabe an eine Funktion

    Hallo liebe Forenmitglieder. Mein Name ist Sascha und ich bin absoluter "Neu"-Anfänger. Das letzte Mal hab ich vor etwa 10 Jahren gescriptet. Nun möchte ich aber wieder anfangen und habe gleich ein,
    für euch sicherlich kleines, Problem. Ich habe Angefangen auf meiner Seite ein Registrierungsformular zu erstellen, bekomme aber immer nur Error 500 (Wie ich diesen Fehler hasse!!!).
    Aber bevor mein Post zu lang wird, umreiße ich das Problem kurz und stellle mal die betreffenden Stellen ein.

    In meiner Index.php steht folgendes:
    PHP-Code:
    ini_set('display_errors',1);
    error_reporting(E_ALL);
    //        Setting Header Information
    header("Content-Type: text/html; charset=utf-8");
    date_default_timezone_set('Europe/Berlin');
    //        Grabbing necessary files
    require_once './config/db.php';
    require_once 
    './inc/home.inc.php';
    //        Grabbing classes
    require_once './class/user.class.php';  //Datei fur die class user 
    Als nächstes wäre die Datei /config/db.php dran:
    PHP-Code:
    $dsn  'mysql:dbname=testdb;host=localhost;charset=utf8';
    $user ' ';
    $pass ' ';
    $options = [
        
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
        
    PDO::ATTR_EMULATE_PREPARES => false
    ];
    $pdo = new PDO($dsn$user$pass$options);
    ​ 
    Im folgenden Scipt (user.class.php) befindet sich:
    PHP-Code:
    class user {
        public  
    $name;
        public  
    $email;
        public  
    $user_level;
        public  
    $now;
        private 
    $pdo;


        public function 
    __construct(PDO $pdo) {
            
    $this->pdo $pdo;
        }
        public function 
    createUser($name$email) {
            
    $user_level '1';
            
    $now time();
            
    $new_user = array();
            
    $new_user['user_name']  = $name;
            
    $new_user['user_email'] = $email;
            
    $new_user['user_level'] = $user_level;
            
    $new_user['created_at'] = $now;


            
    $statement $pdo->prepare("INSERT INTO `users` (user_name, user_email, user_level, created_at) VALUES ($name$email$user_level$now)");
            
    $statement->execute($new_user);
        }        

    }
    $USER = new user($pdo);​ 
    Wie man vll erahnen kann, geht es darum einen neuen User in der DB anzulegen. Das erfolgt über ein Formular in der /html/register.html.php,
    PHP-Code:
    <form action="./register.inc.php" method="POST">
                <
    input type="hidden" name="do" value="register">
                <
    input type="text" name="username" placeholder="Benutzername"><br />
                <
    input type="text" name="email" placeholder="E-Mail Adresse"><br /><br />
                <
    input type="submit" value="Registrieren">
            </
    form>​ 
    und die dazugehörige /inc/register.inc.php:
    PHP-Code:
    $job htmlspecialchars($_POST['do']);
    if (
    $job == 'register') {
        
    $name htmlspecialchars($_POST['username']);
        
    $email htmlspecialchars($_POST['email']);

    $USER->createUser($name$email); // Wird diese Zeile auskommentiert, erscheint der Fehler nicht. Liegt also am Aufruf der function createUser()
    header('Location: ../index.php');
    } else {
        
    $job '';
    }
    require_once(
    '../html/register.html.php');​ 
    Ich google mir seid Tagen die Fingerkuppen taub und komme einfach nicht auf einen Lösungsansatz.
    Wäre cool, wenn mir da jemnad helfen könnte.
    Danke schonmal im Vorraus

    P.S.: Das ist nur der Anfang. Sachen wie Passwort... werden noch ergänzt.
    Zuletzt geändert von Saschispatz; 16.09.2024, 21:59.

  • #2
    Ich werde Ihren Code erneut mit der korrekten Verwendung von Platzhaltern in der vorbereiteten Anweisung aktualisieren:
    öffentliche Funktion createUser($name, $email) {
    $user_level = '1';
    $now = time();

    $statement = $this->pdo->prepare("INSERT INTO `users` (user_name, user_email, user_level, erstellt_at) VALUES (:name, :email, :user_level, :created_at)");
    $statement->execute([
    ':name' => $name,
    ':email' => $email,
    ':user_level' => $user_level,
    ':created_at' => $now
    ]);
    }​

    Kommentar


    • #3
      Anstatt Selenium zu verwenden, das für solche Aufgaben schwer sein kann, können Sie Folgendes in Betracht ziehen: PHP cURL
      Zum Beispiel:
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      $source = curl_exec($ch);
      curl_close($ch);​

      Kommentar


      • #4
        Hallo regionalfilament
        Erstmal danke für die Hilfe. Leider kommt auch hier der Error 500. Ich glaube irgendwie, dass die public function(createUser) in meiner
        register.inc.php nicht existiert, also nicht geladen wurde. Das versuche ich gerade herrauszufinden mit if (class_exists(), und das scheint
        meine Vermutung zu bestätigen.
        Zuletzt geändert von Saschispatz; 17.09.2024, 15:47.

        Kommentar


        • #5
          Meine Vermutung hat sich bestätigt. Ich habe an verschiedenen Stellen im Script den folgenden Code eingefügt, um zu testen, bis wann die class user() verfügbar ist.
          PHP-Code:
          if (class_exists('user')) {
                  echo 
          'The class User exists';
              } else {
                  echo 
          'The class User does not exist';
              }
          ​ 
          Alles ist gut, bis ich das ausgefüllte Formular abschicke. Aber ich kann einfach keinen Fehler finden. Auch die Konsole hilft mir nicht weiter. Hat vll noch jemand eine Idee?
          Bin für jeden Tip dankbar.

          Kommentar


          • #6
            In der register.inc.php fehlt die Zeile

            PHP-Code:
            require_once './class/user.class.php';​ 

            Kommentar


            • #7
              Hallo scatello
              die user.class.php wird schon in der index.php eingebunden, und ist existent bis ich im Formular den submit Button klicke. Dann ist die class nicht mehr existent.

              Kommentar


              • #8
                Hat sich erledigt. Ich habs hinbekommen, indem ich folgendes gemacht habe:
                1. Ich habe die register.html.php direkt, ohne umweg über die register.inc.php aufgerufen.
                2. Habe die register.inc.php in do_register.inc.php umbenannt, und
                3. diesen Verweis in der Index hinterlegt.
                Ist vll bisschen umständlich erklärt, aber der Thread kann letztendlich geschlossen werden.
                Vielen Dank und ich kann jetzt schon androhen mich bei weiteren Problemen vertrauensvoll
                an euch zu wenden

                Kommentar


                • #9
                  Zitat von Saschispatz Beitrag anzeigen
                  die user.class.php wird schon in der index.php eingebunden
                  Wie hätte man das bei den gestückelten Quellcodes erkennen sollen?

                  Kommentar


                  • #10
                    Durch lesen?

                    Kommentar

                    Lädt...
                    X