08. marts 2004 - 13:03Der er
11 kommentarer og 1 løsning
Php + mysql
Jeg sidder og roder med en side, hvor en bruger skal have mulighed for at få tilsendt et nyt kodeord, hvis det gamle er forsvundet.
Problemet ligger i, at ligegyldigt hvad jeg gør, så får jeg "fejlen": "Din email eksisterer ikke i systemet.", som jeg kun udskriver, hvis mit sql-query == null. Selvom jeg skriver en email-adresse som eksisterer i databasen, så virker det ikke. Jeg kan ligeledes godt udføre det samme query i MySql query analyzer med korrekt resultat. Hvad gør jeg galt?:
function fejl_besked($besked){ echo "<SCRIPT>alert(\"Fejl: $besked\");history.go(-1)</SCRIPT>"; exit; }
function lav_kodeord($len=8) { $chars = "abcdefghijklmnopqrstuvwxyzæøå123456789"; mt_srand( (double) microtime() * 1000000); for ($i=1;$i<=$len;$i++) $out .= $chars[mt_rand(0,(strlen($chars)-1))]; return $out; }
if(empty($_POST['email'])) fejl_besked("Indtast venligst din e-mail!"); if ((!ereg(".+\@.+\..+", $_POST['email'])) || (!ereg("^[a-zA-Z0-9_@.-]+$", $_POST['email']))) fejl_besked("Ugyldig e-mail-adresse!");
include "./common_db.inc"; $link_id = db_connect(); mysql_select_db("bogdvd");
$query1 = mysql_query("select email from kunder where email = '".$_POST['email']."'"); if ($query1 == null) fejl_besked("Din email eksisterer ikke i systemet."); else{ $kode = lav_kodeord(); $md5kode = md5($kode);
$query2 = "update kunder set kodeord = '".$md5kode."' where email = '".$_POST['email']."'"; mail($_POST['email'], "Bog & DVD brugerregistrering", "Du har nu oprettet din bruger hos Bog & DVD.\n\nBruger: ".$_POST['email']."\nDit kodeord er: ".$kode."","FROM: mail@bog-dvd.dk"); } }
switch($_POST['action']){ case "nytkodeord": nyt_kodeord(); break; default: kodeord(); break; } ?>
Har du prøvet at vælge et andet felt i din db end email, når du skal validere om email adressen findes? F.eks: $query1 = mysql_query("select brugernavn from kunder where email = '".$_POST['email']."'");
Det er heller ikke pga. store og små bogstaver. Det går "galt" i disse to linjer: ... $query1 = mysql_query("select navn from kunder where email = '".$_POST['email']."'"); if (!$query1) ... Det er som om, at $query1 aldrig bliver sat til noget, da den altid går ind i if-sætningen. "$_POST['email']" har jeg også testet og det virker fint. Der må da være flere, som har nogle ideer?
$query1 = "mysql_query("select navn from kunder where email = \""; $query1 .= $_POST['email'] $query1 .= "\";
og når du nu retter sætningen skriver du følgende lige efter echo $query1; exit; og se så om det passer med hvad der skal stå. Jeg plejer som oftest at echo sætninger/forespørgelser jeg er i tvivl om og så lave exit;
Jeg har selv fundet ud af løsningen... Jeg blev nødt til at putte mit resultset i et array, før det ville fungere: ...while($query_resultat = mysql_fetch_array($query1)){...
Synes godt om
Ny brugerNybegynder
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.