Avatar billede beaviz_ Nybegynder
08. marts 2004 - 13:03 Der 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?:

<html>
  <head>
  <title>Titel</title>
  </head>
  <?php function kodeord(){ ?>
  <FORM METHOD="POST" ACTION="<?php echo $PHP_SELF ?>">
  <INPUT TYPE="HIDDEN" NAME="action" VALUE="nytkodeord">
  <table width = "150">
  <TR>
  <TD width="50%">
  <b>E-mail:</b>
  </TD>
  <TD width="50%" align=center>
  <input type="text" name="email" value="<?php echo $email ?>">
  </TD>
  </TR>
  <INPUT TYPE="SUBMIT" VALUE="TILSEND" NAME="send">
  </FORM>

  <?php
  }
  function nyt_kodeord(){

  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;
        }
  ?>

</html>
Avatar billede ullidk Nybegynder
08. marts 2004 - 13:42 #1
Kan umiddelbart ikke se andre problemer end at din if-else funktion mangler tuborg-klammer:

if ($query1 == null)
{
fejl_besked("Din email eksisterer ikke i systemet.");
}
else
{
  $kode = lav_kodeord();
  $md5kode = md5($kode);
....
....
Avatar billede beaviz_ Nybegynder
08. marts 2004 - 13:45 #2
Det er desværre ikke derfor. Om der sættes tuborg klammer der, giver vist også det samme resultat, så vidt jeg ved, når det kun gælder for én linje.
Avatar billede ullidk Nybegynder
08. marts 2004 - 14:03 #3
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']."'");
Avatar billede beaviz_ Nybegynder
08. marts 2004 - 14:13 #4
Ja også det, men den opfatter stadigvæk $query1 til at være null
Avatar billede ullidk Nybegynder
08. marts 2004 - 14:20 #5
Prøv at fjerne "value="......". Er det ikke meningen at bruger selv skal indtaste sin email adresse?
Avatar billede beaviz_ Nybegynder
08. marts 2004 - 14:25 #6
Jo det er rigtigt, men value er sat, i dette tilfælde "nytkodeord", så den kan kaldes i switch metoden.
Avatar billede ullidk Nybegynder
08. marts 2004 - 14:42 #7
Hmm, så er jeg vist løbet tør for forslag...desværre:-(
Avatar billede mccookie Seniormester
08. marts 2004 - 14:43 #8
kunne det være pga. små/store bogstaver?
Avatar billede mccookie Seniormester
08. marts 2004 - 14:44 #9
Jeg har oplevet det samme problem
Avatar billede beaviz_ Nybegynder
09. marts 2004 - 09:47 #10
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?
Avatar billede mccookie Seniormester
09. marts 2004 - 09:53 #11
$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;
Avatar billede beaviz_ Nybegynder
09. marts 2004 - 11:04 #12
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)){...
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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