Avatar billede SSC Juniormester
31. oktober 2020 - 13:46 Der er 8 kommentarer og
1 løsning

"Change Password application"

Hej CE,

Jeg sidder med en "Change-Password-application", hvor jeg får fejlkoden

Notice: Undefined index: currentpass in /Applications/AMPPS/www/BuisnessWorld/Password_change.php on line 46
NULL array(0) { }


Koden er herunder:

<?php

session_start();


$con = new mysqli('****', '****, '****', '****');


$user=$_SESSION["user"];



if ($con->connect_errno) {
  echo "Failed to connect to MySQL: (" . $con->connect_errno . ") " . $con->connect_error;
}

$stmt = $con->prepare("SELECT * FROM members WHERE user=? LIMIT 1");


$stmt->bind_param("s", $user);

// execute
$stmt->execute();


$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {
  if ($_POST["currentPass"] == $row["pass"] && $_POST["newPass"] == $row["confirmPass"]) {
    $updateStmt = $con->prepare("UPDATE members SET pass=? WHERE user=?");
    $stmt->bind_param("s", $user);
    $updateStmt->bind_param("ss", $_POST["newpass"], $pass);
    $updateStmt->execute();
    $message = "Password changed successfully!";
  } else {
    $message = "Password is incorrect.";
  }
}


ini_set('display_errors', 1);ini_set('display_startup_errors', 1);error_reporting(E_ALL);


var_dump($_POST["currentpass"]);


var_dump($_POST);

?>


Tak for hjælpen på forhånd,

Vh SSC
Avatar billede Slater Ekspert
31. oktober 2020 - 14:02 #1
Du har skrevet "currentPass" det ene sted og "currentpass" det andet.
Avatar billede SSC Juniormester
31. oktober 2020 - 14:07 #2
Takke for hjælpen! Det er desværre ikke løsningen,

Notice: Undefined index: currentPass in /Applications/AMPPS/www/BuisnessWorld/Password_change.php on line 46
NULL array(0) { }

vh SSC
Avatar billede SSC Juniormester
31. oktober 2020 - 14:09 #3
Her er andel del af koden,

<!DOCTYPE html>
<html>
<head>
<title>Password Change</title>

</head>
<body>
<h3 align="center">CHANGE PASSWORD</h3>
<div><?php if(isset($message)) { echo $message; } ?></div>
<form method="post" action="Password_change.php" >
Current Password:<br>
<input type="password" name="currentPass"><span id="currentPass" class="required"></span>
<br>
New Password:<br>
<input type="password" name="newPass"><span id="newPass" class="required"></span>
<br>ª
Confirm Password:<br>
<input type="password" name="confirmPass"><span id="confirmPass" class="required"></span>

<button type="submit">Change Password</button>
</form>

</body>
</html>
Avatar billede olsensweb.dk Ekspert
31. oktober 2020 - 14:48 #4
>$con = new mysqli('****', '****, '****', '****');
her mangler en plinger, men det er vist bare opstået da du fjernede db setting


#0
>$updateStmt->bind_param("ss", $_POST["newpass"], $pass);
skulle $pass ikke være $user
Avatar billede SSC Juniormester
31. oktober 2020 - 14:58 #5
Korrekt i forhold til ">$con = new mysqli('****', '****, '****', '****');
her mangler en plinger, men det er vist bare opstået da du fjernede db setting"


Om jeg bruger  pass eller user (med $) giver desværre den samme fejlkode
Avatar billede olsensweb.dk Ekspert
31. oktober 2020 - 15:03 #6
#0
>if ($_POST["currentPass"] == $row["pass"] && $_POST["newPass"] == $row["confirmPass"]) {
har du en collonne i din db der hedder confirmPass

hvis du har må du forklare hvorfor
Avatar billede SSC Juniormester
31. oktober 2020 - 15:05 #7
Ah har jeg ikke, kun kolonne, der hedder pass og user :-)
Avatar billede olsensweb.dk Ekspert
31. oktober 2020 - 16:01 #8
#7
du behøver heller ikke flere, men en id er nok en god ide :)



din code renskrevet

Password_change.php
<?php
session_start();
$con = new mysqli('localhost', 'root', '', 'test');
// $user = "rip"; // test
$user=$_SESSION["user"]; // udkommenteret under test

if ($con->connect_errno) {
    echo "Failed to connect to MySQL: (" . $con->connect_errno . ") " . $con->connect_error;
}
if ($_POST["newPass"] == $_POST["confirmPass"]) {
    $stmt = $con->prepare("SELECT * FROM members WHERE user=? LIMIT 1");
    $stmt->bind_param("s", $user);
// execute
    $stmt->execute();
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        if ($_POST["currentPass"] == $row["pass"]) {
            $updateStmt = $con->prepare("UPDATE members SET pass=? WHERE user=?");
            $updateStmt->bind_param("ss", $_POST["newPass"], $user);
            $updateStmt->execute();
            $message = "Password changed successfully!";
        } else {
            $message = "Password is incorrect.";
        }
    }
} else {
    $message = "de 2 nye password er ikke ens";
}

echo $message;
?>



test tabel
CREATE TABLE `members` (
  `id` int(11) NOT NULL,
  `firstname` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `lastname` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `user` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `pass` varchar(255) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

INSERT INTO `members` (`id`, `firstname`, `lastname`, `user`, `pass`) VALUES
(1, 'rip', 'andemad', 'rip', '147258'),
(3, 'rap', 'and', 'rap', '1234'),
(4, 'rup', 'and', 'rup', '1234');

ALTER TABLE `members`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `members`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
COMMIT;


et forbedrings forslag: hash password
https://www.php.net/manual/en/function.password-hash.php
Avatar billede SSC Juniormester
31. oktober 2020 - 19:34 #9
Tusind tak for hjælpen!
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