Avatar billede frontview Nybegynder
11. april 2005 - 23:10 Der 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!!

Håber I forstår spørgsmålet.

På forhånd tak

MVH. Brian Jørgensen & Sara Svensson
Avatar billede hyberpreprocessor Nybegynder
11. april 2005 - 23:13 #1
side ?
kode ?
struktur ?
Avatar billede Slettet bruger
11. april 2005 - 23:13 #2
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.
Avatar billede barklund Nybegynder
11. april 2005 - 23:13 #3
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.
Avatar billede frontview Nybegynder
11. april 2005 - 23:32 #4
Nogen der kan komme med et eksempel med kodestump??
Avatar billede dennismp Nybegynder
11. april 2005 - 23:50 #5
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)
Avatar billede barklund Nybegynder
11. april 2005 - 23:53 #6
I så fald skal spørgsmålet lukkes og pointene gå tilbage - men jeg ser nu intet argument for ikke at lave det herover.

Dog vil jeg gerne se, hvad du (frontview) har lavet - så kan vi andre komme med forslag til at udvide det - det er den mest logiske fremgangsmåde :)

--
Morten Barklund
Avatar billede dennismp Nybegynder
12. april 2005 - 00:06 #7
Barlund; Det har ikke noget med hans spørgsmål at gøre - mere den situation han er i (skal giftes). Så spørgsmålet skal ikke ses som lukket :)
Avatar billede barklund Nybegynder
12. april 2005 - 00:09 #8
dennismp, haha, det er helt i orden - den del fangede jeg overhovedet ikke :D
Avatar billede dennismp Nybegynder
12. april 2005 - 00:28 #9
Ang. spørgsmålet.

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?
Avatar billede frontview Nybegynder
12. april 2005 - 01:22 #10
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

http://www.sb-bryllup.dk/index1.php
Bruger: Gæst
Pass: 123
Avatar billede barklund Nybegynder
12. april 2005 - 01:43 #11
Hvilket script har du lavet indtil videre?
Avatar billede pulz4r Nybegynder
12. april 2005 - 09:16 #12
cypermann >
Jeg ville sgu have gjort det på samme måde!
Evt. lavet et online redigerings system, eller sådan noget!
Avatar billede dennismp Nybegynder
12. april 2005 - 10:00 #13
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'];
  }

  print "{$row['person']}: {$row['antal']} stk.<br />";
}
Avatar billede frontview Nybegynder
12. april 2005 - 12:21 #14
function WriteOensker($limit = 0) {
    echo "<table cellpadding=\"0\" cellspacing=\"0\">";
    echo "<tr>";
    $data = mysql_query("SELECT * FROM `oensker` ORDER BY navn LIMIT ".$limit.", 2");
    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 style=\"border-bottom:1px solid black;\">".$row['indhold']."</td></tr>";
           
            if($_SESSION['status'] == 3) {
                $reserved = mysql_query("SELECT *  FROM res_oensker, gaester WHERE gaester.id = res_oensker.userid AND res_oensker.oenskeid = '".$row['id']."'");
                while($res = mysql_fetch_assoc($reserved)) {
                    $reserveret = $res['navn'].", ".$reserveret;
                    $res_antal = $res['res_antal'].", ";
                }
                if($reserveret && $res_antal ) {
                    echo "<tr><td style=\"border-bottom:1px solid black;\" valign='bottom'>".substr($res_antal, 0, -2)." er reserveret af:<br> ".substr($reserveret, 0, -2)."</td></tr>";
                }
                $reserved = mysql_query("SELECT * FROM res_oensker,oensker WHERE oenskeid='".$row['id']."' AND userid='".$_SESSION['userid']."'");
                $res = mysql_fetch_assoc($reserved);
                echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">";
                echo "<input type=\"hidden\" name=\"oenskeid\" value=\"".$row['id']."\">";
                if($res['userid']) {
                    echo "<tr><td style=\"border-bottom:1px solid black;\">Slet: <input type=\"submit\" name=\"reserver_oenske\" value=\"Slet\"></td></tr>";
                } else {
                    if(!$reserveret) {
                        echo "<tr><td style=\"border-bottom:1px solid black;\">Reserver: <input style=\"border:0;\" type=\"checkbox\" name=\"reserver\" checked> Antal:<input type='text' name='antal' > <input type=\"submit\" name=\"reserver_oenske\" value=\"Reserver\"></td></tr>";
                    }
                }
                echo "</form>";
                unset($reserveret);
            }
           
            echo "</table>";
            echo "</div>";
            echo "</div>";
            echo "</td>";
            if($i == 0) {
                echo "<td style=\"width:20px;\"></td>";
            }
        }
    }
    echo "</tr>";
    echo "</table><br>";
    if($row['id']) {
        WriteOensker(($limit+2));
    }
}

og til at sætte ind i databasen

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.
Avatar billede dennismp Nybegynder
12. april 2005 - 12:58 #15
hvordan ser tabellerne ud?
Avatar billede frontview Nybegynder
12. april 2005 - 13:14 #16
CREATE TABLE `oensker` (
  `id` int(11) NOT NULL auto_increment,
  `navn` tinytext NOT NULL default '0',
  `antal` tinytext NOT NULL default '',
  `indhold` longtext NOT NULL default '0',
  `billede` tinytext NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=4 ;


CREATE TABLE `res_oensker` (
  `oenskeid` int(11) NOT NULL default '0',
  `userid` int(11) NOT NULL default '0',
  `res_antal` int(11) NOT NULL default '0',
Avatar billede dennismp Nybegynder
12. april 2005 - 16:35 #17
"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."

Hvad er det du har problemer med? er det at finde ud af hvor mange der er tilbage, der kan reserveres?
Avatar billede frontview Nybegynder
12. april 2005 - 18:53 #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.
Avatar billede dennismp Nybegynder
12. april 2005 - 20:12 #19
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
  }
}
Avatar billede dennismp Nybegynder
12. april 2005 - 20:57 #20
Du skal bruge SQL'en istedet for
$data = mysql_query("SELECT * FROM `oensker` ORDER BY navn LIMIT ".$limit.", 2");

du kan evt bruge:
SELECT o.*, sum(ro.res_antal) as reserveret
FROM oensker o, res_oensker ro
WHERE r.oenskeid = o.id
GROUP BY r.oenskeid


jeg vil se om jeg kan lave dit kode om så det virker - senere iaften
Avatar billede dennismp Nybegynder
13. april 2005 - 00:37 #21
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']."'");

                    echo "<tr><td style=\"border-bottom:1px solid black;\" valign='bottom'>Reserveret af: ";
                    while($res = mysql_fetch_assoc($reserved)) {
                        //$reserveret = $res['navn'].", ".$reserveret;
                        //$res_antal = $res['res_antal'].", ";
                        if(! isset( $reserveret[$res['navn']] ) ) $reserveret[$res['navn']] = 0;
                        $reserveret[$res['navn']] += $res['res_antal'];
                        echo "{$res['navn']} ({$res['res_antal']}) ";
                    }
                    echo "</td></tr>";
                }
                echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">";
                echo "<input type=\"hidden\" name=\"oenskeid\" value=\"".$row['id']."\">";
                if($row['ejer'] ) {
                    echo "<tr><td style=\"border-bottom:1px solid black;\">Slet: <input type=\"submit\" name=\"reserver_oenske\" value=\"Slet\"></td></tr>";
                } else {
                    if( ($row['antal'] - $row['reserveret']) >  0 ) {
                        echo "<tr><td style=\"border-bottom:1px solid black;\">Reserver: <input style=\"border:0;\" type=\"checkbox\" name=\"reserver\" checked> Antal:<input type='text' name='antal' > <input type=\"submit\" name=\"reserver_oenske\" value=\"Reserver\"></td></tr>";
                    }
                }
                echo "</form>";
                unset($reserveret);
            }
         
            echo "</table>";
            echo "</div>";
            echo "</div>";
            echo "</td>";
            if($i == 0) {
                echo "<td style=\"width:20px;\"></td>";
            }
        }
    }
    echo "</tr>";
    echo "</table><br>";
    if($row['id']) {
        WriteOensker(($limit+2));
    }
}
?>
Avatar billede frontview Nybegynder
13. april 2005 - 16:29 #22
Det virker, tusinde tak for hjælpen!! :-)
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