Avatar billede tjenester Nybegynder
16. august 2001 - 09:53 Der er 21 kommentarer

Indput af en email adresse i forskellige databaser

Hej
jeg kunne godt tænke mig at få lavet en side som denne
http://www.1klik.dk/nyhedsbrev/udvaelg.asp

hvor email adressen bliver lagt i forskellige databaser alt efter hvad man har afkrydset
vi skal bruge checkbox til 5 forskellige databaser
de kan bare kaldes tabel1
tabel2
Nogen der har lyst til at se på det ?
Lars

Avatar billede limemedia Nybegynder
16. august 2001 - 09:57 #1
Skal det være forskellige databaser ? hvad med en måde hvor
1) Vi gemmer email adressen
2) Vi gemmer hvilke \"breve\" man ønsker at være med i...

sidder og overvejer en bitvariabel som løsning, men den går nok ikke i mySQL...
Avatar billede gnyff Nybegynder
16. august 2001 - 10:00 #2
Kan du ikke gøre det sådan:

if(chekbox1==1){
$conn = mysql_connect(\"host\",\"bruger\",\"pass\")or die(mysql_error());
mysql_select_db(\"database\")or die(mysql_error());
mysql_query(\"insert into 1 (email)values($email)\");
mysql_close($conn);
}
if(chekbox2==2){
$conn = mysql_connect(\"host\",\"bruger\",\"pass\")or die(mysql_error());
mysql_select_db(\"database2\")or die(mysql_error());
mysql_query(\"insert into 2 (email)values($email)\");
mysql_close($conn);
}
if(chekbox3==3){
$conn = mysql_connect(\"host\",\"bruger\",\"pass\")or die(mysql_error());
mysql_select_db(\"database3\")or die(mysql_error());
mysql_query(\"insert into 3 (email)values($email)\");
mysql_close($conn);
}

Avatar billede alvion Nybegynder
16. august 2001 - 10:01 #3
Du kommer nok til at lave det selv, men jeg vil give hjælp med på vejen (det er hele eksperten.dk\'s formål: At hjælpe folk til at hjælpe sig selv).

Jeg vil foreslå at du kun gemmer e-mail adressen 1 gang

Du laver en tabel med e-mail adresser:

abonnent
-------------
id INT(11) NOT NULL AUTO_INCREMENT,
email VARCHAR(60) NOT NULL,
PRIMARY KEY (id)

Så laver du en med de forskellige nyhedskategorier (på den måde kan du nemt tilføje nye kategorier)

kategori
-------------
id INT(11) NOT NULL AUTO_INCREMENT,
navn VARCHAR(60) NOT NULL,
PRIMARY KEY (id)

Til sidst laver du en tabel, hvor du kan forbinde disse to - så ved du, hvilke email adresser, der abonnerer på hvilke kategorier:

email_kategori
------------------
email_id INT(11) NOT NULL,
kategori_id INT(11) NOT NULL,
PRIMARY KEY (email_id, kategori_id)

Avatar billede limemedia Nybegynder
16. august 2001 - 10:05 #4
alvion >> til den løsning og tre tabeller... hmm, ville hellere lege med én tabel der også giver tjenester et nemt overblik over hvem der modtager hvad.

altså en tabelstruktur som
CREATE TABLE newsletter (
  email varchar(64) NOT NULL default \'\',
  lettera tinyint(1) unsigned NOT NULL default \'0\',
  letterb tinyint(1) unsigned NOT NULL default \'0\',
  letterc tinyint(1) unsigned NOT NULL default \'0\',
  letterd tinyint(1) unsigned NOT NULL default \'0\',
  lettere tinyint(1) unsigned NOT NULL default \'0\',
  PRIMARY KEY  (email)
)

din version er mere \"korrekt\" men ikke en jeg vil anbefale i den her skala.
Avatar billede limemedia Nybegynder
16. august 2001 - 10:08 #5
jeg bliver sikkert slagtet for ovenstående - det er ikke \"skaleringsvenligt\" men alligevel
Avatar billede tjenester Nybegynder
16. august 2001 - 10:09 #6
Hej

er det bedst at have kun en database hvor de er afkrydset for de forskellige nyhedsbreve ?
vi har allerede nu
2 tabeller hvor i der ligger en del email adresser
Lars
Avatar billede tjenester Nybegynder
16. august 2001 - 10:12 #7
hej
det skal bruges på
http://www.e-pressen.dk
hvor vi regner med at nå op på
ca 50000 email adresser hvilket vil sige at det bliver en ret stor database
så det skal nok være en løsning der skal kunne håndtere mange emails
Lars
Avatar billede alvion Nybegynder
16. august 2001 - 10:16 #8
Hov! Sidste tabel skulle ha\' været

abonnent_kategori
------------------
abonnent_id INT(11) NOT NULL,
kategori_id INT(11) NOT NULL,
PRIMARY KEY (email_id, kategori_id)
Avatar billede limemedia Nybegynder
16. august 2001 - 10:17 #9
en funktion til addering af mails kunne se sådan ud
<?php
    function add_email($email, $lettera, $letterb, $letterc, $letterd, $lettere) {
        # First check if user is already with us
        $email = strtolower($email);
        $sql = mysql_query(\"SELECT email FROM newsletter WHERE email=\'$email\'\");
        if (!mysql_num_rows($sql)) {
            # Add new email
            mysql_query(\"INSERT INTO newsletter (email, lettera, letterb, letterc, letterd, lettere) VALUES (\'$email\', $lettera, $letterb, $letterc, $letterd, $lettere)\");
        } else {
            # Update existing account
            mysql_query(\"UPDATE newsletter SET lettera=$lettera, letterb=$letterb, letterc=$letterc, letterd=$letterd, lettere=$lettere WHERE email=\'$email\'\");
        }
    }
?>

$lettera -> e skal være booleans med enten 0 eller 1
utestet

Funktionen er hurtig og kan sagtens håndtere 50.000 mails. Spørgsmålet er om du udvider antallet af nyhedsbreve skal du enten ændre kode eller tilføje en enkelt værdi. En join løsning som alvions er god skalerbar, men kræver joins og er lidt langsommere. Min er hurtigere, men ikke skalerbar...

/ LJ
Avatar billede alvion Nybegynder
16. august 2001 - 10:19 #10
ljweb -> Jeg korser mig! :-)

Det er ikke specielt meget \"overkill\" at bruge min løsning. Den giver også den fordel at din kode bliver mere overskuelig (IMHO). Hvis man nu skal vise hvilke nyhedsbreve en given bruger abonnerer på, ville koden til din struktur se således ud:

$sql = \"select * from newsletter where email = \'$email\'\";
$res = mysql_query($sql) or die(mysql_error());
if ($row = mysql_fetch_assoc($res)) {
  echo \"E-mail adresse: \" . $row[\"email\"] . \"<br>\";
  echo \"Nyhedsbrev 1: \" . ($row[\"lettera\"] == 1 ? \"Ja\" : \"Nej\") . \"<br>\";
  echo \"Nyhedsbrev 2: \" . ($row[\"letterb\"] == 1 ? \"Ja\" : \"Nej\") . \"<br>\";
  echo \"Nyhedsbrev 3: \" . ($row[\"letterc\"] == 1 ? \"Ja\" : \"Nej\") . \"<br>\";
  echo \"Nyhedsbrev 4: \" . ($row[\"letterd\"] == 1 ? \"Ja\" : \"Nej\") . \"<br>\";
  echo \"Nyhedsbrev 5: \" . ($row[\"lettere\"] == 1 ? \"Ja\" : \"Nej\") . \"<br>\";
}

Med min løsning:

$sql = \"select * from abonnent where email = \'$email\'\";
$res = mysql_query($sql) or die(mysql_error());
if ($row = mysql_fetch_assoc($res)) {
  echo \"E-mail adresse: \" . $row[\"email\"] . \"<br>\";
  $sql = \"select kategori.*, abonnent_kategori.abonnent_id \";
  $sql .= \"from kategori left join abonnent_kategori \";
  $sql .= \"on kategori.id = abonnent_kategori.kategori_id\";
  $res2 = mysql_query($sql) or die(mysql_error());
  while ($row2 = mysql_fetch_assoc($res2))
    echo ${row2[\"navn\"]}: \" . (empty($row2[\"abonnent_id\"]) ? \"Nej\" : \"Ja\") . \"<br>\";
}
Avatar billede alvion Nybegynder
16. august 2001 - 10:20 #11
Min kode bliver ikke større selvom der tilføjes yderligere 5 kategorier
Avatar billede limemedia Nybegynder
16. august 2001 - 10:24 #12
alvion >> kan kun give dig ret i metoden... men igen, leftjoin i en mySQL har aldrig været hurtig... løsningen er lille og det vil alligevel ikke kunne mærkes...

Det ville være dejligt at kunne lidt $var&0x1 i en mySQL
Avatar billede alvion Nybegynder
16. august 2001 - 10:38 #13
Definér \"aldrig været hurtig\"

http://www.sarum.dk/info/performancetest.htm
Avatar billede tjenester Nybegynder
16. august 2001 - 10:42 #14
Hej ljweb
hvordan skal databasen sættes op i dit eksempel ?
lars
Avatar billede limemedia Nybegynder
16. august 2001 - 10:42 #15
alvion >> kan ikke komme ind på siden eller www.sarum.dk ! :(
Avatar billede limemedia Nybegynder
16. august 2001 - 10:42 #16
indsæt følgende i phpMyAdmin

CREATE TABLE newsletter (
  email varchar(64) NOT NULL default \'\',
  lettera tinyint(1) unsigned NOT NULL default \'0\',
  letterb tinyint(1) unsigned NOT NULL default \'0\',
  letterc tinyint(1) unsigned NOT NULL default \'0\',
  letterd tinyint(1) unsigned NOT NULL default \'0\',
  lettere tinyint(1) unsigned NOT NULL default \'0\',
  PRIMARY KEY  (email)
)
Avatar billede alvion Nybegynder
16. august 2001 - 11:47 #17
ljweb -> Hvad??!? Får du nogle fejl eller hvad sker der?

Prøv at ping\'e eller lave nslookup - du skulle gerne få ip: 195.54.81.90
Avatar billede limemedia Nybegynder
16. august 2001 - 11:52 #18
alvion >>
C:\\>ping www.sarum.dk

Pinging www.sarum.dk [195.54.81.90] with 32 bytes of data:

Reply from 195.54.81.90: bytes=32 time=371ms TTL=233
Reply from 195.54.81.90: bytes=32 time=350ms TTL=233
Reply from 195.54.81.90: bytes=32 time=351ms TTL=233
Reply from 195.54.81.90: bytes=32 time=371ms TTL=233

Ping statistics for 195.54.81.90:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 350ms, Maximum =  371ms, Average =  360ms

C:\\>

men den står blot og loader på din side men der sker intet... Husk jeg sidder i den anden ende af verden, men jeg har ikke problemer med andre danske sites !

Ps. min forbindelse er en 1.5m/sec ADSL forbindelse... bolden ligger vist ikke begravet det !
Avatar billede alvion Nybegynder
16. august 2001 - 12:07 #19
Det var sgu skummelt... Der er ikke andre der har problemer med at komme ind.
Avatar billede limemedia Nybegynder
16. august 2001 - 12:16 #20
alvion >> hvis det kan hjælpe på humøret har www.computerworld.dk samme problem, men ikke andre...
Avatar billede zeno Nybegynder
28. august 2002 - 19:16 #21
Jeg går efter ljweb løsning
tak til alle
undskyld det sene svar
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