Avatar billede siredwarddk Nybegynder
15. marts 2004 - 12:19 Der er 9 kommentarer og
2 løsninger

Check for email i database

Hej. Da jeg er meget ny i SQL har jeg indtil nu været nødsaget til kun at bruge andres "scripts" på min hjemmeside og det har også fungeret meget fint. Jeg har for nyligt installeret et newsletter script hvor folk kan tilmelde sig mit nyhedsbrev.

Nu vil jeg imidlertidigt gerne udvide det lidt. Min ide er at sektioner af min side kun skal være tilgængelige hvis man er medlem af min nyhedsliste. Det jeg har brug for er en lille form hvor den besøgende kan indtaste sin email adresse. Derefter skal den søge i min database for at se om emailen ligger der. Hvis ja, skal den sende til een side (f.eks. videre til den sektion brugeren ønskede at se i første omgang), hvis den ikke er der, skal den sende brugeren til en anden side (f.eks. en side hvor han kan tilmelde sig nyhedsbrevet). Hvis der er nogen der kan hjælpe mig med det ville jeg være dybt taknemmelig :).

Den tabel som den skal lede efter email adressen hedder "pmnl_address".

På forhånd tak
      Lauge Jepsen
Avatar billede googolplex Novice
15. marts 2004 - 12:26 #1
http://www.showsource.dk/php/?list=Login

Der kan du finde det du søger :)
Avatar billede siredwarddk Nybegynder
15. marts 2004 - 12:47 #2
Det virker altsammen temmeligt kompliceret, med password og alt muligt. Det jeg leder efter er egentligt bare et script der tager en indtastet email adresse og siger:

1] Hvis den findes i tabellen, gå til "side1.htm"
2] Hvis den ikke findes i tabellen, gå til "side2.htm"

Tilmeldingen har jeg styr på. Men ellers tak.

Mvh Lauge Jepsen
Avatar billede muddi Praktikant
15. marts 2004 - 13:03 #3
// Nedenstående skal muligvis rettes til $_POST['indtastet_email']
$indtastet_email = $_GET['indtastet_email'];

// Åben forbindelse til db her!
$result = mysql_query("SELECT email FROM pmnl_address WHERE email = '$indtastet_email'");

if($succes = mysql_result($result, 0))
{
    header("Destination: godkendt.htm");
    exit;
}
else
{
    header("Destination: ikkegodkendt.htm");
    exit;
}

Det er ikke afprøvet og du skal selv huske at åbne en forbindelse til mysql med mysql_connect og mysql_select_db. Desuden skal feltet email rettes til feltets navn i din db.
Avatar billede siredwarddk Nybegynder
15. marts 2004 - 15:43 #4
Ok, den skriver:

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /customers/toprankbusiness.com/toprankbusiness.com/httpd.www/test.php on line 18

Warning: Cannot add header information - headers already sent by (output started at /customers/toprankbusiness.com/toprankbusiness.com/httpd.www/test.php:9) in /customers/toprankbusiness.com/toprankbusiness.com/httpd.www/test.php on line 25


Som sagt jeg er ikke særlig smart til det her. Feltet hedder bare "email". Men jeg ved heller ikke hvordan jeg får email adressen fra en form (jeg går ud fra at det er den "indtastet_email" står for) over til scriptet.

Mvh Lauge Jepsen
Avatar billede muddi Praktikant
15. marts 2004 - 15:53 #5
Du laver en formular på en side, som har et felt der hedder "indtastet_email". Formularen skal have method="get", og action skal føre til dit script.

Har du husket at tilpasse scriptet?
Der hvor der står //åben forbindelse her, der skal du indsætte din kode, der opretter forbindelse til databasen, hvis du ikke i forvejen har en forbindelse.

Forbindelsen åbner du sådan her:

mysql_connect("host", "brugernavn", "password");
mysql_select_db("navnpaadb");
// og her kører din kode så ...

Det andet problem med at headeren er afsendt, får du fordi du ikke har placeret koden der kontrollerer mod databasen, øverst i scriptet.

Headers skal nemlig altid sendes inden der genereres output til browseren!!! Der må ikke engang være en blanktegn der bliver sendt inden du gør det.

Hvis du ikke har mulighed for at placere scriptet aller øverst på din side, så findes der alligevel en løsning, nemlig at bruge output-bufferig (ob-funktionerne i php).

Skriv hvis du ikke har forstået hvad jeg mener :o)
Avatar billede siredwarddk Nybegynder
15. marts 2004 - 16:26 #6
Ok. Nu har jeg lavet følgende:

1. Side - "test.php"

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Check email</title>
</head>

<body>

<form method="GET" action="checkemail.php">
<h5>Email
<input type="text" name="indtastet_email" style="width:90px;" >
</h5>
<input type="submit" value="Next">



</body>
</html>


2. Side - "checkemail.php"

<?php
$indtastet_email = $_GET['indtastet_email'];

$conn = mysql_connect("localhost", "toprankbusiness", "XXXXXXXXX");
mysql_select_db("toprankbusiness");

$result = mysql_query("SELECT email FROM pmnl_address WHERE email = '$indtastet_email'");

if($succes = mysql_result($result, 0))
{
    header("Destination: godkendt.htm");
    exit;
}
else
{
    header("Destination: ikkegodkendt.htm");
    exit;
}

mysql_close($conn);
?>



Men fejlen er nu:

Warning: Unable to jump to row 0 on MySQL result index 2 in /customers/toprankbusiness.com/toprankbusiness.com/httpd.www/checkemail.php on line 9

Warning: Cannot add header information - headers already sent by (output started at /customers/toprankbusiness.com/toprankbusiness.com/httpd.www/checkemail.php:9) in /customers/toprankbusiness.com/toprankbusiness.com/httpd.www/checkemail.php on line 16


Mvh Lauge Jepsen

P.S.: Jeg fattede ikke helt det med headeren...

P.P.S.: Jeg sætter stor pris på din tålmodighed :)
Avatar billede siredwarddk Nybegynder
15. marts 2004 - 16:33 #7
øøh. opdagede lige at fejlen nu kun kommer hvis email adressen ikke er i databasen, ellers får jeg bare en tom side. Den sender den altså ikke videre ...
Avatar billede muddi Praktikant
15. marts 2004 - 16:38 #8
Nu har jeg afprøvet det :o)

<?php
$indtastet_email = $_GET['indtastet_email'];

$conn = mysql_connect("localhost", "USER", "XXXXXX");
mysql_select_db("test");

$result = mysql_query("SELECT email FROM pmnl_address WHERE email = '$indtastet_email'");

if($succes = @mysql_result($result, 0))
{
    header("Location: godkendt.htm");
    exit;
}
else
{
    header("Location: ikkegodkendt.htm");
    exit;
}

mysql_close($conn);
?>

Det virkede fint. Jeg har ændret lidt i det :o) Små bugs!
Du skal lige rette det til igen (brugernavn, password osv.).
Avatar billede muddi Praktikant
15. marts 2004 - 16:39 #9
header("Destination: ...
skulle være
header("Location: ...

og der blev tilføjet en @-operator for at undertrykke fejlmeldinger.
Avatar billede siredwarddk Nybegynder
15. marts 2004 - 16:41 #10
Muddi du er min helt, mange tak :D
Avatar billede muddi Praktikant
15. marts 2004 - 16:47 #11
Det var så lidt :o) Tak for point!
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
Computerworld tilbyder specialiserede kurser i database-management

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