Avatar billede Morten Professor
03. februar 2017 - 07:18 Der er 8 kommentarer og
2 løsninger

Mysqli glemt kode - Kryptering af kode

Hej Eksperter

Jeg har et problem med en mysqli update hvor sammentidigt skal krypterer den nye kode, og få den opdateret.
Jeg har nørklet med en kade læng på forskellige måder, så nu kaster jeg håndklædet i ringen.

Koden jeg prøver at til at fungere:
<?php
if(isset($_POST['button'])){
        /* Rediger fiskeplads */
if ($stmt = $con->prepare('UPDATE `tbl_medlemmer` SET `adgangskode`=? WHERE `adgangskode`= ?')) {
$adgangskode = $_POST['adgangskode'];
    /* Bind parametre */
    $stmt->bind_param('ss', $H_adgangskode, $hashedPassword);

    /* Sæt værdier på parametrene */
    $H_adgangskode = $_GET['adgangskode'];
   
    $hashedPassword = password_hash($adgangskode, PASSWORD_BCRYPT);

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

    /* Luk statement */
    $stmt->close();

} else {
    /* Der er opstået en fejl */
    echo 'Der opstod en fejl i erklæringen: ' . $con->error;
}}
?>

Med venlig hilsen
Morten
Avatar billede Morten Professor
03. februar 2017 - 08:21 #1
Prøvede lige denne af men det sker bare ikke noget:
<?php
if(isset($_POST['button'])){
        /* Rediger fiskeplads */
if ($stmt = $con->prepare('UPDATE `tbl_medlemmer` SET `adgangskode`=? WHERE `id`= ? and mail = ?')) {
$adgangskode = $_POST['adgangskode'];
    /* Bind parametre */
    $stmt->bind_param('is', $H_id, $H_mail, $hashedPassword);

    /* Sæt værdier på parametrene */
    $H_id = $_GET['id'];
    $H_mail = $_GET['mail'];
   
    $hashedPassword = password_hash($adgangskode, PASSWORD_BCRYPT);

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

    /* Luk statement */
    $stmt->close();

} else {
    /* Der er opstået en fejl */
    echo 'Der opstod en fejl i erklæringen: ' . $con->error;
}}
?>
Avatar billede Morten Professor
03. februar 2017 - 08:27 #2
Hele koden:
<form action="" method="post" name="opret_ny_kode" id="opret_ny_kode">
   
  <div>
  <div>
    <div>Adgangskode:
      <div>
    <label for="adgangskode"></label>
    <input name="adgangskode" type="text" id="adgangskode" value="" size="40" maxlength="255" required>
</div></div>
    <div>
      <input type="submit" name="button" id="button" value="Opret ny kode">
</div>
  </div></div> <?php
if(isset($_POST['button'])){
        /* Rediger fiskeplads */
if ($stmt = $con->prepare('UPDATE `tbl_medlemmer` SET `adgangskode`=? WHERE `id`= ? and mail = ?')) {

    /* Bind parametre */
    $stmt->bind_param('iss', $H_id, $H_mail, $hashedPassword);

    /* Sæt værdier på parametrene */
    $H_id = $_POST['id'];
    $H_mail = $_POST['mail'];
    $adgangskode = $_POST['adgangskode'];
    $hashedPassword = password_hash($adgangskode, PASSWORD_BCRYPT);

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

    /* Luk statement */
    $stmt->close();

} else {
    /* Der er opstået en fejl */
    echo 'Der opstod en fejl i erklæringen: ' . $con->error;
}}
?><input name="id" type="hidden" id="id" value="<?php echo $_GET['id']; ?>">
  <input name="mail" type="hidden" id="mail" value="<?php echo $_GET['mail']; ?>">
  </form>
Avatar billede Rune1983 Ekspert
03. februar 2017 - 10:14 #3
Du anvender GET som jeg tror skal være en POST
$_GET['adgangskode'];
Avatar billede Morten Professor
03. februar 2017 - 10:41 #4
Hej Rune

Jeps så jeg også så jeg lavede en med post, hvor jeg så har henvist til et id og en mail.
#2
Men virkede desværre ikke.
Avatar billede olsensweb.dk Ekspert
03. februar 2017 - 10:56 #5
hvorfor har du mail med i din sql ?? (and mail = ?)
rækken er da udpeget af id !!


>prepare('UPDATE `tbl_medlemmer` SET `adgangskode`=? WHERE `id`= ? and mail = ?'))

du har forkert rækkefølge i din bind
$stmt->bind_param('iss', $H_id, $H_mail, $hashedPassword);
skal være
$stmt->bind_param('sis', $hashedPassword, $H_id, $H_mail, );


men som jeg skrev ovenover ville jeg fjerne mailen fra min sql

(utested)

<?php
if (isset($_POST['button'])) {
    /* Rediger fiskeplads */
    if ($stmt = $con->prepare('UPDATE `tbl_medlemmer` SET `adgangskode`=? WHERE `id`= ?')) {

        /* Bind parametre */
        $stmt->bind_param('si', $hashedPassword, $H_id);

        /* Sæt værdier på parametrene */
        $H_id = $_POST['id'];
        // $H_mail = $_POST['mail']; // bruges ikke
        $adgangskode = $_POST['adgangskode'];
        $hashedPassword = password_hash($adgangskode, PASSWORD_BCRYPT);

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

        /* Luk statement */
        $stmt->close();
    } else {
        /* Der er opstået en fejl */
        echo 'Der opstod en fejl i erklæringen: ' . $con->error;
    }
}
?>

<form action="" method="post" name="opret_ny_kode" id="opret_ny_kode">
    <div>
        <div>
            <div>Adgangskode:
                <div>
                    <label for="adgangskode"></label>
                    <input name="adgangskode" type="text" id="adgangskode" value="" size="40" maxlength="255" required>
                </div>
            </div>
            <div>
                <input type="submit" name="button" id="button" value="Opret ny kode">
            </div>
        </div>
    </div>
    <input name="id" type="hidden" id="id" value="<?php echo $_POST['id']; ?>">
    <input name="mail" type="hidden" id="mail" value="<?php echo $_POST['mail']; ?>">
</form>



og som rune skriver skal dette
<input name="id" type="hidden" id="id" value="<?php echo $_GET['id']; ?>">
    <input name="mail" type="hidden" id="mail" value="<?php echo $_GET['mail']; ?>">

nok være post

<input name="id" type="hidden" id="id" value="<?php echo $_POST['id']; ?>">
    <input name="mail" type="hidden" id="mail" value="<?php echo $_POST['mail']; ?>">
Avatar billede Morten Professor
03. februar 2017 - 11:12 #6
Jamen nu virker det på den måde du har lavet det.
Men fordi jeg gerne vil have mail med er for at andre ikke kan bare skrive et id i browseren og så lave en anden brugers kode om.
Eller tager jeg fejl?

1000 tak for hjælpen, jeg får godt nok noget til tænkeren :)
Og tak fordi du skriver hvad jeg gør galt, så jeg kan huske hvorfor nogen ting går galt i min opsætning af koderne.
Avatar billede olsensweb.dk Ekspert
03. februar 2017 - 12:19 #7
>Men fordi jeg gerne vil have mail med er for at andre ikke kan bare skrive et id i browseren og så lave en anden brugers kode om.

så ville du skal du anvende dette
prepare('UPDATE `tbl_medlemmer` SET `adgangskode`=? WHERE `id`= ? and mail = ?')) {
..
$stmt->bind_param('sis', $hashedPassword, $H_id, $H_mail);

**************************

men har du overvejet at give brugeren en rolle, og  have brugerens info liggende i en session ??

antag din medlems tabel ser ca sådan ud

CREATE TABLE `tbl_medlemmer` (
  `id` int(11) NOT NULL,
  `firstname` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `lastname` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `postnummer` varchar(4) COLLATE utf8_danish_ci NOT NULL,
  `lande_id` int(1) NOT NULL,
  `username` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `adgangskode` varchar(255) COLLATE utf8_danish_ci NOT NULL, 
  `role_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;



din login.php kunne se sådan ud

<?php
// her ligger session_start, $con, og alle sql functioner
require_once("model.php");

if (isset($_POST['FormLoginSend'])) {
    $username = $_POST["navn"];
    $pass = $_POST["pw"];
   
    // hvis det er rigtigt brugernavn / password retuneres brugerens id og ellers 0
    $id = medlemmer_CheckPassword($con, $username, $pass);
    if ($id > 0) {
        // henter alle bruger info, og fjerner adgangskode fra session
        $_SESSION['USER'] = medlemmer_Read($con, $id);
        unset($_SESSION['USER']['adgangskode']);

    } else {
        echo $username . " forsøgte at logget på " . date("Y-m-d H:i:s") . "\n";
    }
    echo '<meta http-equiv="refresh" content="0;url=index.php">';
} else {
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>demo</title>

            <style type="text/css">
            </style>

        </head>
        <body>
            <form name="formlogin" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
                <p><input type="text" name="navn" id="navn" placeholder ="navn" required></p>
                <p><input type="password" name="pw" id="pw" placeholder ="kodeord" required></p>
                <p><input type="submit" name="FormLoginSend" id="FormLoginSend" value="Submit"></p>
            </form>
            <a href="forgotten_pw.php"><button type="button" >glemt password</button></a>
            <a href="create_user.php"><button type="button" >opret mig</button></a>
            <!--
            <a href="forgotten_pw.php">glemt password</a>
            <a href="create_user.php">opret mig</a>
            -->
        </body>
    </html>
    <?php
}
?>


skift_adgangskode.php

<?php

require_once("model.php");
// sikre at kun en med role_id 1 kan skrive en ny id i browseren, hvis en anden bruger skriver en anden id i browseren, vil den bare tage brugerens id
if ($SESSION['USER']['role_id'] == 1){
    // $user_id = $_POST['id'];
    $user_id = $_GET['id'];
}
else{
$user_id =     $SESSION['USER']['id'];
}


if (isset($_POST['button'])) {
    /* Rediger fiskeplads */
    if ($stmt = $con->prepare('UPDATE `tbl_medlemmer` SET `adgangskode`=? WHERE `id`= ?')) {

        /* Bind parametre */
        $stmt->bind_param('si', $hashedPassword, $H_id);

        /* Sæt værdier på parametrene */
        $H_id = $_POST['id'];       
        $adgangskode = $_POST['adgangskode'];
        $hashedPassword = password_hash($adgangskode, PASSWORD_BCRYPT);

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

        /* Luk statement */
        $stmt->close();
    } else {
        /* Der er opstået en fejl */
        echo 'Der opstod en fejl i erklæringen: ' . $con->error;
    }
}

?>
<form action="" method="post" name="opret_ny_kode" id="opret_ny_kode">
    <div>
        <div>
            <div>Adgangskode:
                <div>
                    <label for="adgangskode"></label>
                    <input name="adgangskode" type="text" id="adgangskode" value="" size="40" maxlength="255" required>
                </div>
            </div>
            <div>
                <input type="submit" name="button" id="button" value="Opret ny kode">
            </div>
        </div>
    </div>
    <input name="id" type="hidden" id="id" value="<?php echo $user_id; ?>">   
</form>
Avatar billede olsensweb.dk Ekspert
03. februar 2017 - 12:46 #8
ovenstående vil kun virke, hvis brugeren er logget ind. (skift pw)


hvis brugeren ikke er logget ind send ham et nyt pw på mail
lav et random pw og send det til ham
Avatar billede Morten Professor
03. februar 2017 - 12:47 #9
Det ser rigtig godt ud, den må jeg lige lege med.
Tak for du tog dig tid til det.

Med venlig hilsen
Morten
Avatar billede olsensweb.dk Ekspert
03. februar 2017 - 12:54 #10
forgotten_pw.php

<?php
require_once("model.php");
if (isset($_POST['send_email'])) {
  $to = trim($_POST["email"]);
// generar nyt pw
  $newpw = randPass(); // ligger i model.php, taget fra http://php.net/manual/en/function.shuffle.php#95414

  $userid = medlemmer_IsCreated($con, $to, 'email');
  if ($userid > 0) {
      // update bruger database     
      medlemmer_UpdatePassword($con, $newpw, $userid);
      // send nyt pw
      // $to      = 'nobody@example.com';
      $subject = 'nyt password';
      $message = $newpw;
     
      $headers = 'From: webmaster@example.com' . "\r\n" .
              'Reply-To: webmaster@example.com' . "\r\n" .
              'X-Mailer: PHP/' . phpversion();
      mail($to, $subject, $message, $headers);      
      echo '<meta http-equiv="refresh" content="0;url=index.php">';
      exit;
  }
}
?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>demo</title>

<style type="text/css">
</style>

</head>
<body>

<form method="post" action="forgotten_pw.php">
  <input type="email"  name="email" placeholder="navn@email.com"><!-- send email til brugerens mail hvis han har glemt password -->
  <input type="submit" name="send_email" value="Send">
</form>

</body>
</html>
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



IT-JOB

Udviklings- og Forenklingsstyrelsen

Backend-udvikler til Java-baserede microservices

IT & Co ApS

IT-tekniker

MAN Energy Solutions

Cloud FinOps Practitioner

Udviklings- og Forenklingsstyrelsen

Tech Lead til Java-backend udviklingsteam