Avatar billede tobrukDk Novice
28. maj 2013 - 16:43 Der er 21 kommentarer og
1 løsning

Find ud af om bruger's email finde i databasen

Hej

Lige nu arbejder på at lave sådan at den skal finde ud af om bruger har en email i databasen og derfor skal den komme frem og angive om den har fundet den eller ej.

Har prøvet at gøre sådan her


<?php
    if(isset($_POST["opret"]))
    {
        if($_POST["email"] == "")
        {
        ?>
        <div class="article-main-content">
        <div class="alert-message" style="background-color:#c22525;"><span class="icon-text">&#9888;</span><span class="alert-content">Husk at angive en email til din bruger!</span><a href="#" class="destroy-button"></a></div>
        </div>
        <?php
        }
        elseif($_POST["password_adgangskode_1"] == "" or $_POST["password_adgangskode_2"] == "")
        {
        ?>
        <div class="article-main-content">
        <div class="alert-message" style="background-color:#c22525;"><span class="icon-text">&#9888;</span><span class="alert-content">Husk at angive to ens Password til siden</span><a href="#" class="destroy-button"></a></div>
        </div>
        <?php   
        }
        elseif($_POST["fornavn"] == "" or $_POST["efternavn"] == "")
        {
        ?>
        <div class="article-main-content">
        <div class="alert-message" style="background-color:#c22525;"><span class="icon-text">&#9888;</span><span class="alert-content">Husk at angive
        <?php
        if($_POST["fornavn"] == "")
        {
            echo "Fornavn";
        }
        elseif($_POST["efternavn"] == "")
        {
            echo "Efternavn";
        }
        ?>
        </span><a href="#" class="destroy-button"></a></div>
        </div>
        <?php   
        }
        else
        {
            foreach($this->mysqli->query("SELECT * FROM `bruger` WHERE email='$email'") as $row) {
              if ($row['email'] !== $email) {
                $pb = null;
                               
                include "fun_filer/img/class.upload.php";
                $handle = new Upload($_FILES["file"]);
               
                if($handle->uploaded)
                {
                    $handle->image_resize = true;
                    $handle->image_ratio_crop = true;
                    $handle->image_y = 75;
                    $handle->image_x = 75;
                    $handle->Process("images/bruger");
                    $pb = $handle->file_dst_name;
                }
               
                if($stmt = $this->mysqli->prepare("INSERT INTO `bruger` (`rank`, `email`, `adgangskode`, `navn`, `efternavn`, `profil_img`) VALUES (?, ?, ?, ?, ?, ?)"))
                {
                    $stmt->bind_param('isssss', $rank, $email, $adgangskode, $navn, $efternavn, $profil_img);
                   
                    $rank = 1;
                    $email = $_POST["email"];
                    $adgangskode = sha1($_POST["password_adgangskode_1"]);
                    $navn = $_POST["fornavn"];
                    $efternavn = $_POST["efternavn"];
                    $profil_img = $pb;
                   
                    $stmt->execute();
                   
                    $navn = $_POST["navn"];
                    $til = $_POST["email"];
                    $password = $_POST["password_adgangskode_1"];
                   
                   
                    $fra = "blabla.dk - Opret bruger <" . "info@blabla.dk" . ">";
                    $til = $_POST["email"];
                    $emne = "Velkommen til blabla.dk";
                   
                    $besked = file_get_contents('mail_opret.php');
                   
                    $besked = str_replace("%%navn", $navn, $besked);
                    $besked = str_replace("%%brugernavn", $til, $besked);
                    $besked = str_replace("%%password", $password, $besked);
                   
                    $headers = "MIME-Version: 1.0\n";
                    $headers .= "Content-type: text/html; charset=UTF-8 \n";
                    $headers .= "From: " . $fra . "\n";
                   
                    mail($til, $emne, $besked, $headers);
                   
                    ?>
                    <div class="article-main-content">
                    <div class="alert-message" style="background-color:#77b01e;"><span class="icon-text">&#10003;</span><span class="alert-content">Din bruger er blevet opret og du få en email fra os <a href="#" class="destroy-button"></a></div>
                    </div>
                    <?php
                   
                    $stmt->close();
                   
                   
                }
                else
                {
                    echo 'Der opstod en fejl i erklæringen: ' . $this->mysqli->error;
                }
            }
            else
            {
            ?>
            <div class="article-main-content">
        <div class="alert-message" style="background-color:#c22525;"><span class="icon-text">&#9888;</span><span class="alert-content">Email Findes på hjemmesiden</span><a href="#" class="destroy-button"></a></div>
        </div>
            <?php
            }
            }
        }
    }
    ?>


Der kommer frem og viser at bruger findes 5-6 gange!


Jeg har også prøve at gøre sådan her


if ($stmt = $this->mysqli->prepare("SELECT `id` FROM `bruger` WHERE `email`"))
            {
            $stmt->bind_param('s', $email_indhold);
            $email_indhold = $_POST["email"];


            $stmt->execute();
            $stmt->store_result();
            $stmt->bind_result($id);
            $stmt->fetch();
            $count = $stmt->num_rows;
            $stmt->close();

            if($count >= 1)
            {
                $pb = null;
                               
                include "fun_filer/img/class.upload.php";
                $handle = new Upload($_FILES["file"]);
               
                if($handle->uploaded)
                {



Men så viser den kun fejl 1 gang!

Hvis jeg skriver sådan her


if($count >= 0)
            {


så kan jeg oprette lige så mange bruger jeg gider og har lyst..
Avatar billede repox Seniormester
28. maj 2013 - 19:17 #1
Men hvad er det der ikke virker for dig?
Avatar billede tobrukDk Novice
28. maj 2013 - 19:24 #2
det er sådan at den skal finde ud af om bruger's email finde i databasen :)
28. maj 2013 - 21:31 #3
Jeg forstår din problemstilling således: 

Du har et eller andet sted en html form hvor en bruger kan registrere sig.  Når brugeren har udfyldt formen og trykket på 'opret' knappen (eller hvad knappen nu hedder) sendes dataerne fra formen til det kodeafsnit du viser.  For at finde ud af om brugeren allerede har oprettet sig bruger du denne query:

SELECT * FROM `bruger` WHERE email='$email

Hvis denne query giver resultat, så afviser du oprettelsen med meddelelsen "Email Findes på hjemmesiden".  Hvis queryen ikke giver resultat, så opretter du brugeren i databasen med denne query:

INSERT INTO `bruger` (`rank`, `email`, `adgangskode`, `navn`, `efternavn`, `profil_img`) VALUES (?, ?, ?, ?, ?, ?) ........

Det er princippet i din kode, som jeg forstår det.  Har jeg forstået det rigtigt?

Så giver jeg repox ret i, at du ikke er særlig tydelig med hensyn til hvilket problem du er rendt ind i og som fik dig til at oprette spørgsmålet.  Du burde have beskrevet specifikt hvad du prøver at gøre, hvilket resultat du forventede, og hvilket resultat du fik i stedet.  Jeg gætter nu på, at du for at teste din kode har oprettet en bruger og nu forsøger at oprette en bruger med den samme email.  Du forventer så en meddelelse om, at emailen findes på hjemmesiden.  Det får du også, men du får den adskillige gange.  Du søger nu hjælp til at forbedre koden, så du får fejlmeldingen en gang.  Har jeg gættet rigtigt?

Det første problem jeg har med den kode du viser er, at jeg ikke kan se hvor variabelen $email får en værdi.  Jeg går ud fra, at du et eller andet sted har en kode linje (som du ikke viser) noget i retning af

$email = $_POST["email"]

Så et mindre punkt:  Efter din query

SELECT * FROM `bruger` WHERE email='$email'

siger du: if ($row['email'] !== $email) fulgt af 63 linjer af kode hvor du opretter brugeren.  Derefter følger else{...Email Findes på hjemmesiden} 

Jeg ville nok have vendt det om for at gøre det mere overskueligt, altså noget i retning af:

if($row['email'])
{......Email Findes på hjemmesiden}
else
{
og så dine 63 linjer kode hvor du opretter brugeren i databasen.
}

Men hovedproblemet, som jeg ser det, er at du placerer din query i en løkke,

foreach($this->mysqli->query("SELECT * FROM `bruger` WHERE email='$email'") as $row)  o.s.v.

Det følgende er ikke testet, men jeg ville mene, at vejen frem er en kode som denne:

if($_POST["email"] == "")/if($_POST["fornavn"] == ""/if($_POST["efternavn"] == "" o.s.v.
else
{
    $result = mysqli->query("SELECT * FROM `bruger` WHERE email='$email'");
    if(mysql_num_rows($resut)) > 0
    {
        ....Email Findes på hjemmesiden
    }
    else
    {
        koden til at registrere brugeren
    }
}
Avatar billede tobrukDk Novice
29. maj 2013 - 09:50 #4
Den skal første til at start med find ud af om alle inputter er tomme, der efter skal den finde ud af om bruger er oprette i databasen der efter skal den oprette bruger i databasen hvis det er. og skal samme tid send email til bruger.

så du vil gøre noget i den her still :



}
        elseif
        {
            foreach($this->mysqli->query("SELECT * FROM `bruger` WHERE email='$email'") as $row) {
              if ($row['email'] !== $email) {



Har dog ikke tilpasse koden men kun det ikke være en mulighed så else så opretter den brugen.

Det kan ikke være en mulighed?
29. maj 2013 - 10:33 #5
Nej, jeg ville ikke lave en 'foreach' løkke.  Jeg ville gøre noget i retning af:

else
{
    //forespørgsel til databasen for brugere med samme email
    $result = mysqli->query("SELECT * FROM `bruger` WHERE email='$email'");
    //hvis der kommer et resultat, det vil sige flere end 0 rækker, består emailen allerede
    if( if(mysqli_num_rows($resut)) > 0)
    {
        ...så afviser du registreringen
    }
    //hvis forespørgslen ikke giver resultat består emailen ikke, så du kan registrere brugeren
    else
    {
        ...så klør du på med at oprette brugeren og placere dataerne i databasen
    }

}

Jeg er stadig nysgerrig efter hvor indholdet i $email kommer fra.
Avatar billede tobrukDk Novice
29. maj 2013 - 10:40 #6
Det jeg forventer af kode:

Den skal finde ud af om alle min input er tomme, hvis de er tomme skal den komme frem og sig det,

hvis ingen af dem er tomme skal den komme frem og finde ud af om email findes i databsen.

Hvis den ikke findes i database skal den oprette i databasen og der efter send email til bruger.
Avatar billede tobrukDk Novice
29. maj 2013 - 10:41 #7
Tror lige at jeg skal have lavet en varieble til $email.


kode :


else
{
$email = $_post["email"];
    //forespørgsel til databasen for brugere med samme email
    $result = mysqli->query("SELECT * FROM `bruger` WHERE email='$email'");
    //hvis der kommer et resultat, det vil sige flere end 0 rækker, består emailen allerede
    if( if(mysqli_num_rows($resut)) > 0)
    {
        ...så afviser du registreringen
    }
    //hvis forespørgslen ikke giver resultat består emailen ikke, så du kan registrere brugeren
    else
    {
        ...så klør du på med at oprette brugeren og placere dataerne i databasen
    }

}

29. maj 2013 - 10:49 #8
Ja, prøv det og fortæl mig hvad du får.
Avatar billede tobrukDk Novice
29. maj 2013 - 10:51 #9
Det vil jeg gøre men det bliver nok første senere da jeg lige pt er i skole :)
Avatar billede tobrukDk Novice
29. maj 2013 - 18:03 #10

$email = $_post["email"];
            $result = $mebe->mysqli->query("SELECT * FROM `bruger` WHERE email='$email'");
            if(if(mysqli_num_rows($resut)) > 0)
            {
            ?>


fejl siger:

Parse error: syntax error, unexpected T_IF in /home/jesperbo/public_html/blabla.dk/fun_filer/fun.php on line 403

det er ved "if"
29. maj 2013 - 20:07 #11
For at teste hvor kvik du er indsatte jeg en if for meget i denne kodelinje:

            if(if(mysqli_num_rows($resut)) > 0)
Avatar billede tobrukDk Novice
29. maj 2013 - 21:48 #12
Jeg er ikke lige helt med i hvad du mener;


Jeg har prøve at gøre sådan her:


else
        {
            if ($stmt = $this->mysqli->prepare("SELECT * FROM `bruger` WHERE `email` = ?"))
            {
            $stmt->bind_param('s', $email);
            $email = $_POST["email"];
           
            $stmt->execute();
           
            $stmt->fetch();
            $count = $stmt->num_rows;
            $stmt->close();

            if($count > 0)
            {
                $pb = null;
                               
                include "fun_filer/img/class.upload.php";
                $handle = new Upload($_FILES["file"]);
               
                if($handle->uploaded)
                {
                    $handle->image_resize = true;
                    $handle->image_ratio_crop = true;
                    $handle->image_y = 75;
                    $handle->image_x = 75;
                    $handle->Process("images/bruger");
                    $pb = $handle->file_dst_name;
                }
               
                if($stmt = $this->mysqli->prepare("INSERT INTO `bruger` (`rank`, `email`, `adgangskode`, `navn`, `efternavn`, `profil_img`) VALUES (?, ?, ?, ?, ?, ?)"))
                {
                    $stmt->bind_param('isssss', $rank, $email, $adgangskode, $navn, $efternavn, $profil_img);
                   
                    $rank = 1;
                    $email = $_POST["email"];
                    $adgangskode = sha1($_POST["password_adgangskode_1"]);
                    $navn = $_POST["fornavn"];
                    $efternavn = $_POST["efternavn"];
                    $profil_img = $pb;
                   
                    $stmt->execute();
                   
                    $navn = $_POST["navn"];
                    $til = $_POST["email"];
                    $password = $_POST["password_adgangskode_1"];
                   
                   
                    $fra = "f.dk - Opret bruger <" . "info@f.dk" . ">";
                    $til = $_POST["email"];
                    $emne = "Velkommen til f.dk";
                   
                    $besked = file_get_contents('mail_opret.php');
                   
                    $besked = str_replace("%%navn", $navn, $besked);
                    $besked = str_replace("%%brugernavn", $til, $besked);
                    $besked = str_replace("%%password", $password, $besked);
                   
                    $headers = "MIME-Version: 1.0\n";
                    $headers .= "Content-type: text/html; charset=UTF-8 \n";
                    $headers .= "From: " . $fra . "\n";
                   
                    mail($til, $emne, $besked, $headers);
                   
                    ?>
                    <div class="article-main-content">
                    <div class="alert-message" style="background-color:#77b01e;"><span class="icon-text">&#10003;</span><span class="alert-content">Din bruger er blevet opret og du få en email fra os <a href="#" class="destroy-button"></a></div>
                    </div>
                    <?php
                   
                    $stmt->close();
                   
                   
                }
                else
                {
                    echo 'Der opstod en fejl i erklæringen: ' . $this->mysqli->error;
                }
            }
            else
            {
            ?>
            <div class="article-main-content">
                <div class="alert-message" style="background-color:#c22525;"><span class="icon-text">&#9888;</span><span class="alert-content">Email Findes på hjemmesiden</span><a href="#" class="destroy-button"></a></div>
            </div>
            <?php
            }
            }
        }
Avatar billede tobrukDk Novice
29. maj 2013 - 21:52 #13
Hvis jeg gøre sådan her


else
            {
                $result = mysqli->query("SELECT * FROM `bruger` WHERE email = ?");
                $stmt->bind_param('s', $email);
                  $email = $_POST["email"];
                if(if(mysqli_num_rows($resut)) > 0)
                {
                   
                   
                $pb = null;
                               
                include "fun_filer/img/class.upload.php";
                $handle = new Upload($_FILES["file"]);


kommer den frem med den her fejl:

Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /home/jesperbo/public_html/blabla.dk/fun_filer/fun.php on line 400
29. maj 2013 - 22:06 #14
Nu må du lige kikke efter.  Find kodelinjen

if(if(mysqli_num_rows($resut)) > 0)

Der står if(if.....

Det skulle naturligvis have været

if(mysqli_num_rows($result) > 0)
Avatar billede tobrukDk Novice
29. maj 2013 - 23:45 #15

$email_1 = $_post["email"];
                $result = $this->mysqli->query("SELECT * FROM `bruger` WHERE email='$email_1'");
                if(mysqli_num_rows($resut) > 0)


den kommer stadig frem og siger email finde i databaen selvom den ikke gør det :(

hvis jeg skrive 1 i stede for 0 så kan man godt hele tiden opret bruger med samme med email.
Avatar billede tobrukDk Novice
30. maj 2013 - 00:21 #16

$email_1 = $_post["email"];
                $result = $this->mysqli->query("SELECT * FROM `bruger` WHERE email='$email_1'");
                if(mysqli_num_rows($result) > 0)


siger stadig at den er optaget i databasen :(
30. maj 2013 - 21:42 #17
Jeg bruger (endnu) ikke mysqli, men mysql (det jeg arbejder med for tiden er gennem Joomla Contents Management System, jeg tilgår kun databasen direkte for tests og lignende.)  Derfor er den følgende test baseret på mysql, men det skulle virke også i mysqli.

Men jeg lavede denne tabel, som jeg kaldte bruger:

id email
1 email1
2 email2
3 email3

Så lavede jeg denne php kode:

$email_1 = 'email1';
$result = mysql_query("SELECT * FROM bruger WHERE email = '$email_1'");
if(mysql_num_rows($result) > 0) echo "Email findes på hjemmesiden";
else echo "Du kan godt registrere brugeren";?>

Når jeg kører den kode får jeg udskrevet "Email findes på hjemmesiden".  Det skal jeg også få, fordi 'email1' findes i tabellen.  Hvis jeg ændrer første linje til $email_1 = 'email5' en email der ikke findes i tabellen, så får jeg udskrevet "Du kan godt registrere brugeren".

Jeg foreslår, at du 'oversætter' denne kodestump til mysqli og ændrer $email_1 = 'email1' til en email du ved du har i tabellen, og så kører bare denne kodestump.  Så skulle du meget gerne få beskedden "Email findes på hjemmesiden".  Derefter prøv at ændre $email_1 = 'email1' til en email du ved der ikke findes i tabellen.  Så skulle du meget gerne få beskedden "Du kan godt registrere brugeren".  Ellers er der noget der er meget galt.

Hvis du kan få denne kodestump til at virke, så ved du, at du kan finde ud af om brugeren findes på databasen, det som var det problem du opstillede.  Så skal du 'bare' have det indbygget i din større kode.  Prøv kodestumpen af og fortæl hvad du får.
Avatar billede tobrukDk Novice
31. maj 2013 - 08:33 #18
skulle altså bare gøre sådan her,



}
        else
            {
                if ($stmt = $this->mysqli->prepare("SELECT `email` FROM `bruger` WHERE `email` = ?"))
                  {
                  $stmt->bind_param('s', $email);
                  $email = $_POST["email"];
     
     
                  $stmt->execute();
                  $stmt->store_result();
                  $stmt->bind_result($email);
                  $stmt->fetch();
                  $count = $stmt->num_rows;
                  $stmt->close();
     
                if($count > 0)
                {
                    ?>
                    <div class="article-main-content">
                        <div class="alert-message" style="background-color:#c22525;"><span class="icon-text">&#9888;</span><span class="alert-content">Email Findes på hjemmesiden</span><a href="#" class="destroy-button"></a></div>
                    </div>
                    <?php
                }
                else
                {
                   
                   
                $pb = null;
                               
                include "fun_filer/img/class.upload.php";
                $handle = new Upload($_FILES["file"]);
               
                if($handle->uploaded)
                {
                    $handle->image_resize = true;
                    $handle->image_ratio_crop = true;
                    $handle->image_y = 75;
                    $handle->image_x = 75;
                    $handle->Process("images/bruger");
                    $pb = $handle->file_dst_name;
                }
               
                if($stmt = $this->mysqli->prepare("INSERT INTO `bruger` (`rank`, `email`, `adgangskode`, `navn`, `efternavn`, `profil_img`) VALUES (?, ?, ?, ?, ?, ?)"))
                {
                    $stmt->bind_param('isssss', $rank, $email, $adgangskode, $navn, $efternavn, $profil_img);
                   
                    $rank = 1;
                    $email = $_POST["email"];
                    $adgangskode = sha1($_POST["password_adgangskode_1"]);
                    $navn = $_POST["fornavn"];
                    $efternavn = $_POST["efternavn"];
                    $profil_img = $pb;
                   
                    $stmt->execute();
                   
                    $navn = $_POST["navn"];
                    $til = $_POST["email"];
                    $password = $_POST["password_adgangskode_1"];
                   
                   
                    $fra = "f.dk - Opret bruger <" . "info@fyldtmedfilm.dk" . ">";
                    $til = $_POST["email"];
                    $emne = "Velkommen til f.dk";
                   
                    $besked = file_get_contents('mail_opret.php');
                   
                    $besked = str_replace("%%navn", $navn, $besked);
                    $besked = str_replace("%%brugernavn", $til, $besked);
                    $besked = str_replace("%%password", $password, $besked);
                   
                    $headers = "MIME-Version: 1.0\n";
                    $headers .= "Content-type: text/html; charset=UTF-8 \n";
                    $headers .= "From: " . $fra . "\n";
                   
                    mail($til, $emne, $besked, $headers);
                   
                    ?>
                    <div class="article-main-content">
                    <div class="alert-message" style="background-color:#77b01e;"><span class="icon-text">&#10003;</span><span class="alert-content">Din bruger er blevet opret og du få en email fra os <a href="#" class="destroy-button"></a></div>
                    </div>
                    <?php
                   
                    $stmt->close();
                   
                   
                }
                else
                {
                    echo 'Der opstod en fejl i erklæringen: ' . $this->mysqli->error;
                }
            }
            }
        }
    }
31. maj 2013 - 08:56 #19
Løste du det selv?  Så til lykke.  Lukker du med eget svar?
Avatar billede tobrukDk Novice
31. maj 2013 - 09:30 #20
Ja det virker helt fint nok ;) jeg vil gerne give noget også fordi du brugt tid på at hjælp mig :)
31. maj 2013 - 09:51 #21
Som jeg forstår det, så var det ikke mine indlæg der ledte dig til en løsning, så jeg afslår at lægge et svar.  Luk selv med eget svar.
Avatar billede tobrukDk Novice
01. juni 2013 - 00:52 #22
Okay, ;) Tak for hjælpen ellers
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