Gå til innhold

[Løst] eg har et problem med en register.php fil kan noen hjelpe meg?


Anbefalte innlegg

<html>

<h1>Register</h1>

<?php

$action = $_POST['action'];

if ($action == "register") {

/* Dette skjer dersom form-data er sendt, og variabelen action er satt til register */

$fullname = strip_tags($_POST['fullname']);

$username = strip_tags($_POST['username']);

$password = strip_tags($_POST['password']);

$repeatpassword = strip_tags($_POST['repeatpassword']);

$date = date("Y-m-d");

if (isset($fullname) && isset($username) && isset($password) && isset($repeatpassword)) {

if (strlen($username)>25||strlen($fullname)>25) {

echo "Length of username or fullname is too long!";

exit;

}

if (strlen($password)>25||strlen($pasword)<6) {

echo "Password must be between 6 and 25 characters";

exit;

}

echo "success!";

$password = md5($password);

$repeatpassword = md5($repeatpassword);

if($password != $repeatpassword) {

echo "The passwords did not match.";

exit;

} elseif($password == $repeatpassword) {

/* DB tilkobling og input her */

}

}

} elseif(!isset($action) || $action == "") {

/* Dette skjer dersom $action ikke er satt til register, eller er blank */

?>

<form action='register.php' method='POST'>

<input type="hidden" name="action" value="register">

<table>

<tr>

<td>

Your full name:

</td>

<td>

<input type=text' name='fullname'>

</td>

</tr>

<tr>

<td>

Choose a username:

</td>

<td>

<input type=text' name='username'>

</td>

</tr>

<tr>

<td>

Choose a password:

</td>

<td>

<input type=password' name='password'>

</td>

</tr>

<tr>

<td>

Repeat your password:

</td>

<td>

<input type=password' name='repeatpassword'>

</td>

</tr>

</table>

<input type='submit' name='submit' value='Register'>

</form>

</html>

<?php

/* Denne avslutter if_elseif løkken */

}

?>

 

 

 

probleme er at den sier bare ( Password must be between 6 and 25 characters )

når jeg prøver og registrere meg, og hvis jeg fjerner

 

 

if (strlen($password)>25||strlen($pasword)<6) {

echo "Password must be between 6 and 25 characters";

exit;

}

 

så kommer success! opp men den sender ikke noe til databasen

Endret av WALL-E
Lenke til kommentar
Videoannonse
Annonse

Først og fremst: Bruk coda-tags. Slik det er nå er koden nesten uleselig. I tillegg må du fortelle litt hva som faktisk er feil? Hva skjer når du prøver koden din? Får du noen feilmeldinger?

Og hva forventer du at skal skje?

Lenke til kommentar

Slik jeg tolker koden din, vil du at når man submitter formen i nederste del av skriptet, skal biten som setter inn dataene i databasen kjøre, samt utføre enkle if...else... setninger?

 

<html>
<h1>Register</h1>
<?php
$action = $_POST['action'];
if ($action == "register") {
/* Dette skjer dersom form-data er sendt, og variabelen action er satt til register */
$fullname = strip_tags($_POST['fullname']);
$username = strip_tags($_POST['username']);
$password = strip_tags($_POST['password']);
$repeatpassword = strip_tags($_POST['repeatpassword']);
$date = date("Y-m-d");
if (isset($fullname) && isset($username) && isset($password) && isset($repeatpassword)) {
 if (strlen($username)>25||strlen($fullname)>25) {
  echo "Length of username or fullname is too long!";
  exit;
 }
 if (strlen($password)>25||strlen($pasword)<6) {
  echo "Password must be between 6 and 25 characters";
  exit;
 }
 echo "success!";
 $password = md5($password);
 $repeatpassword = md5($repeatpassword);
 if($password != $repeatpassword) {
  echo "The passwords did not match.";
  exit;
 } elseif($password == $repeatpassword) {
 /* DB tilkobling og input her */
 }
}
} elseif(!isset($action) || $action == "") {
/* Dette skjer dersom $action ikke er satt til register, eller er blank */
?>
<form action='register.php' method='POST'>
<input type="hidden" name="action" value="register">
<table>
<tr>
<td>
Your full name:
</td>
<td>
<input type=text' name='fullname'>
</td>
</tr>
<tr>
<td>
Choose a username:
</td>
<td>
<input type=text' name='username'>
</td>
</tr>
<tr>
<td>
Choose a password:
</td>
<td>
<input type=password' name='password'>
</td>
</tr>
<tr>
<td>
Repeat your password:
</td>
<td>
<input type=password' name='repeatpassword'>
</td>
</tr>
</table>
<input type='submit' name='submit' value='Register'>
</form>
</html>
<?php
/* Denne avslutter if_elseif løkken */
}
?>

 

Noe som dette bør fungere som du ønsker det.

  • Liker 1
Lenke til kommentar
  • 1 måned senere...

Du burde ikke bruke IF etter en IF, bruk :

if (strlen($username)>25||strlen($fullname)>25) {
  echo "Length of username or fullname is too long!";
  exit;
 }
 elseif(strlen($password)>25||strlen($password)<6) {
  echo "Password must be between 6 and 25 characters";
  exit;
 }

 

Du hadde også en skrivefeil, password ble stavet med èn "S" istedenfor 2.

 

Burde også vurdere å bruke unix-timestamp istedenfor date for og registrere dato. unix-timestamp er mye mer anvendelig i utregninger om du ønsker og gjøre det senere.

Endret av Wackamole
Lenke til kommentar
  • 2 uker senere...
  • 4 uker senere...

MD5 er en veldig dårlig passordhasher.

 

Hva er en dårlig passordhasher? En som er rask til å hashe. Hvorfor det? Da kan en cracker prøve mange kombinasjoner til han/hun finner den riktige.

 

Derfor bør du bruke en treg passordhasher som bCrypt.

Det er da veldig begrenset hvor lange ord/kombinasjoner vi klarer løse ved bruteforce. Klart bcrypt kan være en fordel å bruke, sett at den itererer over x antall hasher. Men, md5 er ikke dårlig.

- Du kan lett iterere over md5 for å generere en ny hash. Skal litt til for å "konstruere" dupplikater, så tenker at dette er trygt nok. Men, en _lengre_ hash hadde ikke skadet, da md5 kun er 32 lowerchar, og tall. Hadde ikke skadet med 64+/- unicode tegn i hashen, og 256bit kryptering/hashing.

 

function itermd5($pass, $iter) {
 for($i=0; $i < $iter; $i++) {
$pass = md5($pass);
 }
}
$pass = "asdasd";
$hashpw = itermd5($pass, 3);

^ å gjøre dette på alle enkle og korte passord er ikke så dumt, men på lengre, evt veldig avanserte passord alà "a=%#"L*KF;lfhÆ" er helt bortkastet.

Prinsippet fungerer nok bedre med hasher som produserer en hashverdi lengre en kun de 32 enkle tegna som md5 produserer, hvor de også tar i bruk mange flere unicode tegn.

Endret av warpie
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...