11. april 2005 - 23:10Der er
21 kommentarer og 1 løsning
Hjælp til bryllupsside.
Hejsa..
Jeg skal giftes her til sommer og i den anledning har jeg lavet en hjemmeside hvor gæsterne kan reserve ønsker!! Mit problem er nu, hvordan gør jeg hvis vi ønsker os 12 MEGET dyre ting, og nogle kun vil reservere 6, hvordan programerer man lige det?? Man skal skrive et antal når man opretter ønsket,men videre derfra er jeg ikke kompetent nok, så alt hjælp modtages!!
Jeg ville oprette ønskerne i en database, hvor du har et felt med hvor mange antal af hver ting i ønsker jer. Når en gæst så siger at vedkommende vil reservere 6 styk og der i alt er 10 trækker du så bare 6 fra. Så der til de næste kun står 4.
Når en bruger reserver et vis antal gemmes reservationerne i en anden tabel, så brugeren kan gå ind og annuller på et senere tidspunkt.
Du kan jo gøre det, så du i en tabel gemmer id,ønske,antal og i en anden tabel ønske_id,antal,navn - så kan man nemt finde ud af, om alle af det aktuelle antal er valgt.
Nu ved jeg ikke om een anden sidder og koder på det nu :) Men jeg vil spørge dig (Frontview) om du gider at sende mig en mail (da det ikke er offentlige tilgængelig, kan det ikke foregå her på sitet)
Kunne du ikke oprette en tabel 'oensker' med felterne: id, titel, beskrivelse, reserveret.
titel og beskrivelse er bare info til gæsterne. reserveret kunne så være NULL hvis ingen har lagt billet ind på det ønske, ellers vil reserveret være navnet/id'et på den person som har reserveret det.
Hvis du så har 4 ens ting, så laver du bare 4 rækker i tabellen, så folk kan reserverer det een for een. (Man kan argumenterer om dette er elegant, men det er simpelt og ligetil at kode - og hvis du ikke er så erfaren i php - så er dette da en mulighed).
Ellers, hvordan havde du (visuelt) forestille dig det skulle virke?
Tja, som det er nu så kan en gæst reservere et ønske, og nå dette er gjort er der ikke andre der kan reservere det. Havde så tænkt på om man kunne lave det sådan at man kunne reservere indtil at antallet var nede på 0.
Lad os sige at der er 6 som antal. så der f.eks kom til at stå: 2 er reserveret af Henning 4 er reserveret af Knud
så skal det være sådan at man IKKE kan reservere videre
Er det så ikke bare at oprette to tabeller som cypermann foreslår?
-- klip
CREATE TABLE `oensker` ( `id` int(11) NOT NULL auto_increment, `titel` varchar(64) NOT NULL default '', `beskrivelse` text NOT NULL, `antal` smallint(6) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=2 ;
INSERT INTO `oensker` VALUES (1, 'Te-kopper', 'Tekopper til god te', 4);
CREATE TABLE `reservation` ( `id` int(11) NOT NULL auto_increment, `oenske_id` int(11) NOT NULL default '0', `person` varchar(64) NOT NULL default '', `antal` smallint(6) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=3 ;
INSERT INTO `reservation` VALUES (1, 1, 'Morten', 2); INSERT INTO `reservation` VALUES (2, 1, 'Peter', 1);
-- klip
Når så du skal vise en status kan du så bruge SQL'en:
-- klip SELECT o.titel, o.beskrivelse, o.antal, sum(r.antal) as reserveret FROM oensker o, reservation r WHERE r.oenske_id = o.id GROUP BY r.oenske_id ORDER BY o.title -- klip
til at få en oversigt over hvor mange der ønskes og hvor mange der er reserveret
Så er det jo par et spørgsmål om at trække de to tal fra (antal-reservationer) - hvis der kommer et positivt tal, så kan man stadig reserverer den pågældende gave.
Hvis du kun vil vise hvad der kan reserveres:
-- klip SELECT o.titel, o.beskrivelse, o.antal, sum(r.antal) as reserveret FROM oensker o, reservation r WHERE r.oenske_id = o.id GROUP BY r.oenske_id HAVING o.antal-reserveret > 0 ORDER BY o.titel -- klip
Hvis du skal se en oversigt så: -- klip SELECT o.id,o.titel, o.beskrivelse, r.person, r.antal FROM oensker o, reservation r WHERE r.oenske_id = o.id -- klip
I PHP koden kan du så lave et loop, så den kun skrive o.titel og o.beskrivelse ud een gang. fx .. $old_id = null; while($row = mysql_fetch_assoc($res)) { if($old_id != $row['id'] ) { print "<h1>{$row['titel']}</h1>"; print "<blockquote>{$row['beskrivelse']}</blockquote>"; $old_id = $row['id']; }
if($_POST['reserver_oenske']) { if($_POST['reserver']) { mysql_query("REPLACE INTO `res_oensker` (oenskeid, userid,res_antal) VALUES ('".$_POST['oenskeid']."', '".$_SESSION['userid']."','".$_POST['antal']."')"); } else { mysql_query("DELETE FROM `res_oensker` WHERE oenskeid='".$_POST['oenskeid']."' AND userid='".$_SESSION['userid']."'"); } header("Location: ?page=oensker"); }
Som det er nu taster man det antal ind som man ønsker at reservere, det udskriver den også fint nok. Men jeg kan ikke finde ud af det når man skal kunne reservere hvis der kun er reseveret f.eks 6 ud af 18.
Jeg har et antal som står i 'ønsker' det er det antal vi ønsker os! så er der 'res_antal', det er det antal folk taster ind når de reserverer. Lad os nu antage at der er 12 som antal, så er der nogen der reserverer 6, så skal det være muligt at se at 6 stk er reserveret og reservere det sidste antal. Når antallet så er oppe på 12 så skal man ikke kunne se reservereknappen mere.
Det er jo bare tage den ene af de SQL'er jeg kom med og rette det til dine tabel/felter
SELECT o.titel, o.beskrivelse, o.antal, sum(r.antal) as reserveret
SELECT (felter du nu bruger), o.antal, sum(ro.res_antal) as reserveret FROM oensker o, res_oensker ro WHERE r.oenskeid = o.id GROUP BY r.oenskeid
i dit while laver du så: while($row = mysql_.. ) { $ledige = $row['antal'] - $row['reserveret']; if( $ledige > 0 ) { // lav reservér knap. Der kan vælges fra 1 til $ledige } }
Håber denne virker som du ønsker. <?php function WriteOensker($limit = 0) { echo "<table cellpadding=\"0\" cellspacing=\"0\">"; echo "<tr>";
$data = mysql_query(" SELECT o.*, sum(ifnull(ro.res_antal,0)) as reserveret, max(ifnull(ro.userid={$_SESSION['userid']},0)) as ejer FROM `oensker` o LEFT JOIN res_oensker ro ON (ro.oenskeid = o.id) GROUP BY o.id ORDER BY navn LIMIT ".$limit.", 2") or die(mysql_error());
for($i=0;$i<2;$i++) { $row = mysql_fetch_assoc($data); if($row['id']) { echo "<td valign=\"top\">"; if($row['billede'] == NULL) echo "<img src='images/nobruger.jpg'>"; else { echo "<a href=\"java script:popimage('images/uploaded/".$row['billede']."','');\" title=\"Tryk for større billede\" ><img style=\"border:1px solid #35302A;\" src=\"images/uploaded/".$row['billede']."\" width=\"98\" height=\"131\" align=\"left\"></a>"; } echo "<div style=\"padding:0px 0px 0px 2px;height:133px;width:274px;position:relative;top:0px;left:-2px;\">"; echo "<table cellpadding=\"0\" cellspacing=\"0\" style=\"width:172px;\">"; echo "<tr><td style=\"height:18px;\"><b>".$row['navn']."</b></td></tr>"; #echo "<tr><td>Antal:".$row['antal']."</td></tr>"; echo "<tr><td>Antal:".($row['antal']-$row['reserveret']). " tilbage</td></tr>"; echo "<tr><td style=\"border-bottom:1px solid black;\">".$row['indhold']."</td></tr>"; if($_SESSION['status'] == 3) { // Hvis der er reserveret noget - så vis hvem og hvormeget if( $row['reserveret'] > 0 ) { $reserved = mysql_query("SELECT * FROM res_oensker, gaester WHERE gaester.id = res_oensker.userid AND res_oensker.oenskeid = '".$row['id']."'");
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.