Avatar billede tobrukDk Novice
17. marts 2012 - 14:21 Der er 34 kommentarer og
2 løsninger

Ens den samme email der også ?

Hej

lige pt nu og her arbejder noget med at gøre sådan at der ikke kan laves 2 ens email på "bruger" table..

men det er sådan at den skal kunne komm frem og sige "hold deres finde en email af den du har valgt"

Jeg har dog prøve frem og tilbage . men jeg kan ikke få det til at passe sammen og det fuck op hver gang jeg prøve ret i det eller lign.. :( Håber der for at du kan hjælp mig lidt videre på det her tykke arbejde :)


<?php
            if(!empty($_POST)){
                $email = $_POST['email'];
                $password = $_POST['password'];
                $gentag = $_POST['gentag'];
               
               
                $errors = array(
                    "email"    => "Du skal indtaste et Email-brugernavn.",
                    "password" => "Du skal indtaste et password. & Begge Adgangskodefelter skal have ens indhold!",
                );

                if(!empty($email)){ unset($errors['email']); }
                if(!empty($password)){ unset($errors['password']); }
                if(!empty($gentag) && $gentag == $password){ unset($errors['gentag']);
               
                if(empty($errors)){
                    $password = sha1($password);
                    $insert = mysql_query("INSERT INTO brugere (email,password) VALUES ('$email', '$password')");
                   
                    if(!$insert){
                        die("Der skete en fejl. Prøv igen. <a href=\"java script:history.back(-1)\">Tilbage</a>");
                    } else {
                        echo "Brugeren blev oprettet. <a href=\"index.php\">Forside</a><br />";
                    }
                } else {
                    echo "<div id=\"box\"> <h4>HUSK DEM HER!!</h4><ul><li>".implode("</li><li>", $errors)."</li></ul></div>";
                }
            }
        ?>



Den skal bare finde ud af om der finde en email af den slages som er blevet skrevet i input om den passer eller ej!!.
Avatar billede majbom Novice
17. marts 2012 - 15:14 #1
den kode du har der gør jo ikke andet end at oprette brugeren i databasen.

du skal lave en query der henter antallet af rækker hvor email-adressen er den samme som den indtastede - hvis antallet er 0 kan du oprette brugeren, ellers kan du melde tilbage at email-adressen er optaget...
17. marts 2012 - 15:24 #2
Efter du har en $email og ingen errors skal du gå ind i tabellen brugere og søge efter rækker med samme email adresse som i $email.  Hvis der er nogen udskriver du fejlmeldingen, ellers går du videre.  Såsom med denne kode (ikke testet)

$duplikat_email = mysql_query("SELECT * FROM brugere WHERE email = $email");
if ($duplikat) echo "hold deres finde en email af den du har valg";
else
{
  $insert = mysql_query("INSERT INTO BRUGERE .....");
  ...
  ...
}
17. marts 2012 - 15:24 #3
Det er splazz enig i, som han skrev mens jeg nørklede med mit indlæg.
Avatar billede olebole Juniormester
17. marts 2012 - 15:52 #4
<ole>

Løsningen er, at gøre email feltet unikt og teste, om man får en fejl 1062 ved indsætningen:

<?php
if(!empty($_POST)){
    $email = $_POST['email'];
    $password = $_POST['password'];
    $gentag = $_POST['gentag'];
   
   
    $errors = array(
        "email"    => "Du skal indtaste et Email-brugernavn.",
        "password" => "Du skal indtaste et password.",
        "gentag" => "Du skal gentage dit password - og begge adgangskodefelter skal have ens indhold!"
    );

    if(!empty($email)){ unset($errors['email']); }
    if(!empty($password)){ unset($errors['password']); }
    if(!empty($gentag) && $gentag == $password){ unset($errors['gentag']); }

   
    if(empty($errors)){
        $password = sha1($password);
        $insert = mysql_query("INSERT INTO brugere (email,password) VALUES ('$email', '$password')");
        if (mysql_errno==1062) {
            die('Der er allerede oprettet en bruger med denne e-mail: '.$email);
        }
       
        if(!$insert){
            die("Der skete en fejl. Prøv igen. <a href=\"java script:history.back(-1)\">Tilbage</a>");
        } else {
            echo "Brugeren blev oprettet. <a href=\"index.php\">Forside</a><br />";
        }
    } else {
        echo "<div id=\"box\"> <h4>HUSK DEM HER!!</h4><ul><li>".implode("</li><li>", $errors)."</li></ul></div>";
    }
}
?>

- og så har jeg i øvrigt tilføjet den manglende fejlbesked i error arrayet  =)

/mvh
</bole>
17. marts 2012 - 16:31 #5
#4 - ja den løsning kan jeg godt se er at foretrække.  Den skal jeg huske på.
Avatar billede tobrukDk Novice
17. marts 2012 - 17:36 #6
#1 jeg har prøve at lave sådan før men jeg har fået hjælp til at lave en "anden model" af inset til databasen.

altså den her stille har jeg prøve før

    $bruger = mysql_query("SELECT * FROM brugere WHERE email='$email'");
    if(mysql_num_rows($bruger) > 0){
    header("Location: fejl_email.php");
    $errorCount++;
    }


jeg forstår dig godt Christian_belgien! :D  og kan godt se hvad du mener osv.. :)
Avatar billede olebole Juniormester
17. marts 2012 - 17:38 #7
#5: I udgangspunktet er jeg ikke glad for at 'fremprovokere' fejl og teste (ligesom jeg helst undgår try/catch). Her det dog et sjældent tilfælde, at fejlen vil blive udløst, hvorfor jeg hellere undgår en ekstra forespørgsel ved hver indsætning. Den valgte løsning bør være nøje overvejet  =)
Avatar billede olebole Juniormester
17. marts 2012 - 17:40 #8
#6: Det er en mulighed, men en dårligere løsning. Der er ingen grund til at tælle $errorCount op, når du laver en redirect. Så har du jo ikke noget at bruge den variabel til  =)
Avatar billede tobrukDk Novice
17. marts 2012 - 18:00 #9
#8 Det er som udgangspunktet rigtigt nok det som du siger :) det er da samme tid en rigtigt god ide :)
Avatar billede tobrukDk Novice
17. marts 2012 - 19:56 #10

    <?php
    if(!empty($_POST)){
    $email = $_POST['email'];
    $password = $_POST['password'];
    $gentag = $_POST['gentag'];
    $bruger = mysql_query("SELECT * FROM brugere WHERE email='$email'");
    if(mysql_num_rows($bruger) > 0){
    echo "<p>Email er optaget, Prøve igen</p>";
    }
    $errors = array(
    "email" => "Du skal indtaste et Email-brugernavn.",
    "password" => "Du skal indtaste et password.",
    "gentag" => "Du skal gentage dit password - og begge adgangskodefelter skal have ens indhold!"
    );
    if(!empty($email)){ unset($errors['email']); }
    if(!empty($password)){ unset($errors['password']); }
    if(!empty($gentag) && $gentag == $password){ unset($errors['gentag']); }
    if(empty($errors)){
    $password = sha1($password);
    $insert = mysql_query("INSERT INTO brugere (email,password) VALUES ('$email', '$password')");
    if(!$insert){
    die("<p>Der skete en fejl.</p>");
    } else {
    echo "Godkendt!";
    }
    } else {
    echo "<div id=\"box\"> <h4>HUSK DEM HER!!</h4><ul><li>".implode("</li><li>", $errors)."</li></ul></div>";
    }
    }
    ?>


jeg har gøre sådan her ;)

den laver dog 2 fejl;


Email er optaget, Prøve igen

Der skete en fejl.
Avatar billede tobrukDk Novice
17. marts 2012 - 20:00 #11
Den laver kun den fejl hvis jeg prøve opret 2 enes email :)
Avatar billede tobrukDk Novice
17. marts 2012 - 20:29 #12
hvis jeg prøve at opret 2 ens email så hvis email er taget så hvis det er id 2 jeg prøver at opret på så hvis jeg lave en ny email eller lign altså en som ikke er databasen så kommer den op og ligger som nr 3 :( mærkeligt når 2 ikke er taget :O
Avatar billede tobrukDk Novice
17. marts 2012 - 20:34 #13

<?php
        if(!empty($_POST))
        {
            $email = $_POST["email"];
            $password = $_POST["password"];
            $gentag = $_POST["gentag"];
           
            $bruger = mysql_query("SELECT * FROM brugere WHERE email='$email'");
            if(mysql_num_rows($bruger) > 0)
            {
                echo "<p>Email er optaget, Prøve igen</p>";
            }
            else
            {
               
               
                $errors = array("email" => "Du skal indtaste et Email-brugernavn.", "password" => "Du skal indtaste et password.", "gentag" => "Du skal gentage dit password - og begge adgangskodefelter skal have ens indhold!");
                if(!empty($email))
                {
                    unset($errors["email"]);
                }
                if(!empty($password))
                {
                    unset($errors["password"]);
                }
                if(!empty($gentag) && $gentag == $password)
                {
                    unset($errors["gentag"]);
                }
               
               
                if(empty($errors))
                {
                    $password = sha1($password);
                    $insert = mysql_query("INSERT INTO brugere (email,password) VALUES ('$email', '$password')");
                   
                    if(!$insert)
                    {
                        die("<p>Der skete en fejl.</p>");
                    }
                    else
                    {
                        echo "Godkendt!";
                    }
                }
                else
                {
                    echo "<div id=\"box\"> <h4>HUSK DEM HER!!</h4><ul><li>" . implode("</li><li>", $errors) . "</li></ul></div>";
                }
            }
        }
        ?>


LØST FEJL :)

jeg har fået klart den men nu er det bare det med id osv.. :) jeg skal have kigge på :)
Avatar billede tobrukDk Novice
17. marts 2012 - 23:51 #14
#olebole vil du have noget for hjælp ? da du har hjælp mig til at jeg blive 100% færdig og jeg har klart det hele :)
Avatar billede kjeldsted Novice
18. marts 2012 - 19:40 #15
            $bruger = mysql_query("SELECT * FROM brugere WHERE email='$email'");

er vel én måde at lave en relativ stor request som faktisk ikke skal bruges. Du kunne jo, hvis du endelig skal gøre det med en request for sig selv i stedet for den bedre løsning i #4, nøjes med ikke at bede den retunere data fra tabellen, hvis det alligevel ikke skal bruges.

            $bruger = mysql_query("SELECT NULL FROM brugere WHERE email='$email'");

jeg ved faktisk ikke om det ellers er en optimal metode. Men databasen slipper da for at skulle hente data frem.
Avatar billede tobrukDk Novice
18. marts 2012 - 22:14 #16
#15 så du mener det bedre at bruge


$bruger = mysql_query("SELECT NULL FROM brugere WHERE email='$email'");
Avatar billede kjeldsted Novice
18. marts 2012 - 23:32 #17
Med minder du har brug for indholdet af alle rækker fra brugere. Med * henter du jo indholdet af alle rækker, og det er yderst sjældent du har brug for det hele. I dette tilfælde synes jeg det ser ud til at du slet ikke har brug for nogle, derfor er det jo bedst ikke at bruge det.

Hvis du fx. har brug for at kende antallet af udgivede bøger et bestemt år fra det lokale bibliotek er det jo også nemmere at gå ned og blot tælle dem, end at låne fx. alle 500 med hjem ;)
Avatar billede tobrukDk Novice
19. marts 2012 - 09:31 #18
Ja okay det kan jeg godt se :) men hvad betyder sådan set Null ? jeg har ikke helt forstår det ?
Avatar billede kjeldsted Novice
19. marts 2012 - 13:24 #19
NULL er i programmering ingen ting. Så det du beder den om er ikke at hente nogen af rækkerne i tabellen. Men den vil stadig retunere antallet af rækker.
Avatar billede tobrukDk Novice
19. marts 2012 - 19:32 #20
kun jeg ikke også bare skrive email så den kun henter email ?
Avatar billede majbom Novice
19. marts 2012 - 19:37 #21
jo, men du har jo ikke noget at bruge emailen til og på den anden side ved du jo allered hvad emailen er, for du henter kun den post hvor email-adressen er lig med det indtastede :)
Avatar billede tobrukDk Novice
19. marts 2012 - 19:44 #22
#21 ja okay det kan jeg godt se men så splazz og kjeldsted i vil klart sig til mig at jeg skal bruge NULL?
Avatar billede tobrukDk Novice
19. marts 2012 - 20:18 #23
det er bare sådan her at jeg skulle gøre ikke også,, vil bare være sikker :)
$bruger = mysql_query("SELECT NULL FROM brugere WHERE email='$email'");
                if(mysql_num_rows($bruger) > 0)
                {
                    echo "<p style=\"color:#f00;\">Email er optaget, Prøve igen</p>";
                }
                else
Avatar billede kjeldsted Novice
19. marts 2012 - 20:27 #24
Altså du kan jo gå ned på biblioteket og låne alle bøgerne med hjem. Blot for at gøre det ;)

Du vil slippe for at skulle bede databasen om at hente en masse information der ikke skal bruges. Og desto mindre data mellem php og db desto bedre.

Hvorfor at oleboles metode i #4  vil være endnu bedre.
Avatar billede kjeldsted Novice
19. marts 2012 - 20:29 #25
#23
Ja, du kan gøre sådan. Det er i hvert fald mindre belastende end *
Og faktisk er det meget sjældent man bør benytte *
Avatar billede tobrukDk Novice
19. marts 2012 - 20:59 #26
#25 && splazz vil i have noget for hjælp da jeg ved at olebole ikke vil have noget for det her ?
Avatar billede kjeldsted Novice
19. marts 2012 - 21:39 #27
Gerne :)
Avatar billede tobrukDk Novice
19. marts 2012 - 23:36 #28
jeg læret noget nyt igen og det er pisse dejligt at du kun lærer mig det Kjeldested :) og tak tak :) Venter bare på Splazz som også hjælp en lille del :)
Avatar billede kjeldsted Novice
19. marts 2012 - 23:56 #29
Man skal jo starte et sted. Har jo engang selv stået samme sted som dig :) Og er da bare glad for at kunne hjælpe.
Avatar billede tobrukDk Novice
20. marts 2012 - 07:17 #30
Godt at du har en forstår for mig .
Avatar billede majbom Novice
20. marts 2012 - 07:40 #31
svar!

:)
Avatar billede tobrukDk Novice
20. marts 2012 - 10:54 #32
#31 giv et svar
Avatar billede majbom Novice
20. marts 2012 - 12:18 #33
detalje ;)
Avatar billede tobrukDk Novice
20. marts 2012 - 13:53 #34
Sådan og igen tak for hjælpen
Avatar billede majbom Novice
20. marts 2012 - 14:58 #35
selv tak og tak for point :)
Avatar billede kjeldsted Novice
20. marts 2012 - 21:55 #36
Tak for points :)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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