Avatar billede tobrukDk Novice
23. juni 2013 - 02:02 Der er 14 kommentarer og
1 løsning

Angive et totalt tal til sidste.

Dette er, hvordan jeg lavede min egen lille LIKE system, hvor det skal være sådan, at du skriver en kommentar, kan du lide indholdet på siden.

så det betyder, at det skal være sådan, som at downloade alle dem, der har indhold_id 3 eller 1, så det betyder, at hvis jeg har 40, så det skal bare være alt sammen som så jeg får 40 i stedet for 1, altså hvor den med andre ord ligger det hele sammen, så alle dem som f.eks har indhold_id 3 finder den ud af om hvor mange har like? og ligne.


if ($stmt = $this->mysqli->prepare('SELECT `glike` FROM `forslag_like` WHERE `indhold_id` = ?')) {
            $stmt->bind_param('i', $id);
            $id = $_GET['id'];
            $stmt->execute();
            $stmt->bind_result($glike);
           
            while($stmt->fetch())
            {
                echo "Synes godt om " . $glike;
            }
            $stmt->close();

        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
        }

23. juni 2013 - 07:17 #1
Mener du således (ikke testet):

$counter = 0;
while($stmt->fetch())
{
    echo "Synes godt om " . $glike;
    $counter++;
}
echo "Der er " .  $counter  . "der synes om " . $id
Avatar billede moddi100 Seniormester
23. juni 2013 - 11:58 #2
En noget bedre konstruktion er at benytte COUNT() i din forespørgsel. F.eks.

if ($stmt = $this->mysqli->prepare('SELECT COUNT(*) FROM `forslag_like` WHERE `indhold_id` = ?')) {
            $stmt->bind_param('i', $id);
            $id = $_GET['id'];
            $stmt->execute();

            // $linkes bliver lig 40, hvis du har 40 rækker,
            // hvor din WHERE-sætning er opfyldt
            $stmt->bind_result($likes);

            $stmt->fetch();
            $stmt->close();
}
23. juni 2013 - 12:28 #3
#3, jeg forstod, at problemstillingen var at udskrive hver enkelt OG at udskrive antallet.  Din database forespørgsel giver antallet, tobrukDK's database forespørgsel giver de enkelte.  Man kan så vælge at at sende begge forespørgsler, tobrukDK's for de enkelte og din for antallet, eller man kan vælge, som jeg foreslår, kun at sende tobrukDK's forespørgsel og så bruge den både til at vise de enkelte og at tælle antallet.
Avatar billede moddi100 Seniormester
23. juni 2013 - 13:08 #4
#3 du har en pointe, når jeg læser overskriften er din løsning nok mere relevant for spørger.
Fordelen ved min løsning er jo netop at du ikke henter en masse unødvendige rækker ud, men nøjes med at hente antallet og derved optimerer koden. Ønsker man netop disse rækker, er min løsning dog lettere problematisk :)
Avatar billede tobrukDk Novice
23. juni 2013 - 13:11 #5
Hej,

Ingen af jeres forslag virker på nogle måde.

Det er sådan når man opret en kommentar kan man første efter der "Synes godt om" indhold på siden eller spørgsmål.

sådan her ser det ud når man opret en kommentar til siden:

if(isset($_POST["kommentar"]))
        {
            if ($stmt = $this->mysqli->prepare('INSERT INTO `forslag_like` (`indhold_id`, `navn`, `glike`) VALUES (?, ?, ?)')) {
                $stmt->bind_param('sss', $indhold_id, $navn, $glike);
                $indhold_id = $_GET["id"];
                $navn = $_SESSION["navn"];
                $glike = 0;
               
                $stmt->execute();
                $stmt->close();

            } else {
                echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
            }
           
            if($stmt = $this->mysqli->prepare(' INSERT INTO `forslag_kommentar` (`navn`, `img`, `indhold_id`, `tekst`) VALUES (?, ?, ?, ?)' ))
            {
               
                /* Bind parametre */
                $stmt->bind_param('ssis', $navn, $img, $indhold_id, $tekst);
               
                /* Sæt værdier på parametrene */
                $navn = $_SESSION["navn"];
                $img = $_SESSION["img"];
                $indhold_id = $_GET["id"];
                $tekst = $_POST["tekst"];
               
                /* Eksekver forespørgslen */
                $stmt->execute();
                if($stmt->insert_id && $stmt->insert_id > 0)
                {
                    echo '<meta http-equiv="refresh" content="0;URL=".curPageURL().">';
                }
               
                /* Luk statement */
                $stmt->close();
               
            }
            else
            {
                /* Der er opstået en fejl */
                echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
            }
        }




if ($stmt = $this->mysqli->prepare('SELECT `glike` FROM `forslag_like` WHERE `indhold_id` = ?')) {
            $indhold_id = $_GET['id'];
            $stmt->bind_param('i', $id);
            $stmt->execute();
           
            $stmt->bind_result($likes);
           
            $counter = 0;
            while($stmt->fetch())
            {
                //den tag kun ham som synes godt om indhold (Vise kun af mig) f.eks Jesper
                echo "Synes godt om " . $glike;
                $counter++;
            }
            //den tag kun fat i dem som har synes godt om indhold altså en anden bruger f.eks navn; Mads
            //Angiver et tal så snart man har skrevet en kommentar,
            echo "Der er " . $counter . " der synes om " . $id;

            $stmt->fetch();
            $stmt->close();
        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
        }


lige nu er indhold_id = 2,



CREATE TABLE IF NOT EXISTS `forslag_like` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `indhold_id` int(11) NOT NULL,
  `navn` varchar(200) NOT NULL,
  `glike` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


INSERT INTO `forslag_like` (`id`, `indhold_id`, `navn`, `glike`) VALUES
(1, 2, 'Mads', 1),
(2, 2, 'Jesper', 1);

Avatar billede tobrukDk Novice
23. juni 2013 - 13:25 #6
Skulle gøre sådan her;


if ($stmt = $this->mysqli->prepare('SELECT `glike` FROM `forslag_like` WHERE `indhold_id` = ?')) {
            $stmt->bind_param('i', $id);
            $indhold_id = $_GET['id'];
            $stmt->execute();
           
            $stmt->bind_result($likes);
           
            $counter = $glike;
            while($stmt->fetch())
            {
               
            }
            $alt = $counter++;
            echo "Der er " . $alt . " der synes om " . $id;

            $stmt->fetch();
            $stmt->close();
        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
        }
Avatar billede tobrukDk Novice
23. juni 2013 - 13:26 #7
Den tag bare ikke alle sammen :(
23. juni 2013 - 14:25 #8
Jamen så er det nok mig, der ikke har forstået din beskrivelse af hvad problemet er.  Jeg tit svært ved at forstå det du forklarer.  Jeg gik ud fra, at koden i dit oprindelige spørgsmål udskrev de rigtige 'synes godt om' rækker, og at du derudover ville have udskrevet hvor mange der var. 

Lad mig derfor prøve at undersøge, hvad problemet er.  Du har lavet et system hvor brugerne kan 'synes godt om' et indhold med et bestemt indhold id.  Hver gang der så er en bruger der har syntes godt om et indhold skal koden i #5 første blok gemme det pågældende indhold id og navnet på brugeren i databasen.  Hvis  for eksempel Hans har syntes godt om indhold 5 og 7 og Mads har syntes godt om indhold 5 og 3, så skal dette komme i database tabellen:

id  indhold_id  navn  glike
1        5        Hans        0
2        7        Hans        0
3        5        Mads      0
4        3        Mads      0

Jeg har så tre spørgsmål:

1.  Har jeg forstået dette rigtigt?
2.  Lykkes det?  Får du de rigtige data i databasen?
3.  Hvad er formålet med at gemme en række nuller i kolonnen glike?

Hvis du kan give mig et svar på disse spørgsmål, så har jeg en baggrund for at gå videre og muligvis, når jeg har forstået problemet, hjælpe med at løse det.
Avatar billede tobrukDk Novice
23. juni 2013 - 15:41 #9
Ja det er rigtigt forstået

Ja det kommer fint ind i database uden problemer,

jamen hvis jeg en dag, skal lave det om eller ligne så vil jeg helt bar kig i kode, f.eks hvis jeg stopper med at arbejde på hjemmesiden,


(Kun det ikke være en idé at bruge facebook synes godt om, men så skal den bare arbejde samme med databasen)

Ved ikke om du kan se forslaget som jeg mener ;)
Avatar billede moddi100 Seniormester
23. juni 2013 - 16:07 #10
Hvis vi bruger tabellen fra #8 hvad vil du så gerne ende ud med? 4?

Altså ende ud med teksten: "Der er 4 der synes om 2"

Såfremt du ønsker det, skal du netop anvende fremgangsmåde fra #2. Prøv at kopiere eksemplet præcis som det er og kør det. Rapporter så eventuelle fejl.

Dit foreslag fra #6 er en sammenblanding af flere ting og holder ikke. Ønsker du blot at tælle én op for hver række kan det også gøres som:
if ($stmt = $this->mysqli->prepare('SELECT `glike` FROM `forslag_like` WHERE `indhold_id` = ?')) {
            $stmt->bind_param('i', $id);
            $indhold_id = $_GET['id'];
            $stmt->execute();
           

// Ændret herfra
            $stmt->bind_result($unused);
           
            $counter = 0; // Vi har som standard ingen likes
            while($stmt->fetch())
            {
                $counter++; // Vi tæller én op pr række
            }
            // $counter indeholder nu antallet af rækker
            echo "Der er " . $counter . " der synes om " . $indhold_id;

            $stmt->close();
// Slut på ændringer

        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
        }
}


Bemærk at fremgangsmåden fra #2 giver dig et tal ud fra databasen mens denne fremgangsmåde bevirker at du skal løbe igennem alle rækkerne én ad gangen. Du henter altså meget mere ud fra databasen end der er behov for.
23. juni 2013 - 21:19 #11
Jeg har været væk, men her er jeg igen.  tobrukDk, så #8 er rigtigt forstået.  Tabellen med de fire rækker er så et realistisk eksempel på de data du får gemt i tabellen forslag_like.  Hvis så går tilbage til koden i dit oprindelige spørgsmål og sætter værdien af $_GET['id'] for eksempel til 5,  så bliver query i $stmt denne:

SELECT glike FROM forslag_like WHERE indhold_id = 5 

Du har i tabellen to rækker hvor indhold_id = 5, nemlig
id  indhold_id  navn  glike
1        5        Hans        0
3        5        Mads        0

I begge rækker er værdien af glike lig med 0.

Du viser så koden

while($stmt->fetch())
{
    echo "Synes godt om " . $glike;
}

Du definerer ikke i den kode du viser variabelen $glike, så med en tom $glike vil din kode skrive dette ud:

Synes godt om
Synes godt om

Det kan umuligt være din hensigt.  Så jeg forstår stadig ikke hvad hensigten er.  For at komme videre, hvis dit oprindelige spørgsmål stadig er relevant, så foreslår jeg, at du:

a.  bekræfter at tabellen med de fire rækker i #8 er realistisk,
b.  forklarer hvad hensigten er med værdierne i kolonnen glike,
c.  viser præcist hvad du vil have skrevet ud hvis tabellen er som i #8 og $_GET['id'] er lig med 5.
23. juni 2013 - 21:20 #12
Ja, faktisk vil din kode skrive dette ud:

Synes godt om Synes godt om
Avatar billede tobrukDk Novice
24. juni 2013 - 01:22 #13
Jeg skulle bare gøre sådan her


if ($stmt = $this->mysqli->prepare('SELECT SUM(`glike`) as antal FROM `forslag_like` WHERE `indhold_id` = ?'))
        {
            $stmt->bind_param('i', $id);
            $indhold_id = $_GET['id'];
            $stmt->execute();
            $stmt->bind_result($antal);
            $stmt->fetch();       
            echo "Synes godt om " . $antal;   
            $stmt->close();
        }
        else {
            echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
        }


Christian_Belgien jeg synes du skal have alle 40 point, efter som du har hjælp mig så meget og dit forslag virker også, men min god ven i programmering IRL. siger til mig at den kode gøre at jeg "Bruger mindre" trafik til siden.

Tak for hjælpen og ligge gerne et svar tak :)
24. juni 2013 - 06:54 #14
Jeg lægger et svar for at få spørgsmålet lukket.
Avatar billede tobrukDk Novice
24. juni 2013 - 12:42 #15
Mange gerne tak :)
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