Avatar billede vind Nybegynder
14. juli 2003 - 21:42 Der er 30 kommentarer og
1 løsning

Fødselsdags-script

Hej Eksperter.

Jeg har en hjemmeside. Den er lavet for et tidligere elevhold på en efterskole. Alle elever har en fødselsdag (SURPRISE hva...:) ) og jeg vil gerne lave et php-script, hvor der på forsiden står "I dag har [navn] fødselsdag, tillykke!". Jeg vil så sætte navne og fødselsdage ind i en tabel, og så skal et script tjekke hvilken dato det er, og om en elev har fødselsdag den pågældende dag.
Jeg ved ikke om det er til at forstå det jeg skriver, men håber I forstår... 
Jeg har flere spørgsmål, da jeg er m e g e t nybegynder i PHP/MySQL. Men jeg tager spørgsmålene hen ad vejen...
Hvordan skal jeg få alle navn og fødselsdage ind i min tabel. Vel via phpmyadmin. Men i hvilket format skal det stå, altså fødselsdatoen...

Jeg er i tvivl om I forstår hvad jeg mener, for det er dælme lidt svært at forklare - så bær over med mig... :)

Hvis der er nogle der har et færdigt script, ville det være enormt fedt, da jeg som sagt ikke er al for fiks til PHP... :)

Mange hilsner fra
Andreas.
Avatar billede ahv Nybegynder
14. juli 2003 - 21:44 #1
navne skal være varchar, fødselsdagen i date, dette format er YYYY-MM-DD

Dasgdato for du med ->

$dagsdato = date("Y-m-d");
Avatar billede taskmgr Nybegynder
14. juli 2003 - 21:45 #2
Lav navnet som varchar(30) og sæt den til primary.
Lav datoen som et timestamp - sæt den evt. til int(9)
Avatar billede ahv Nybegynder
14. juli 2003 - 21:47 #3
taskmgr, date er da kalrt en fordel til en fødselsdag?

men vind, du kan gøre det direkte i et mysql_query

$query = mysql_query("SELECT * FROM tabel WHERE datefelt = CURDATE()");
while ($row = mysql_fetch_array($query)) {
  if ($row['id']) {
    echo "Tillykke med fødselsdagen: ".$row['navn'];
  }
}
Avatar billede taskmgr Nybegynder
14. juli 2003 - 21:48 #4
Eller som ahv skriver... :)

Så henter du med:

$idag = date("Y-m-d");
$res = mysql_query("SELECT navn from din_tabel where dato='$idag' order by navn asc");
while($row=mysql_fetch_array($res)){
  echo $row["navn"]." har fødselsdag idag, tillykke!";
}
Avatar billede taskmgr Nybegynder
14. juli 2003 - 21:49 #5
Jeg er da for hurtig idag :P

ahv: Du har sikkert ret, men hvorfor? :)
Avatar billede ahv Nybegynder
14. juli 2003 - 21:50 #6
Tabellen i din databasen kunne til mit eksempel være ->

CREATE TABLE `elever` (
`id` INT NOT NULL AUTO_INCREMENT ,
`navn` VARCHAR( 50 ) NOT NULL ,
`datefelt` DATE NOT NULL ,
PRIMARY KEY ( `id` )
);
Avatar billede ahv Nybegynder
14. juli 2003 - 21:52 #7
Hov skal skal mit eksempel lige være ->

$query = mysql_query("SELECT * FROM elever WHERE datefelt = CURDATE()");
while ($row = mysql_fetch_array($query)) {
  if ($row['id']) {
    echo "Tillykke med fødselsdagen: ".$row['navn'];
  }
}
Avatar billede vind Nybegynder
14. juli 2003 - 21:54 #8
Okay, tak for jeres meget hurtige svar!!
Nu er der flere forskellige koder, og jeg må indrømme at jeg er lidt forvirret. Er der mon en der vil samle det lidt, og evt. forklare trin for trin hvad jeg skal gøre, så selv en idiot kan forstå det??? :)
Er dælme ikke for stærk i php...

/Andreas.
Avatar billede ahv Nybegynder
14. juli 2003 - 21:56 #9
Din PHP-kode ->

<?php
$con = mysql_pconnect("host","user","pass");
mysql_select_db("db");

$query = mysql_query("SELECT * FROM elever WHERE birthday = CURDATE()");
while ($row = mysql_fetch_array($query)) {
    if ($row['id']) {
        echo "Tillykke med fødselsdagen: ".$row['navn'];
    }
}
?>


Den tabel du skal oprette i PHPMyAdmin ->

CREATE TABLE `elever` (
`id` INT NOT NULL AUTO_INCREMENT ,
`navn` VARCHAR( 50 ) NOT NULL ,
`birthday` DATE NOT NULL ,
PRIMARY KEY ( `id` )
);
Avatar billede vind Nybegynder
14. juli 2003 - 21:58 #10
Okay, tak for det. Det var mere forståeligt... :)
Tabellen, skal jeg gå ind og oprette den manuelt?? Se evt. dette dump: http://www.vinds.dk/skaermdump.jpg .

Men ellers tak fordi I vil bruge lidt tid på at hjælpe mig... :)

/Andreas.
Avatar billede ahv Nybegynder
14. juli 2003 - 22:08 #11
Nej der hvor der står sql kopiere du blot dette ind ->

CREATE TABLE `elever` (
`id` INT NOT NULL AUTO_INCREMENT ,
`navn` VARCHAR( 50 ) NOT NULL ,
`birthday` DATE NOT NULL ,
PRIMARY KEY ( `id` )
);

og trykker udfør
Avatar billede vind Nybegynder
14. juli 2003 - 22:10 #12
Super, det virker.
Men hvor skal jeg fortælle den alle fødselsdagene og navne dertil???

/Andreas
Avatar billede ahv Nybegynder
14. juli 2003 - 22:12 #13
I PHPMyAdmin -> indsæt
Avatar billede ahv Nybegynder
14. juli 2003 - 22:13 #14
Der kan du skrive deres navn og deres fødselsdag, husk dagen skal være i YYYY-MM-DD

f.eks.

1985-08-19
Avatar billede vind Nybegynder
14. juli 2003 - 22:14 #15
Ok, tak fordi du guider mig igennem det! :)
Jeg kan selvfølgelig regne ud, at under "navn" skrives navnet og under "birthday" skriver fødseldagen, men skal der skrives noget under "id"??

/Andreas.
Avatar billede ahv Nybegynder
14. juli 2003 - 22:16 #16
Nej, det udfylder den selv.
Avatar billede vind Nybegynder
14. juli 2003 - 23:05 #17
Nu har jeg siddet og indtastet alle data - 90 i alt, men den kommer med følgende fejl:
"Warning: Supplied argument is not a valid MySQL result resource in "filens navn" on line 6"

Linie 6 er sådan:
while ($row = mysql_fetch_array($query)) {

Ved ikke om I kan se ud af det, hvad fejlen er... :)

Men tak for jeres store hjælp indtil nu, det sætter jeg meget pris på!!!

/Andreas.
Avatar billede ahv Nybegynder
14. juli 2003 - 23:23 #18
Hvordan ser din PHP kode ud?
Avatar billede vind Nybegynder
15. juli 2003 - 11:40 #19
Sådan som du skrev den:

<?php
$con = mysql_pconnect("host","user","pass");
mysql_select_db("db");

$query = mysql_query("SELECT * FROM elever WHERE birthday = CURDATE()");
while ($row = mysql_fetch_array($query)) {
    if ($row['id']) {
        echo "Tillykke med fødselsdagen: ".$row['navn'];
    }
}
?>

/Andreas. :)
Avatar billede ahv Nybegynder
15. juli 2003 - 11:48 #20
Hvilken fejl giver den dig med ->

Sådan som du skrev den:

<?php
$con = mysql_pconnect("host","user","pass");
mysql_select_db("db");

$query = mysql_query("SELECT * FROM elever WHERE birthday = CURDATE()") or die(mysql_error());
while ($row = mysql_fetch_array($query)) {
    if ($row['id']) {
        echo "Tillykke med fødselsdagen: ".$row['navn'];
    }
}
?>
Avatar billede ahv Nybegynder
15. juli 2003 - 11:49 #21
Hov sådan her ->

<?php
$con = mysql_pconnect("host","user","pass");
mysql_select_db("db");

$query = mysql_query("SELECT * FROM elever WHERE birthday = CURDATE()") or die(mysql_error());
while ($row = mysql_fetch_array($query)) {
    if ($row['id']) {
        echo "Tillykke med fødselsdagen: ".$row['navn'];
    }
}
?>

Så burde fejlbeskeden blive lidt anderledes.
Avatar billede vind Nybegynder
15. juli 2003 - 12:52 #22
Okay, ja nu skriver den:

No Database Selected.

Men som jeg ser det, så er databasen elever og birthday valgt, så forstår det ikke helt...

Skal lige huske at spørge. Er det muligt at lave en form for "else", hvor der står "Ingen elever har fødselsdag i dag!"???

/Andreas.
Avatar billede ahv Nybegynder
15. juli 2003 - 12:58 #23
Du skal lige huske at tilpasse dette ->

$con = mysql_pconnect("host","user","pass");
mysql_select_db("db");

db er din database, husk også at udskifte host, user og pass med dine MySQL op lysninger

Hvis den skal isge ingen elever af fødselsdag i dag ->

$query = mysql_query("SELECT * FROM elever WHERE birthday = CURDATE()") or die(mysql_error());
while ($row = mysql_fetch_array($query)) {
    if ($row['id']) {
        echo "Tillykke med fødselsdagen: ".$row['navn']."<br>";
    }
}
if (mysql_num_rows($query) == 0) {
    echo "Ingen elever har fødselsdag i dag";
}
?>
Avatar billede vind Nybegynder
15. juli 2003 - 13:58 #24
Mange tak - det virker bedre nu... :)
Men, har dog lige et enkelt spørgsmål mere. Da jeg indtastede alle data'erne i databasen, skrev jeg jo deres fødselsårstal i feltet "birthday" fx. 1980-09-12

Nu er der tilfældigvis en person der har fødselsdag i dag, men den skriver stadig at "Ingen elever har fødselsdag i dag"...
Har det noget med årstallet at gøre???

/Andreas.
Avatar billede ahv Nybegynder
15. juli 2003 - 14:05 #25
Mig der ikke tænkte mig om året passer selvfølgelig ikke, 2 min så har jeg et nyt eksempel.
Avatar billede ahv Nybegynder
15. juli 2003 - 14:18 #26
$dagsdato = date("m-d");
$query = mysql_query("SELECT * FROM elever WHERE datefelt LIKE '%$dagsdato'") or die(mysql_error());
while ($row = mysql_fetch_array($query)) {
    if ($row['id']) {
        echo "Tillykke med fødselsdagen: ".$row['navn']."<br>";
    }
}
if (mysql_num_rows($query) == 0) {
    echo "Ingen elever har fødselsdag i dag";
}
Avatar billede ahv Nybegynder
15. juli 2003 - 14:18 #27
$dagsdato = date("m-d");
$query = mysql_query("SELECT * FROM elever WHERE birthday LIKE '%$dagsdato'") or die(mysql_error());
while ($row = mysql_fetch_array($query)) {
    if ($row['id']) {
        echo "Tillykke med fødselsdagen: ".$row['navn']."<br>";
    }
}
if (mysql_num_rows($query) == 0) {
    echo "Ingen elever har fødselsdag i dag";
}
Avatar billede taskmgr Nybegynder
15. juli 2003 - 15:38 #28
(ved godt jeg har været væk, men kommer lige med et hint :)

Husk at rette dine data i db'en til formatet date("m-d")
Avatar billede ahv Nybegynder
15. juli 2003 - 15:59 #29
taskmgr -> Behøves ikke i min løsning, som du kan se har jeg indsat en LIKE så den er ligeglad med årstallet.
Avatar billede taskmgr Nybegynder
15. juli 2003 - 16:28 #30
Ohh... havde jeg ik lige set. Du er hurtigst igen :) Det må være varmen...
Avatar billede vind Nybegynder
15. juli 2003 - 18:10 #31
Det er simpelthen perfekt... Nu virker det hele bare, takket være din hjælp!!
Mange tak fordi du blev ved med at hjælpe, i selvom jeg ikke fattede meget til at starte med... :)

Mvh.
Andreas V.
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