Avatar billede Morten Professor
01. februar 2017 - 10:05 Der er 8 kommentarer og
1 løsning

Mysqli glemt kode

Hej Eksperter

Er lige ved at forsøge at lave en for som får en email frem.
Det vil sige jeg forsøger at hente koden fra emailen.
Har prøvet at test på forskellige måder for at se om det virker på andre måder.
lige nu ser koden sådan ud.

if ($stmt = $con->prepare('SELECT `id`, `adgangskode`, `mail` FROM tbl_medlemmer WHERE mail = ?' )) {
        /* Bind parametre */
        $stmt->bind_param('iss', $id, $adgangskode, $mail);

        /* Sæt værdier på parametrene */
       
        $mail = $_POST['brugermail'];

        /* Eksekver forespørgslen */
        $stmt->execute();

        /* Bind resultatet */
        $stmt->bind_result($id, $adgangskode, $mail);
        }
        while ($stmt->fetch()) {
            $adgangskode;
            ;}
Men jeg får ingen svar.
Ingen fejl. bare ingen ting :o/

Med venlig hilsen
Morten
Avatar billede olsensweb.dk Ekspert
01. februar 2017 - 10:36 #1
hvorfor selecter du mail ?? du har den jo i forvejen.

din fejl:
din while er uden for dit statement, (du har placeret din tuborg slut forkert :) )

(utested)

<?php
if ($stmt = $con->prepare('SELECT `id`, `adgangskode` FROM tbl_medlemmer WHERE mail = ?' )) {
    /* Bind parametre */
    $stmt->bind_param('iss', $id, $adgangskode, $mail);

    /* Sæt værdier på parametrene */
   
    $mail = $_POST['brugermail'];

    /* Eksekver forespørgslen */
    $stmt->execute();

    /* Bind resultatet */
    $stmt->bind_result($id, $adgangskode);
   
   
    while ($stmt->fetch()) {
        $adgangskode;
    }

}
else{
    echo "fejl i sql";
}           
?>   
Avatar billede Morten Professor
01. februar 2017 - 10:58 #2
Der kommer stadig inden ting frem også selvom jeg har skrevet <?php
$con = mysqli_connect("localhost","****","****","*****");
// Check connection
if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// mysqli_select_db($mysqli, $database_mysqli ); // gøres i mysqli_connect
if ($stmt = $con->prepare('SELECT `id`, `adgangskode` FROM tbl_medlemmer WHERE mail = ?' )) {
        /* Bind parametre */
        $stmt->bind_param('iss', $id, $adgangskode, $mail);

        /* Sæt værdier på parametrene */
       
        $mail = $_POST['brugermail'];

        /* Eksekver forespørgslen */
        $stmt->execute();

        /* Bind resultatet */
        $stmt->bind_result($id, $adgangskode);
       
        while ($stmt->fetch()) {
        echo $adgangskode;
    }
}
else{
    echo "fejl i sql";
}
            ?>
Avatar billede olsensweb.dk Ekspert
01. februar 2017 - 11:30 #3
du burde gerne få denne fejl:
Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in C:\util\xampp\htdocs\test\morticms.php on line 15

denne linje
$stmt->bind_param('iss', $id, $adgangskode, $mail);

skal se sådan ud
$stmt->bind_param('s', $mail);


skulle du ikke bruge din variabel til noget i din while ??, feks udskriv



<?php
$con = new mysqli ( "localhost", "root", "", "test" );
if (! $con) {
    echo 'Der opstod en fejl.';
    exit ();
}
// mysqli_set_charset($con, "utf8");
$con->set_charset( "utf8" );
?>


<?php
if ($stmt = $con->prepare('SELECT `id`, `adgangskode` FROM tbl_medlemmer WHERE mail = ?' )) {
        /* Bind parametre */
        $stmt->bind_param('s', $mail);

        /* Sæt værdier på parametrene */
       
        $mail = $_POST['brugermail'];
        // $mail ="mm@andeby.dk"; // test       
       
        /* Eksekver forespørgslen */
        $stmt->execute();

        /* Bind resultatet */
        $stmt->bind_result($id, $adgangskode);
       
       
        while ($stmt->fetch()) {
            echo $adgangskode;
        }
}
else{
    echo "fejl i sql";
}           
?>   
Avatar billede Morten Professor
01. februar 2017 - 11:35 #4
Der var der det var $stmt->bind_param('s', $mail); Der gjorde det kom frem.
Jeg må simpelhen have sirret mig blind og og prøvet det før men hvor min while stod forkert Så to ting gjorde udslaget.

1000 tak for hjælpen

Med venlig hilsen
Morten
Avatar billede olsensweb.dk Ekspert
01. februar 2017 - 12:26 #5
det er jo bare:
1) brug indrykning af code
2) tælle antallet af spørgsmålstegn man har sat i sql, og bind_param tilsvarende parameter :)
3) bind_result dem man har selected

tro mig det er nemmere i PDO med named placeholders istedet for numbered placeholders (spørgsmålstegn), som er det eneste man kan bruge i mysqli


BTW: hvordan kan du sende brugerens hans password ??, password bør stå i krypterede form i databasen.

det rigtige må/er at sende brugeren et nyt password
Avatar billede Morten Professor
01. februar 2017 - 14:41 #6
"BTW: hvordan kan du sende brugerens hans password ??, password bør stå i krypterede form i databasen."

Hvordan kryptere man password, har jeg aldrig prøvet før, men det er også min første bruger database.
Er det noget du har tid og løst til at hjælpe med?
Eller vil du helst have jeg opretter et nyt spørgsmål og så gøre det der fra, altså kun hvis du har tid og løst?

Med venlig hilsen
Morten
Avatar billede arne_v Ekspert
01. februar 2017 - 15:17 #7
Kun hash af password boer gemmes i database - med et random unikt salt.

Hash kaldes nogengang for envejs-kryptering.
Avatar billede olsensweb.dk Ekspert
01. februar 2017 - 15:45 #8
>Hvordan kryptere man password, har jeg aldrig prøvet før, men det er også min første bruger database.
password (pw) der står i databasen skal være krypteret.
når brugeren logger ind kryptere du hans pw, med sammen algoritme, som du har krypterede hans pw med i databasen, og sammenligner brugernavn, og det indtastede pw i krypterede form med det der står i databasen.


der findes forskællige algoritmer
feks
(forældet)
http://php.net/manual/en/function.md5.php
citat
Note: Secure password hashing
It is not recommended to use this function to secure passwords, due to the fast nature of this hashing algorithm. See here for details.
/citat

http://php.net/manual/en/function.hash.php
http://php.net/manual/en/function.crypt.php


spm om det
http://www.udvikleren.dk/forum/40085/forbedre-password-paa-siden/
http://www.udvikleren.dk/forum/39136/hash-paa-password/

artikel
http://www.udvikleren.dk/artikler/368/php-krypto-1-hashing/


jeg har ikke lige noget code liggende i mysqli, da jeg anvender det nyere API PDO

men når du har løst ovenstående link, så opret et nyt spm, så tager vi den derfra
Avatar billede Morten Professor
01. februar 2017 - 15:53 #9
1000 tak Olsen for du har taget dig tid til det, jeg går ombord med det samme.
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