Avatar billede jensclausen Juniormester
26. januar 2019 - 23:08 Der er 5 kommentarer og
1 løsning

Simpel tæller med PHP og MySQL

Hej igen.
Jeg forsøger at kode en tæller, der skal tælle hver gang siden indlæses. Den skal ikke tælle unikke, men blot opdatere antal gange.
Koden ser sådan ud,
<?PHP include "serverconnect.php";
        $sql = "SELECT count FROM counts WHERE id=1" or die(mysql_error());
        $result = $conn->query($sql);
        while($data = $result->fetch_assoc())
    {   
        $count = $data['count'];
        echo $count;
        $count_new = $count +1;
        echo "<br>";
        echo $count_new;
        echo "<br>";
        include "serverconnect.php";
    $sql = "UPDATE counts SET count='$count_new' WHERE id=1";
    $result = mysql_query($sql);
        //$sql = "UPDATE counts SET count=count+1 WHERE id=1";
        //$sql = "UPDATE counts SET count=count+1";
        include "serverconnect.php";
        //exit;
    }
//scriptet skal tælle hver gang siden bliver vist og ikke unikke.
?>
Avatar billede olsensweb.dk Ekspert
27. januar 2019 - 02:16 #1
>mysql_query($sql);
det er det gamle db API, har en en connection til den også ??
vær opmærksom på at det API er fjernet fra og med PHP7


kunne alt din code ikke bare forkortes til
(utested)
<?php
include "serverconnect.php";
$sql = "UPDATE counts SET count=count+1 WHERE id=1";
$conn->query($sql);
?>
Avatar billede arne_v Ekspert
27. januar 2019 - 05:19 #2
Taelleren skal jo udskrives.
Avatar billede olsensweb.dk Ekspert
27. januar 2019 - 09:32 #3
#2
ja men vil det ikke være smartere at udskrive efter man har opdateret databasen ?
det man gør nu at forsøge at opdaterer inde i sit udskrivnings loop

#0
får du udskrevet nogle fejl ??
får du opdateret din database ??
får du dine 2 connections ?? (mysql og mysqli)
får du udskrevet noget ?? (tror jeg ikke, den burde smide en sql fejl)
slå fejl visning til !!, at udvikle uden fejl beskrivel er, at udvikle i blinde


>$sql = "SELECT count FROM counts WHERE id=1" or die(mysql_error());
er det en sql kommando ?? (nej)

du blander 2 forskællige API'r sammen (mysql, og mysqli)
mysql: mysql_error, mysql_query
mysqli: $conn->query($sql), $result->fetch_assoc()

hold dig til mysqli
start med at lave en query der opdaterer
lav en query der udskriver
Avatar billede jensclausen Juniormester
27. januar 2019 - 22:07 #4
Hej og tak for svar og løsning.
Min kode ser sådan nu:
<?php
include "serverconnect.php";
$sql = "UPDATE counts SET count=count+1 WHERE id=1";
$conn->query($sql);
$sql = "SELECT count FROM counts WHERE id=1" or die(mysql_error());
        $result = $conn->query($sql);
        while($data = $result->fetch_assoc())
    {   
        $count = $data['count'];
        echo $count;
    }
?>
Endnu en gang tak for løsningen.
Hilsen
Jens
Avatar billede arne_v Ekspert
28. januar 2019 - 00:15 #5
Der boer vel slet ikke vaere et loop.

Ikke:

    while($data = $result->fetch_assoc())
    { 
        $count = $data['count'];
        echo $count;
    }

men:

    if($data = $result->fetch_assoc())
    { 
        $count = $data['count'];
        echo $count;
    }
  else
  {
        die('Houston we have a problem');
  }
Avatar billede arne_v Ekspert
28. januar 2019 - 00:19 #6
SET count = count + 1

er klartt bedre end:

SET Count = ?

da den mindsker concurrency problemer.

Om SELECT eller UPDATE i de givne udgaver kommer foerst betyder ikke rigtigt noget. Det er nemt at faa PHP til at udskrive samme vaerdi.

Den stoerste fordel ved SELECT foerst er at man kan bruge en transaktion og SELECT ... FOR UPDATE hvis man helt vil eliminere concurrency problemer.

Spoergsmaalet er dog om det er umagen vaerd. En counter er jo ikke forretningskritisk.
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