Goedendag allen,

Wat is het doel?
Ik wil op een website de laatste 3 artikelen tonen welke zijn toegevoegd en welke nog beschikbaar zijn (actief) op basis van het artikelid.

Ik maak hiervoor gebruik van een mysql tabel 'artikelen'.

Nu had ik het idee omdat via mysql_fetch_array te doen zoals onderstaand script:

<?php

$sSelectiequery = "SELECT artikelid
FROM artikelen WHERE status='actief' ORDER BY
artikelid DESC limit 3";

$rDatabaseverbinding = mysql_connect(MYSQL_SERVER, MYSQL_GEBRUIKERSNAAM, MYSQL_WACHTWOORD) or die(mysql_error());

mysql_select_db(MYSQL_DATABASENAAM) or die(mysql_error());

$rRecordset = mysql_query($sSelectiequery) or die(mysql_error());

while ($aRecord = mysql_fetch_array($rRecordset, MYSQL_ASSOC)) {

$artikel1 = $aRecord['artikelid'];
echo "$artikel1";
}
?>


nu krijg ik als resultaat:

4005
4004
4002

(4003 is niet meer beschikbaar)

Het weergegeven resultaat is correct, alleen nu zou ik deze waardes willen meegeven in een uniek $variabel zoals bv
$artikel1= artikelid[1]
$artikel2= artikelid[2]
$artikel3= artikelid[3]

Ik heb al het een en ander geprobeerd, maar krijg niet het gewenste resultaat. Ik denk wel dat een array wel het meest geschikt is voor wat ik wil omdat de artikelen telkens wisselen.

Hoe krijg ik de waardes uit de array en dan per (unieke) waarde?
Om de variabelen expliciet $artikel1, $artikel2 en $artikel3 te noemen lijkt mij een verkeerde ontwerpbeslissing. Het lijkt mij beter om deze gewoon in een array te stoppen en dan hier via de index aan te refereren waarbij je kunt kiezen tussen tellen vanaf 0 (artikel 0 t/z 3) of 1 (artikel 1 t/m 3).

Wel even controleren of de index bestaat uiteraard, want het hoeft niet gegarandeerd te zijn dat je -afhankelijk van argumenten/omstandigheden- altijd 3 artikelen hebt.
Los hiervan wil ik adviseren om de MySQLi functie-bibiotheek te gebruiken, of PDO. De oude mysql_****() functies zijn in PHP 7 terzijde gesteld en worden niet meer geaccepteerd. Dit biedt tevens voordelen omdat je met MySQLi zowel procedureel als object-georiënteerd kan werken. (kies bij voorkeur één van beiden. Hoewel je dit kan mengen, is dit niet aan te raden en kan dat tot verwarring leiden.)
Thomas van den Heuvel op 18/05/2017 19:39:30

Om de variabelen expliciet $artikel1, $artikel2 en $artikel3 te noemen lijkt mij een verkeerde ontwerpbeslissing. Het lijkt mij beter om deze gewoon in een array te stoppen en dan hier via de index aan te refereren waarbij je kunt kiezen tussen tellen vanaf 0 (artikel 0 t/z 3) of 1 (artikel 1 t/m 3).

Wel even controleren of de index bestaat uiteraard, want het hoeft niet gegarandeerd te zijn dat je -afhankelijk van argumenten/omstandigheden- altijd 3 artikelen hebt.


Beste Thomas, klinkt wellicht beter. heb jij enig idee hoe dat het simpelst kan met zo weinig mogelijk code?



[size=xsmall]Toevoeging op 19/05/2017 20:30:27:[/size]

- Ariën - op 18/05/2017 21:36:29

Los hiervan wil ik adviseren om de MySQLi functie-bibiotheek te gebruiken, of PDO. De oude mysql_****() functies zijn in PHP 7 terzijde gesteld en worden niet meer geaccepteerd. Dit biedt tevens voordelen omdat je met MySQLi zowel procedureel als object-georiënteerd kan werken. (kies bij voorkeur één van beiden. Hoewel je dit kan mengen, is dit niet aan te raden en kan dat tot verwarring leiden.)


Beste Arien,

ik ga me hier eens verder in verdiepen. Altijd interessant. bedankt
Wanneer je toch enkel associatieve indexen gebruikt kun je net zo goed rechtstreeks fetch_assoc() gebruiken, dit is equivalent aan (en minder omslachtig dan) fetch_array(..., MYSQLI_ASSOC)
N tigerrag op 19/05/2017 20:29:35
Beste Thomas, klinkt wellicht beter. heb jij enig idee hoe dat het simpelst kan met zo weinig mogelijk code?

Zoals voorheen, maar dan zoiets:
<?php
// ... zoals voorheen ...
$articles = array();
while ($aRecord = $rRecordset->fetch_assoc()) {
    $articles[] = $aRecord; 
}
?>

Dit zorgt ervoor dat $artikels associatieve artikel-records bevat. Elders in je code kun je artikel #1 middels index 0 opvragen ($artikels[0]), artikel #2 met index 1 ($artikels[1]) en artikel #3 met index 2 ($artikels[2]). Om van tevoren op het bestaan te controleren kun je dit met isset() of array_key_exists() doen:
<?php
if (isset($articles[1])) {
    // ... doe iets met artikel #2 ...
}
?>

Voor het ontwikkelen en debuggen kan het voor de beeldvorming handig zijn om bij tijd en wijlen de inhoud van een array naar het scherm te dumpen, bijvoorbeeld via een functie:
<?php
// output escaping
function escape($s) {
    return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}

// safely dump an array
function dump($a) {
    echo '<pre>'.escape(print_r($a, true)).'</pre>';
}
?>

Reageren