Avatar billede iceicepepsi Nybegynder
05. januar 2013 - 00:11 Der er 13 kommentarer

forgot password - generer password

Hej eksperten. Jeg kunne godt bruge noget hjælp til at ændre min "forgot password" kode. Lige nu er den lavet sådan at den sender brugerens nuværende password og jeg vil gerne ha' den lavet om sådan at den generere et nyt password og tilsender brugeren. Og jeg kan ikke selv ændre koden så jeg håber at nogen kan hjælpe. :)
if(isset($_POST['recover'])){
    $form = 1;
    $email = $db->EscapeString($_POST['email']);
    $sql = $db->Query("SELECT username,email,password FROM `users` WHERE `email`='".$email."'");
    $recover = $db->FetchArray($sql);
    if($db->GetNumRows($sql) == 0){
        $message = '<div class="msg error">We haven\'t found this email in our database!</div>';
    }else{
        $message = '<div class="msg success">Password was successfully sent to your email address!</div>';
        function escapeAddr($addr) {
    $check = preg_match('/(.*)<(.*)>/', $addr, $a);
    if ($check) $addr = '=?UTF-8?B?'.base64_encode($a[1]).'?= <'.$a[2].'>';
    return $addr;
}
function mail_utf8($to, $subject='Intet emne', $message='', $from='', $type='plain', $cc='', $bcc='')
{
    $from = escapeAddr($from);
    $header = 'From: '.$from.PHP_EOL
            . 'MIME-Version: 1.0'.PHP_EOL
            . 'Content-Type: text/'.$type.'; charset=UTF-8'.PHP_EOL
            . 'X-Mailer: PHP/'.phpversion().PHP_EOL
            . 'Content-Transfer-Encoding: 8bit'.PHP_EOL;
    $header .= PHP_EOL;
    return mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}
$msg = '
<html>
<head>
<style type="text/css">
<!--
@media only screen and (max-device-width: 480px) {#wrapper {width: 100% !important;} }
@media only screen and (max-device-width: 240px) {#wrapper {width: 100% !important;} }
-->
</style>
</head>
<body>
<center>
<div style="max-width:600px;display:block;margin: 20px auto 0px auto;" id="wrapper">
<div class="contentArea" id="contentArea1">
<table cellspacing="0" border="0" cellpadding="0" align="center" width="600" style="max-width:600px; width:600px; background-color: #000000;" id="headerTbl">
<tr>
  <td align="center" valign="middle" width="600" style="line-height: 0">
  <img border="0" src="http://member.wingisites.com/images/logo.png" style="display:block">
  </td>
</tr>
</table>
<style type="text/css"><!-- #subheader a, .subheader a {color: #FF0000 !important;} --></style>
<table cellspacing="0" border="0" cellpadding="0" align="center" style="max-width:600px; width:600px;" id="contentTbl">
<tr>
  <td align="left" valign="middle" width="600" style="padding: 10px 20px; background-color: #0000CC; color: #00FF33;" id="subheader" class="subheader">
  klub wingisites det her det sker
  </td>
</tr>
<tr>
  <td style="background-color: #999999;">
  <table cellspacing="0" border="0" style="max-width:600px; width:600px;" align="center" cellpadding="20" width="600">
  <tr>
    <td>
    <style type="text/css"><!-- #innerTxt a, .innerTxt a {color: #66FF00 !important;} --></style>
      <table  width="100%" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td align="left" valign="top" height="300" id="innerTxt" class="innerTxt" style="color: #FF0000;">
      <font size="5" color="red">Hej: '.$recover['username'].'<br>
      <br>
      Vi har modtaget anmodningen om gendannelse af adgangskoden.
        <br>
        Din adgangskode er: '.base64_decode($recover['password']).'<br>
        <br>
        Med venlig hilsen!<br>
        klub wingisites</font>
        </td>
      </tr>
      </table>
    </td>
  </tr>
  </table>
  </td>
</tr>
</table>
</div>
<table cellpadding="2" cellspacing="0" width="600" align="center">
<tr>
  <td width="150" align="center">
  </td>
  <td width="450" align="center">
  <font size="-1">
  <br><br>
  <b>klub wingisites</b><br>
  Kenneth Hedelund
    postboks 81
  5700 Svendborg<br>
  </font>
  </td>
</tr>
</table>
</div>
</center>
<!-- HubSpot Email Marketing template: "Harvard" version: "1.2" timestamp: 1356449845 -->
</body></html>
';
mail_utf8($recover['email'], 'Your password', $msg, 'admin@wingisites.com', 'html');



<form class="forgot_password<?=($form == 1 ? ' active' : '')?>" method="post">
                        <h3>Forgot Password</h3>
                        <div>
                            <label>Email:</label>
                            <input type="text" name="email" required="required" />
                        </div>
                        <div class="bottom">
                            <input type="submit" name="recover" value="Send reminder" />
                            <a href="#" rel="login" class="linkform">Suddenly remembered? Login here</a>
                            <a href="#" rel="register" class="linkform">You don't have an account? Register here</a>
                            <div class="clear"></div>
                        </div>
                    </form>
Avatar billede kjeldsted Novice
05. januar 2013 - 00:33 #1
Begynd med en funktion der generere passwordet. Dette kan gøres på forskellige måder, men du kan fx. lave en stregn og så finde et tilfældigt tegn i denne.

$str = 'qwertyuiopasdfghjklzxcvbnm1234567890';

$pass += $str[0,strlen($str)] // skal selvfølgelig kører i et loop alt efter det ønskede antal.

Så skal du jo sådan set blot overskrive dette i databasen og så sende det i mailen.
Avatar billede kjeldsted Novice
05. januar 2013 - 00:48 #2
Hov. Der var så ikke rigtigt.

$pass += $str[mt_rand(0,strlen($str))]

Burde det være.
Avatar billede iceicepepsi Nybegynder
05. januar 2013 - 00:50 #3
Hej Kjeldsted. Tak for hjælpen. Har lige 2 spørgsmål:

1. Hvor henne i koden skal jeg implementere dette?
2. Hvad er et loop? (Undskyld hvis jeg spørger dumt)
Avatar billede kjeldsted Novice
05. januar 2013 - 00:59 #4
1: Et af de mest grundlæggende og elementære elementer i programmering. Du skal benytte et for loop: http://php.net/manual/en/control-structures.for.php

Og du skal vel generer passwordet først, dernæst indsætte i database og så maile. Så fx. umiddelbart før du sender mailen.
Avatar billede kjeldsted Novice
05. januar 2013 - 01:00 #5
Hov. Omvendt.

1: Du skal vel generer passwordet først, dernæst indsætte i database og så maile. Så fx. umiddelbart før du sender mailen.

2: Et af de mest grundlæggende og elementære elementer i programmering. Du skal benytte et for loop: http://php.net/manual/en/control-structures.for.php
Avatar billede iceicepepsi Nybegynder
05. januar 2013 - 01:42 #6
jeg har ingen kendskab til php jeg har ikke arbejdet med det før
og kender slet ikke noget til php koder jeg fik bare det script er en ven der ikke vil have mere med det at gøre

kan du ikke kode min kode om?
Avatar billede kjeldsted Novice
05. januar 2013 - 01:47 #7
Kort svar: nej!

Opgaver udfører jeg kun på bestilling. Jeg gider ikke arbejde gratis. Jeg hjælper gerne folk med deres koder, og nu hvor ekspertens princip er "Hjælp til selvhjælp" er det også dette jeg går ud fra. Så hvis indstillingen er at jeg skal servere alt på et sølvfad bliver det ikke herfra du skal regne med en komplet løsning.
Avatar billede iceicepepsi Nybegynder
05. januar 2013 - 02:58 #8
den kode her virker ikke $pass += $str[mt_rand(5,strlen($str))]

får de to fejl her

Tidspunkt: 05-01-2013 02:54:01
Fejl: Tegnkodningen for HTML-dokumentet er ikke deklareret. Dokumentet vil vises med forkerte tegn i visse browserkonfigurationer, hvis dokumentet indeholder tegn uden for US-ASCII. Tegnkodningen for filen skal deklareres i dokumentet eller i transfer-protokollen.
Kildefil: http://klub.klub-wingisites.org/index.php
Linje: 0


Tidspunkt: 05-01-2013 02:54:01
Fejl: Image corrupt or truncated: <unknown>
Kildefil: <unknown>
Linje: 0
Avatar billede olebole Juniormester
05. januar 2013 - 04:19 #9
<ole>

Vi har vist været der før - og jeg har på fornemmelsen, at det ikke er sidste gang: Valider dine dokumenter hos W3C. Det er helt nødvendigt, sålænge du er så grøn i webkode  *o)

/mvh
</bole>
Avatar billede arne_v Ekspert
05. januar 2013 - 04:56 #10
Hvis du kan sende password, saa betyder det at password er gemt ikke hashed.

Det er naeppe en god ide.
Avatar billede arne_v Ekspert
05. januar 2013 - 04:59 #11
en funktion fra lageret:

function genpw($len, $valid) {
    $res = '';
    for($i = 0; $i < $len; $i++) {
        $res .= $valid[rand(0, strlen($valid) - 1)];
    }
    return $res;
}


mt_rand er bedre end rand.
Avatar billede kjeldsted Novice
05. januar 2013 - 11:12 #12
#8
Det dér har da vist ikke meget med PHP at gøre, altså fejlen, så det er vist et langt mere grundlæggende problem i din HTML kunne det tyde på.
Og det SKAL være fikset før at du kan begynde at lave noget at det andet.
Avatar billede olebole Juniormester
05. januar 2013 - 17:07 #13
#12: Yups, alt tyder på, det er den manglende Content-Type-meta, som giver første fejl.

Fejl nummer to tyder på, at et billede indeholder forkert formateret data. Der er ét billede i koden 'logo.png', som viser sig ikke at være et PNG-billede - men en transparent GIF på 1x1 pixel, som er blevet omdøbt.

En markup-validering ville afsløre, at koden mangler en Content-Type-meta - og sikkert også et TITLE-tag (som dog ikke har betydning i forhold til de viste fejl).
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