Ik ben een script aan het maken waarmee je prive berichten naar elkaar kunt versturen.
Door middel van het nummer van rijen op te halen wil ik laten zien hoeveel berichten iemand heeft.
Nu heb ik een probleempje met het laten zien van hoeveel rijen er zijn opgehaald.
Als er 5 rijen worden opgehaald, laat het script zien dat het er maar 4 zijn. Er mist er altijd eentje.
Om dit te corrigeren heb ik dit gebruikt:

$countrows += 1;

Dit zal waarschijnlijk niet de normale gang van zaken zijn. Ik heb count(*) ook geprobeerd, maar zonder resultaat. Deze liet namelijk altijd 0 zien.

Het probleem hiermee is, dat als de gebruiker geen berichten heeft, het script denkt dat de gebruiker 1 bericht heeft, terwijl er geen zijn. Dit komt door: $countrows += 1;

Nu heb ik enkele dingen geprobeerd om de boel te manipuleren om te kijken of dat wel werkte, maar helaas. Bijv:

while(!$row = $stmt->fetchArray(SQLITE3_ASSOC))
  {
    $countrows = 0;
  }  


Ze worden op deze manier opgehaald:

echo "<span class='badge'>".$countrows." unread</span>"; 


Hoe kan ik er nou voor zorgen, dat als er geen rijen zijn er niet alsnog 1 word laten gezien.
Natuurlijk kan dit door $countrows += 1; te verwijderen maar dan laat hij er nog maar 4 ipv 5 zien.
(het script laat wel gewoon de 5 rijen zien, maar de $countrows laat er maar 4 zien)

code:

  $sql = "SELECT * FROM MESSAGES WHERE RECEIVER ='$getusername' AND READ ='0'"; 
  $stmt = $db->query($sql);  
  $row = $stmt->fetchArray(SQLITE3_ASSOC); 
  $countrows = SqliteNumRows($stmt); 
  $countrows += 1;

        function SqliteNumRows($query){
        $numRows = 0;
        while($rows = $query->fetchArray()){
            ++$numRows;
            
        }
        return $numRows;
Zoals @Michael terecht voorstelt: er is nog steeds mogelijk een optie die out-of-the-box werkt: PDO. Dit was ook al eerder voorgesteld.

@Jasper heb je hier (ook) al (echt) naar gekeken?

Jasper Schellekens op 01/03/2018 17:21:45
Dit is besproken maar dit is geen optie nee, dit beteken[color=#ff0000]t[/color] dat wij honderden duizenden regels code zullen moeten herschrijven.


Dan wordt het misschien nu tijd om op de blaren te zitten om te voorkomen dat dit later nog meer pijn doet. Daarnaast zou/had je natuurlijk ook was basale tests uit kunnen voeren, om te kijken of de database zich wel leent voor wat je ermee probeert te doen.

Vraag ik mij toch af hoe de besluitvorming dan is geweest dat je bij SQLite uitkomt, en dat je na het schrijven van "honderden (schuine streep?) duizenden regels code" erachter komt dat je vrij elementaire functionaliteit lijkt te missen.

Reageren