Is het mogelijk om variabelen die tijdens een while-instructie worden gevuld, zo op te slaan dat ze ook nog na afloop van de while instructie kunnen worden gebruikt?
Ik ken alleen maar de methode dat je rijen uit een tabel 1 voor 1 uitleest, dan die rijen bewerkt of juist negeert, en dan is het op naar de volgende rij totdat je while instructie de laatste rij heeft verwerkt. Een voorbeeldje is denk ik het duidelijkst:
Als je de waarde van prijs wilt opslaan in $prijs bij 50 artikelen met $sql= "SELECT prijs from artikel"; en de waarde van $prijs heeft consequenties, dan weet ik niet anders dan dat je alleen tijdens iedere while-lus, met de waarde van $prijs op dat moment, iets kan doen (zoals wel of niet afdrukken op scherm).
Maar is het niet mogelijk om tijdens een while instructie meerdere variabelen aan te maken (bijv. $prijs1, $prijs2 die je dan na afloop van de while instructie kunt blijven gebruiken? Of kun je tijdens de while lus ook een array maken waarin alle tabelwaarden van het veld prijs worden opgenomen (zoiets als $prijsarray= array("prijs1"=>'$prijs', etc).
Ik geef toe dat de meeste functies, zoals afdrukken op het scherm of per rij opslaan in een tabel, heel goed kunnen tijdens de while instructie. Maar ik kan mij ook voorstellen dat je eerst de waarden wilt verzamelen om daar later iets mee te doen.
omg...ik wil je best helpen...maar maak eerst de problemen enzo even overzichtelijk...dus werk met alinea's...
Als je het zelf niet uitzoekt zal je er zelf ook nooit achter komen.....

en bedenk wel correcte benamingen voor
- variabelen
- key indexes

want prijs1 prijs2 zegt zo weinig, prijs is een onderdeel van een item
@Bart: ja ik zie het: ziehier versie 2 (en niet gebumpt)

Is het mogelijk om variabelen die tijdens een while-instructie worden aangemaakt en gevuld, zo op te slaan dat ze ook nog na afloop van de while instructie kunnen worden gebruikt?
Ik ken alleen maar de methode dat je rijen uit een tabel 1 voor 1 uitleest, dan die rijen bewerkt of juist negeert, en dan is het op naar de volgende rij totdat je while instructie de laatste rij heeft verwerkt.

Een voorbeeldje is denk ik het duidelijkst:
1. Je wilt de waarde van prijs opslaan in '$prijs'
2. er zijn 50 artikelen
3 je gebruikt $sql= "SELECT prijs from artikel";
4. de waarde van $prijs heeft consequenties.

Ik weet niet anders dan dat je alleen tijdens iedere while-lus, met de waarde van $prijs op dat moment, iets kan doen (zoals wel of niet afdrukken op scherm).

Maar is het niet mogelijk om tijdens een while instructie meerdere variabelen aan te maken (bijv. $prijs1, $prijs2) die je dan na afloop van de while instructie kunt blijven gebruiken?
Of kun je tijdens de while lus ook een array maken waarin alle tabelwaarden van het veld prijs worden opgenomen (zoiets als $prijsarray= array("prijs1"=>'$prijs', etc).
Ik geef toe dat de meeste functies, zoals afdrukken op het scherm of per rij opslaan in een tabel, heel goed kunnen tijdens de while instructie. Maar ik kan mij ook voorstellen dat je eerst de waarden wilt verzamelen om daar later iets mee te doen.
@noppes: aha dat geeft hoop. Want dat betekent dus dat het wel kan, maar dat ik het nog niet gevonden heb. Ik heb wel gezocht, maar ik vond nergens een tutorial. Kreeg even het idee dat dit in php niet mogelijk was.
Wat ik heb geprobeerd is om tijdens een while lus iedere keer een andere variabele aan te maken (zoals $prijs1 bij de eerste maal, $prijs2 voor de tweede maal) maar dat lijkt een zinloze weg.
Ik zie zo geen andere zoekweg.
Je had net zo goed je openings post kunnen aanpassen!!

en dit had je zelf ook kunnen scripten:
<?php
$sql = "SELECT * FROM artikel":

$aArtikelPrijzen = array();
if ($result = mysql_query($sql)) {
while ($row = mysql_fetch_assoc($result)) {
$aArtikelPrijzen[$row['artikelnummer']=$row['prijs'];
}
}
else {
// foutafhandeling
}

$artikelnummer = isset($_GET['art']) && $_GET['art']!='' ? $_GET['art'] : '';

if (array_key_exists($artikelnummer,$aArtikelPrijzen)) {
echo $aArtikelPrijzen[$artikelnummer];
}
?>
Iets als dit (ik bespaar me de moeite van de query etc).
Ik geef je 2 manieren. De bovenste is het simpelste en wellicht het beste (eval() kent weinig vrienden), maar ik denk dat het iets trager is al de laatste.
De functie (kan natuurlijk ook in een class) is dan wel weer makkelijker te gebruiken op andere plaatsen.


<?php
while($prijzen = mysql_fetch_array($query_om_prijzen_te_verzamelen))
	{ 
	$prijs = $prijzen['prijs'];
	$bewerkte_prijzen[] = $prijs * 1.195; // BTW toevoegen oid
	}
?>


Eventueel kan je ook dit doen:

[/code]
<?php
$prijzen = mysql_fetch_array($query_om_prijzen_te_verzamelen);

function bewerk_prijzen($input, $formule)
{
return eval("$input $formule");
}

$bewerkte_prijzen = array_map("bewerkprijzen", $prijzen, "* 1.195");
?>
[/code]

En om de gegevens te tonen:


<?php
// toon alle bewerkte prijzen
echo "<pre>";
print_r($bewerkte_prijzen);
echo "</pre>";

// toon 1 enkele bewerkte prijs (in dit geval prijs 19)
echo "<pre>";
print_r($bewerkte_prijzen[18]);
echo "</pre>";
?>




Script is niet getest!
Het probleem was toch dat je de waarden buiten de while lus wil bewaren he?

Zet dat toch gewoon in een array

Ik heb de reacties niet goed gelezen; misschien herhaal ik iets, sorry.

<?
$rijen = array();
$i = 0;
while ($row = mysql_fetch_array($result))
{
$rijen[$i] = $row;
$i++;
}
?>

Dan kan je na de while lus alle records nog rustig doorlopen zo veel je wil.
Ik heb het op deze manier nog nooit nodig gehad. Als het bijvoorbeeld gaat om tussentijdse totalen kun je net zo goed een tweede query uitvoeren als alles in een array stoppen.
@ jan:
Ik kwam er op vanwege een recente topic in de DATABASES & SQL rubriek. Daar wilde iemand een overzicht hebben van alle geboekte kamers (van een hotel) in een maand.
Dat vond ik wel spannend om eens uit te zoeken of een grafisch overzicht, via een html tabel, mogelijk was.
Ik kreeg het wel voor elkaar om per kamer de aankomstdag en vertrekdag uit de tabel te halen, en zo vervolgens een rij in de html-tabel te construeren. Alle cellen (<td>) die voor de aankomstdag liggen hebben geen kleur en geen inhoud, en vanaf de aankomstdag wordt de achtergrond grijs en wordt de inhoud 'X'. Het resultaat op scherm is dan een mooi overzichtje in tabelvorm.
Maar bij meerdere reserveringen per kamer maakt de oplossing binnen de while-instructie dat de rij met dagen verlengd wordt (mag niet) of dat 1 kamer per reservering een nieuwe html-tabelrij krijgt (mag ook niet).
Volgens mij kun je wel 1 html-tabelrij maken als je cel voor cel (per dag dus) kan nalopen of er een aankomst of vertrekdatum is.

Reageren