Avatar billede tobrukDk Novice
04. august 2013 - 21:36 Der er 5 kommentarer og
1 løsning

er der flere pladser tilbage :)

hej

jeg er i gang med at bygge et lille til tilmeld og frameld system,

http://billedeupload.dk/?v=sog6X.png
Det er til finde ud af om bruger har tilmeldt sig til en ting / opgave ind fra brand eller ligne til siden

http://billedeupload.dk/?v=zaQN5.png
Her skal jeg finde ud af om hvor mange pladser der er tilbage, det hjælper ligesom ikke noget hvis jeg har haft 10 pladser og de alle sammen er blevet taget og så der er ingen tilbage. så skal der ikke flere som skal kunne tilmeld sig til opgaven/ligne..

sådan her ser min function ud:

function tilmeldOgaveKlik()
    {
        if ($stmt = $this->mysqli->prepare('SELECT tilmeldt_navn, tilmeldt_email FROM `tilmeldtOpgave` WHERE `get_id` = ? AND tilmeldt_navn = ?'))
        {
            $stmt->bind_param('is', $id, $tilmeldt_navn);
            $id = $_GET['id'];
            $tilmeldt_navn = $_SESSION["navn"];
            $stmt->execute();
            $stmt->bind_result($tilmeldt_navn, $tilmeldt_email);
            if($stmt->fetch()) {
            ?>
            <form action="#" method="post">
                <input type="submit" name="frameld" value="Frameld dig" id="frameldklik">
            </form>
            <?php
            } else {
            ?>
            <form action="#" method="post">
                <input type="submit" name="tilmeld" value="Tilmeld dig" id="tilmeldklik">
            </form>
            <?php
            }
            $stmt->close();
        }
        if(isset($_POST["tilmeld"]))
        {
            echo "Godkendt";
        }
        if(isset($_POST["frameld"]))
        {
            echo "Frameldt";   
        }
    }

Har også prøvet det her:


function tilmeldOgaveKlik()
    {
        if ($st = $this->mysqli->prepare('SELECT `antal` FROM `tilmeldt` WHERE `antal` > ?'))
        {
        $st->bind_param('i', $antal);
        $antal = 0;
        $st->execute();
        $st->bind_result($antal);
        while ($st->fetch()) {
        {   
            if ($stmt = $this->mysqli->prepare('SELECT tilmeldt_navn, tilmeldt_email FROM `tilmeldtOpgave` WHERE `get_id` = ? AND tilmeldt_navn = ?'))
            {
                $stmt->bind_param('is', $id, $tilmeldt_navn);
                $id = $_GET['id'];
                $tilmeldt_navn = $_SESSION["navn"];
                $stmt->execute();
                $stmt->bind_result($tilmeldt_navn, $tilmeldt_email);
                if($stmt->fetch()) {
                ?>
                <form action="#" method="post">
                    <input type="submit" name="frameld" value="Frameld dig" id="frameldklik">
                </form>
                <?php
                } else {
                ?>
                <form action="#" method="post">
                    <input type="submit" name="tilmeld" value="Tilmeld dig" id="tilmeldklik">
                </form>
                <?php
                }
                $stmt->close();
            }
            if(isset($_POST["tilmeld"]))
            {
                echo "Godkendt";
            }
            if(isset($_POST["frameld"]))
            {
                echo "Frameldt";   
            }
        }
        $st->close();
        }
        }
    }


dog skal jeg lige sige at tilmeld og frameld kommer ikke frem selvom antal er på 10


Hvordan gør jeg det bedste muligt at sådan til at finde ud af om bruger er tilmeld så kan han frameld sig igen selvom der ingen plads er men hvis han framelder sig så skal den kun være åben igen for tilmeld til opgaven

Har overvej om jeg skulle bruge FULL OUTER JOIN?

har du spørger eller andre ting så meget du meget gerne spørger mig eller der mere som du gerne vil vide!.

Håber du kan hjælp mig
05. august 2013 - 07:16 #1
Til at begynde med, i dit kodeafsnit nummer to har du effektivt denne query: 

SELECT `antal` FROM `tilmeldt` WHERE `antal` = 0

Det kan næppe være din hensigt.  Men jeg har svært ved at forstå dine tabeller.  Jeg går ud fra, at du vil kunne oprette flere forskellige ting/opgaver hvor hver ting/opgave har et bestemt antal pladser.  Dertil har du vel en tabel jeg skal kalde `ting` med midst disse felter:

ting
id navn antal
1  ting1  10
2  ting2  15

For at forespørge hvor mange pladser en ting har får du vel et input med id'en på den pågældende ting, for eksempel i $_GET['id'].  Så bliver din query (i pseudo kode) SELECT antal FROM ting WHERE id = $_GET['id']

Det antal pladser en ting har tilbage er så forskellen mellem tingen's antal og så antal tilmeldte.  For tilmeldinger har du vel en anden tabel, så som  (hvis en person skal kunne reservere mere end en plads for en ting) kunne se således ud:

tilmeldinger
id  ting_id  navn  antal  dato
1    2      Jesper      5    2013-08-04 01:10:00

Og du får antal tilmeldte til en ting med en query såsom (i pseudo kode)

SELECT SUM(antal) FROM tilmeldinger WHERE ting_id = $_GET['id']

Hvis det er sådan du har gjort, så kommer det ikke frem fra de billeder og den kode du viser.
Avatar billede tobrukDk Novice
05. august 2013 - 13:15 #2
Jeg har gjort sådan her


if ($st = $this->mysqli->prepare('SELECT `antal`, `opret_navn` FROM `tilmeldt` WHERE `id` = ?')){
            $st->bind_param('i', $id);           
            $id = $_GET['id'];
            $st->execute();
            $st->bind_result($antal, $opret_navn);
            $st->fetch();           
            $st->close();           
           
                if($antal > 0){
                    //hvis den ikke er 0 må jeg gå videre!
                    if($stmt = $this->mysqli->prepare(' SELECT `tilmeldt_navn`, `tilmeldt_email` FROM `tilmeldtOpgave` WHERE `get_id` = ? AND tilmeldt_navn != ? AND tilmeldt_email != ?')) {
                        $stmt->bind_param('iss', $id, $tilmeldt_navn, $tilmeldt_email);
                        $id = $_GET['id'];
                        $tilmeldt_navn = $_SESSION["navn"];
                        $tilmeldt_email = $_SESSION["mail"];
                        $stmt->execute();
                        $stmt->bind_result($tilmeldt_navn, $tilmeldt_email);
                        if($stmt->num_rows == 1){ //Check if value is returne
                            while($stmt->fetch()){
                            ?>
                            <form action="#" method="post">
                                <input type="submit" name="tilmeld" value="Frameld dig!" id="frameldklik">
                            </form>
                            <?php
                            //meld dig fra igen
                            }
                        }
                        else
                        {
                            //tilmeld dig til opgave
                        ?>
                        <form action="#" method="post">
                            <input type="submit" name="tilmeld" value="Tilmeld dig!" id="tilmeldklik">
                        </form>
                        <?php
                        }
                        $stmt->close();
                    }   
                    else{
                        echo 'Error 1: ' . $this->mysqli->error;
                    }
                }
                else{
                    //Hvis den er 0
                    echo "<div id=\"optagetInfo\">Den er optaget!</div>";
                }
            //$st->close();
        }
        else{
            echo 'Error 2: ' . $this->mysqli->error;
        }


Det virker helt fint.

Den vil ikke give mig love til at frameld mig igen også selvom den er 0 i antal, så siger den bare "den er optaget". så har man ingen mulighed for at frameld sig til opgaven.

Tænker lidt sådan her:
Finder ud af om antal er større end 0 og hvis den er det kan man tilmeld sig,

hvis man har tilmeld sig og den er på 0 i antal så skal man have mulighed for at frameld sig igen.
05. august 2013 - 13:38 #3
Vi kommunikerer ikke rigtigt.  Du forholder dig ikke til mit indlæg (det indeholder måske heller ikke noget der er værd at forholde sig til,) men så kommer jeg ikke videre.  Lad os håbe der er andre der er klogere end jeg.
Avatar billede tobrukDk Novice
05. august 2013 - 13:49 #4
#2

Du har ret hele vej omkring hvordan det er bygget op.


CREATE TABLE IF NOT EXISTS `tilmeldt` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(150) COLLATE utf8_danish_ci NOT NULL,
  `info` longtext COLLATE utf8_danish_ci NOT NULL,
  `Dato` datetime NOT NULL,
  `antal` int(3) NOT NULL,
  `opret_navn` varchar(200) COLLATE utf8_danish_ci NOT NULL,
  `opret_email` varchar(250) COLLATE utf8_danish_ci NOT NULL,
  `opret_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci AUTO_INCREMENT=2 ;

--
-- Data dump for tabellen `tilmeldt`
--

INSERT INTO `tilmeldt` (`id`, `title`, `info`, `Dato`, `antal`, `opret_navn`, `opret_email`, `opret_id`) VALUES
(1, 'herherher', '<p>rehher</p>', '2013-08-04 23:59:00', 10, 'Jesper Petersen', 'jp@hello.dk', 1);


CREATE TABLE IF NOT EXISTS `tilmeldtOpgave` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `get_id` int(11) NOT NULL,
  `tilmeldt_navn` varchar(250) CHARACTER SET utf8 COLLATE utf8_danish_ci NOT NULL,
  `tilmeldt_email` varchar(300) CHARACTER SET utf8 COLLATE utf8_danish_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;



sådan er de bygget op på.

Tilmeldt det er til hvor mange pladser der er og information osv.
TilmeldtOpgave det er hvem der har tilmeldt sig til opgaven
Avatar billede tobrukDk Novice
05. august 2013 - 17:27 #5

if ($st = $this->mysqli->prepare('SELECT `antal`, `opret_navn` FROM `tilmeldt` WHERE `id` = ?'))
        {
            $st->bind_param('i', $id);           
            $id = $_GET['id'];
            $st->execute();
            $st->bind_result($antal, $opret_navn);
            $st->fetch();           
            $st->close();           
                if($antal > 0)
                {
                    if ($stmt = $this->mysqli->prepare("SELECT tilmeldt_navn FROM `tilmeldtOpgave` WHERE get_id = ? AND tilmeldt_navn = ?"))
                    {
                    $stmt->bind_param('is', $get_id, $tilmeldt_navn);
                    $get_id = $_GET["id"];
                    $tilmeldt_navn = $_SESSION["navn"];
                    $stmt->execute();
                    $stmt->store_result();
                    $stmt->bind_result($email);
                    $stmt->fetch();
                    $count = $stmt->num_rows;
                    $stmt->close();

                    if($count > 0)
                    {
                        ?>
                        <form action="#" method="post">
                            <input type="submit" name="tilmeld" value="Frameld dig!" id="frameldklik">
                        </form>
                        <?php
                    }
                    else
                    {
                        ?>
                        <form action="#" method="post">
                            <input type="submit" name="frameld" value="Tilmeld dig!" id="tilmeldklik">
                        </form>
                        <?php
                        }
                    }
                    $stmt->close();
                }
                else
                {
                    echo "<div id=\"optagetInfo\">Den er optaget! - Ønsker dig at meld fra så kontakt $opret_navn</div>";
                }
        }


Det jeg mangler at for gjort det er hvis bruger er tilmeld så skal han have lov til at meld fra også selvom den er 0.

Jeg er næste færdig men mangler lige det sidste så håber du / i kan hjælp mig til at for klart det sidste!.

det virker næsten :-)
Avatar billede tobrukDk Novice
05. august 2013 - 21:46 #6
Det er klart nu!
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

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