Avatar billede lefsa62 Seniormester
20. februar 2019 - 23:32 Der er 13 kommentarer

New user successfully created!!

det har lige opstået et problem når  jeg vil oprette en ny bruger så siger den " New user successfully created!! " fint men det sker ikke noget i databasen.
her opretter jeg dem
<?php include('../functions.php') ?>
<!DOCTYPE html>
<html>
<head>
    <title>Registration system PHP and MySQL - Create user</title>
    <link rel="stylesheet" type="text/css" href="../style.css">
    <style>
        .header {
            background: #003366;
        }
        button[name=register_btn] {
            background: #003366;
        }
    </style>
</head>
<body>
    <div class="header">
        <h2>Admin - create user</h2>
    </div>
   
    <form method="post" action="create_user.php">

        <?php echo display_error(); ?>

        <div class="input-group">
            <label>Username</label>
            <input type="text" name="username" value="<?php echo $username; ?>">
        </div>
        <div class="input-group">
            <label>Email</label>
            <input type="email" name="email" value="<?php echo $email; ?>">
        </div>
        <div class="input-group">
            <label>User type</label>
            <select name="user_type" id="user_type" >
                <option value=""></option>
                <option value="admin">Admin</option>
                <option value="user">User</option>
            </select>
        </div>
        <div class="input-group">
            <label>Password</label>
            <input type="password" name="password_1">
        </div>
        <div class="input-group">
            <label>Confirm password</label>
            <input type="password" name="password_2">
        </div>
        <div class="input-group">
            <button type="submit" class="btn" name="register_btn"> + Create user</button>
        </div>
    </form>
</body>
</html>

og her sker der


<?php
    session_start();

    // connect to database
    $db = mysqli_connect('localhost', 'root', 'root', 'finans');

    // variable declaration
    $username = "";
    $email    = "";
    $errors  = array();

    // call the register() function if register_btn is clicked
    if (isset($_POST['register_btn'])) {
        register();
    }

    // call the login() function if register_btn is clicked
    if (isset($_POST['login_btn'])) {
        login();
    }

    if (isset($_GET['logout'])) {
        session_destroy();
        unset($_SESSION['user']);
        header("location: ../login.php");
    }

    // REGISTER USER
    function register(){
        global $db, $errors;

        // receive all input values from the form
        $username    =  e($_POST['username']);
        $email      =  e($_POST['email']);
        $password_1  =  e($_POST['password_1']);
        $password_2  =  e($_POST['password_2']);

        // form validation: ensure that the form is correctly filled
        if (empty($username)) {
            array_push($errors, "Username is required");
        }
        if (empty($email)) {
            array_push($errors, "Email is required");
        }
        if (empty($password_1)) {
            array_push($errors, "Password is required");
        }
        if ($password_1 != $password_2) {
            array_push($errors, "The two passwords do not match");
        }

        // register user if there are no errors in the form
        if (count($errors) == 0) {
            $password = md5($password_1);//encrypt the password before saving in the database

            if (isset($_POST['user_type'])) {
                $user_type = e($_POST['user_type']);
                $query = "INSERT INTO users (username, email, user_type, password)
                          VALUES('$username', '$email', '$user_type', '$password')";
                mysqli_query($db, $query);
                $_SESSION['success']  = "New user successfully created!!";
                header('location: home.php');
            }else{
                $query = "INSERT INTO users (username, email, user_type, password)
                          VALUES('$username', '$email', 'user', '$password')";
                mysqli_query($db, $query);

                // get id of the created user
                $logged_in_user_id = mysqli_insert_id($db);

                $_SESSION['user'] = getUserById($logged_in_user_id); // put logged in user in session
                $_SESSION['success']  = "You are now logged in";
                header('location: index.php');               
            }

        }

    }

    // return user array from their id
    function getUserById($id){
        global $db;
        $query = "SELECT * FROM users WHERE id=" . $id;
        $result = mysqli_query($db, $query);

        $user = mysqli_fetch_assoc($result);
        return $user;
    }

    // LOGIN USER
    function login(){
        global $db, $username, $errors;

        // grap form values
        $username = e($_POST['username']);
        $password = e($_POST['password']);

        // make sure form is filled properly
        if (empty($username)) {
            array_push($errors, "Username is required");
        }
        if (empty($password)) {
            array_push($errors, "Password is required");
        }

        // attempt login if no errors on form
        if (count($errors) == 0) {
            $password = md5($password);

            $query = "SELECT * FROM users WHERE username='$username' AND password='$password' LIMIT 1";
            $results = mysqli_query($db, $query);

            if (mysqli_num_rows($results) == 1) { // user found
                // check if user is admin or user
                $logged_in_user = mysqli_fetch_assoc($results);
                if ($logged_in_user['user_type'] == 'admin') {

                    $_SESSION['user'] = $logged_in_user;
                    $_SESSION['success']  = "You are now logged in";
                    header('location: admin/home.php');         
                }else{
                    $_SESSION['user'] = $logged_in_user;
                    $_SESSION['success']  = "You are now logged in";

                    header('location: index.php');
                }
            }else {
                array_push($errors, "Wrong username/password combination");
            }
        }
    }

    function isLoggedIn()
    {
        if (isset($_SESSION['user'])) {
            return true;
        }else{
            return false;
        }
    }

    function isAdmin()
    {
        if (isset($_SESSION['user']) && $_SESSION['user']['user_type'] == 'admin' ) {
            return true;
        }else{
            return false;
        }
    }

    // escape string
    function e($val){
        global $db;
        return mysqli_real_escape_string($db, trim($val));
    }

    function display_error() {
        global $errors;

        if (count($errors) > 0){
            echo '<div class="error">';
                foreach ($errors as $error){
                    echo $error .'<br>';
                }
            echo '</div>';
        }
    }
   
?>
jeg kan ikke se problemet .
opstået fra den ene dag til den anden for jeg ville lave en til min søn og han fik koden men ikke skete noget så tjekket vi DB ganske rigtig ingen ting.
kan i se hvad problemet er
Avatar billede arne_v Ekspert
21. februar 2019 - 01:09 #1
$user_type = e($_POST['user_type']);
$query = "INSERT INTO users (username, email, user_type, password)
                          VALUES('$username', '$email', '$user_type', '$password')";
mysqli_query($db, $query);
$_SESSION['success']  = "New user successfully created!!";

1) du boer teste paa retur varedi fra mysqli_query og udskrive fejlbesked hvis det ikke er success - saa vil du vide hvaf problemet er

2) hvis jeg skal gaette saa er fejlen at password er et reserveret ord og du skal enten kalde det felt noget andet *eller* putte passsword i backticks aka:

$query = "INSERT INTO users (username, email, user_type, `password`)
                          VALUES('$username', '$email', '$user_type', '$password')";
Avatar billede arne_v Ekspert
21. februar 2019 - 01:14 #2
Andre ting:

3) drop escape og brug prepared statement med parametre

4) drop global og overfoer som argumenter til funktion

5) brug individuel salt til hashing af passwords og drop MD5 algoritmen - minimum maa vaere SHA512 men nedre er at bruge password_hash funktionen som understoetter nogle hash funktioner specielt til password hashing
Avatar billede lefsa62 Seniormester
21. februar 2019 - 06:36 #3
Det havde jeg prøvet men det hjalp ikke  jeg har gjort det igen , den har virket før mærkeligt. er det andre forsøg
Avatar billede lefsa62 Seniormester
21. februar 2019 - 06:38 #4
Den gør det på både lochalhost og de globale
Avatar billede lefsa62 Seniormester
21. februar 2019 - 07:02 #5
Der hvor du skriver omkring md5 og hash hvordan skal strengen se ud
Avatar billede olsensweb.dk Ekspert
21. februar 2019 - 09:07 #6
suplerende link til noget af det arne_v har skrevet

>hvis jeg skal gaette saa er fejlen at password er et reserveret ord
det er det i mysql

liste af reserved ord i php og mysql
http://php.net/manual/en/reserved.keywords.php
https://dev.mysql.com/doc/refman/5.7/en/keywords.html

>3) drop escape og brug prepared statement med parametre
Prepared Statements under MySQLI
https://www.computerworld.dk/uploads/eksperten-guider/1480-Prepared-Statements-under-MySQLI-kom-igang.pdf


password_hash
http://php.net/manual/en/function.password-hash.php
eks
http://www.udvikleren.dk/forum/47211/kryptere-passwords-i-eksisterende-database/
se svar
29.07.17 15:00        logon side
30.07.17 13:07        modificeret code (utested)


>mysqli_query($db, $query);
$result = $db->query($query) or die($conn->error);
Avatar billede olsensweb.dk Ekspert
21. februar 2019 - 09:08 #7
or die($conn->error); skulle være or die($db->error);
Avatar billede lefsa62 Seniormester
21. februar 2019 - 10:11 #8
Takker nu virker den som så men den laver dobbelt op af sen bruger jeg laver ?
Avatar billede olsensweb.dk Ekspert
21. februar 2019 - 11:05 #9
>men den laver dobbelt op af sen bruger jeg laver ?
så må du logisk set lave en insert 2 gange

formindelig pga user_type er sat første gang, og ikke ikke sat anden gang.

if (isset($_POST['user_type'])) {
    $user_type = e($_POST['user_type']);
    $query = "INSERT INTO users (username, email, user_type, password)
              VALUES('$username', '$email', '$user_type', '$password')";
    mysqli_query($db, $query);
    $_SESSION['success']  = "New user successfully created!!";
    header('location: home.php');
}else{
    $query = "INSERT INTO users (username, email, user_type, password)
              VALUES('$username', '$email', 'user', '$password')";
    mysqli_query($db, $query);

    // get id of the created user
    $logged_in_user_id = mysqli_insert_id($db);

    $_SESSION['user'] = getUserById($logged_in_user_id); // put logged in user in session
    $_SESSION['success']  = "You are now logged in";
    header('location: index.php');               
}
Avatar billede lefsa62 Seniormester
21. februar 2019 - 12:16 #10
Den lille Steen den hjalp mig at finde fejlen som var en ting i MySQL som ikke var i funktion.php men at den lavede brugeren dobbelt er den lille streng. Lige så snart den var fjernet så ingen problem. Jeg lavede også den user som afveg fra user_type men ingen forskel. Det jeg ville lave i går var at hver bruger skulle have sidt eget billede for nu er der to faste billeder så den anden bruger skal kikke på den første👌
Avatar billede lefsa62 Seniormester
21. februar 2019 - 12:18 #11
Til dig arne_v
Du har tidernes morgen lavet et lille system til fik på girokort. Vil du ikke gentage den til mig men sådan den virker i php
Avatar billede lefsa62 Seniormester
21. februar 2019 - 16:20 #12
Altså ti fik nr "71"
Avatar billede arne_v Ekspert
21. februar 2019 - 18:20 #13
Jeg kan ikke huske noget om giro-kort.

Men jeg har glemt meget gennem aarene.

Kan du minde mig om sagen?

Eventuelt via direkte email.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester