2021-02-27, 09:32
  #13
Medlem
Citat:
Ursprungligen postat av webbutvecklaren
La till en array som du kan logga vad som gick fel med användarens försök, och sedan printa ut den.

Försök att alltid ha engelska mer konsistent och mer beskrivande namn i elementen. T.ex. "username" istället för bara "name" eller "password" istället för "pwd", och "login" hellre än "loggaIn".


Här har du en testad och fungerande kod:
Kod:
<?php
$errors 
= [];

if(isset(
$_POST['login'])){
$users = ['abc' => 'volvo''def' => 'bmw''ghi' => 'opel'];

$username = isset($_POST['username']) ? $_POST['username'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';

  if(isset(
$users[$username]) && $password === $users[$username]){
  
header('location: index2.php'); exit;
  }

  
// There were a error
  
if(isset($users[$username])){
  
$errors['password'] = 'Lösenordet är felaktigt';
  }
  else{
  
$errors['username'] = 'Användarnamnet existerar inte';
  }
}   
?>

<!DOCTYPE html>
<!-- 
Får inte if statement i php att bli true?
-->

<html>
  <head>
    <meta charset="UTF-8" lang="en">
    <title>Uppgift 2</title>
  </head>
  <body>
  <h1>Logga in </h1>
  <!-- logga in formulär -->
     <form action="index.php" method="post">
          <input type="text" name="username" placeholder="Användarnamn">
          <input type="password" name="password" placeholder="Lösenord">
          <button type="submit" name="login">Logga in</button>
          <button type="submit" name="SparaNyAnvändare">Spara ny användare</button>

    <?php
      
// Lista alla errors
      
if($errors){ echo '<ul>'; foreach($errors as $err){ echo '<li>'$err .'</li>'; } echo '</ul>'; }

    
?>

      </form>
      
  </body>

Det som krävdes var "header location" i if för att min kod att funka.

När man skapar autentisering gissar jag att det är praxis att samla namn och lösenord i en databas. Men uppgiften är att spara allt i en textfil. Är det klokast att spara namn och lösen i samma textfil eller separerade? Tänker att det kanske blir enklare att loopa igenom namn och lösenord om dessa finns sparade i separerade textfiler?
__________________
Senast redigerad av bosscs2 2021-02-27 kl. 09:35.
Citera
2021-02-27, 11:54
  #14
Medlem
i formuläret finns två knappar. Trycker man på en knapp sker A och trycker man på andra knappen sker B.

Kod:
if(isset($_POST('login')){
        echo 
'button 1';
    } else if (isset(
$_POST('newUser')){
        echo 
'button 2';
    }
    
  <!-- 
logga in formulär -->
      <
form action="" method="post">
          <
input type ="text" name="name" placeholder="Anvandarnamn...">
          <
input type ="password" name="pwd" placeholder="Losenord">
          <
button type ="submit" name="login">Logga in</button>
          <
button type ="submit" name="newUser">Spara ny användare</button>
      </
form

Hur får jag utskriften button 1 och 2 att fungera?
Citera
2021-02-28, 21:42
  #15
Medlem
Det skulle vara hakparanteser i $_POST, d var det som var fel.
Kan någon se varför, efter att användaren loggat in, inte index sidan kör sitt if statement?

Kod:
if(isset($_POST['loggaIn'])){
        
        if(isset(
$_POST['name'])){
        
$utskriftsnamn $POST['name'];
        echo 
'welcome back '.$utskriftNamn;
        };
    } 
Citera
2021-03-01, 00:24
  #16
Medlem
Citat:
Ursprungligen postat av bosscs2
Det skulle vara hakparanteser i $_POST, d var det som var fel.
Kan någon se varför, efter att användaren loggat in, inte index sidan kör sitt if statement?

Kod:
if(isset($_POST['loggaIn'])){
        
        if(isset(
$_POST['name'])){
        
$utskriftsnamn $POST['name'];
        echo 
'welcome back '.$utskriftNamn;
        };
    } 
Du skulle tjäna på att renskriva din kod. Vilket if-statement menar du att det inte körs? Variabeln för utskriftsnamn är onödig IMO, och heter olika varje gång(så det är ju inte samma variabel som det ser ut nu).

Om du har en kodeditor värd namnet så borde den hjälpa dig med sånt här, t.ex att om du markerar ett ord så highlightar den alla andra ställen som det ordet finns på. Eller så markerar den variabler som inte används($utskriftsnamn här) eller inte har fått ett värde innan avläsning($utskriftNamn här).
Citera
2021-03-01, 10:12
  #17
Medlem
Citat:
Ursprungligen postat av Koenigsegg
Du skulle tjäna på att renskriva din kod. Vilket if-statement menar du att det inte körs? Variabeln för utskriftsnamn är onödig IMO, och heter olika varje gång(så det är ju inte samma variabel som det ser ut nu).

Om du har en kodeditor värd namnet så borde den hjälpa dig med sånt här, t.ex att om du markerar ett ord så highlightar den alla andra ställen som det ordet finns på. Eller så markerar den variabler som inte används($utskriftsnamn här) eller inte har fått ett värde innan avläsning($utskriftNamn här).

Koden ovan är Index sidan, den man kommer till efter att ha loggat in, det är inte samma sida som koden innan och därför som jag vill initiera en ny variabel för $användarnamn till $utskriftnamn. När jag försöker printa ut $användarnamn på index sidan får jag felmeddelande att variabeln saknar värde.

Hur når jag en variabel på sida A till sida B? Måste jag använda $_POST[]?
Citera
2021-03-01, 12:04
  #18
Medlem
session_start() binder ihop variabler med fler sidor.
Min nästa fråga, hur gör man om ett formulär har flera submitknappar och beroende på vilken
man väljer skickas vidare beroende på vilken knapp man trycker.

på sidan man ska logga in till, tänker jag:

Kod:
if(isset($_POST['knappA'])){
echo 
'knapp A';
} else if(isset(
$_POST['knappB'])){
echo 
'knapp B';

Citera
2021-03-01, 12:19
  #19
Medlem
Citat:
Ursprungligen postat av bosscs2
Min nästa fråga, hur gör man om ett formulär har flera submitknappar och beroende på vilken man väljer skickas vidare beroende på vilken knapp man trycker.
Det finns ett HTML-attribut för det, formaction:
HTML-kod:
<form action="/submit">
  <input type="submit" value="Submit">
  <input type="submit" value="Go Elsewhere" formaction="/elsewhere">
</form>
Om attributet finns så skriver det över action från <form>, alltså.
Citera
2021-03-02, 19:25
  #20
Medlem
Citat:
Ursprungligen postat av Koenigsegg
Det finns ett HTML-attribut för det, formaction:
HTML-kod:
<form action="/submit">
  <input type="submit" value="Submit">
  <input type="submit" value="Go Elsewhere" formaction="/elsewhere">
</form>
Om attributet finns så skriver det över action från <form>, alltså.

Schysst funktion, här är ett till problem
Kod:
<?php
$hashPassword 
password_hash($myPasswordPASSWORD_DEFAULT);
//Sparar $hashPassword i en array med lösenord.  
$passwordResult password_verify($myPassword$hashPassword);
//Hur matchar jag rätt hash-lösenord i en array?
?>

password_verify($myPassword, $hashPassword); Måste första parametern matcha andra parametern i "hash-format" eller kan första parametern vara "original lösenord"?

Problemet är att $passwordResult = password_verify($myPassword, $hashPassword); måste matcha sina värden mot en array och det är där allt skiter sig.
Citera
2021-03-02, 20:05
  #21
Medlem
Citat:
Ursprungligen postat av bosscs2
password_verify($myPassword, $hashPassword); Måste första parametern matcha andra parametern i "hash-format" eller kan första parametern vara "original lösenord"?
Rtfm. Från dokumentationen för password_verify():
Citat:
Verifies that the given hash matches the given password.
Dvs argument 1 är lösenordet som du vill testa om det är rätt, och argument 2 är hashen som skapats tidigare av password_hash(), och som du hämtat från user-tabellen i databasen.

Citat:
Ursprungligen postat av bosscs2
Problemet är att $passwordResult = password_verify($myPassword, $hashPassword); måste matcha sina värden mot en array och det är där allt skiter sig.
Inget argument till password_verify() är en array, så du måste mena nåt från din kod. Hur ser arrayen ut och hur har du försökt få ut värdena ur den, då?

Inte läge att dela upp det här i olika trådar, btw?
__________________
Senast redigerad av Koenigsegg 2021-03-02 kl. 20:42.
Citera
2021-03-03, 07:42
  #22
Medlem
Citat:
Ursprungligen postat av Koenigsegg
Rtfm. Från dokumentationen för password_verify():
Dvs argument 1 är lösenordet som du vill testa om det är rätt, och argument 2 är hashen som skapats tidigare av password_hash(), och som du hämtat från user-tabellen i databasen.


Inget argument till password_verify() är en array, så du måste mena nåt från din kod.

Ok tack, det var det som var fel, password_verify() saknade en array, lösningen var att deklarera och placera en array inuti en for loop och därigenom jämföra listans alla lösenord inuti password_verify().
Citera
2021-03-03, 13:10
  #23
Medlem
Citat:
Ursprungligen postat av bosscs2
Ok tack, det var det som var fel, password_verify() saknade en array, lösningen var att deklarera och placera en array inuti en for loop och därigenom jämföra listans alla lösenord inuti password_verify().
Så..man kan skriva in vem som helsts lösenord? Eller varför en array med lösenord? Det vanliga är att plocka ut det lösenord som är kopplat till kontot som användaren angett.
__________________
Senast redigerad av Koenigsegg 2021-03-03 kl. 13:15.
Citera
2021-03-03, 13:55
  #24
Medlem
japp den loopar igenom hela listan med alla lösenord för att se om något passar vilket såklart inte är helt optimalt X).

Har nu sparat både userID och lösenord i samma fil för att sedan indexera varje ord men lyckas inte, tror att fgetcsv(); metoden passar ändamålet?

Alltså att $userList blir
admin1, pwd1,
admin2, pwd2,
etc.

Ide 1:
$userList = fgetcsv($file,999,",")

if($userList[i] == $userList[i + 1]){ //Ingen lösning på hur dessa ska matcha och bli true
header "location: index.php";
}

Något på spåret, eller är det blaha?
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in