Ha allemaal!

Ik ben bezig met het optimaliseren van een prijsberekening. De situatie:

Het gaat om een accomodatie waar je met minimaal 2 nachten en minimaal 25 personen moet overnachten.

Nu haal ik dit uit een config bestand dat er als volgt uit ziet:

<?php
$PPPN=array();

$PPPN[25] = 11.99;
$PPPN[26] = 12.00;
$PPPN[27] = 12.01;
$PPPN[28] = 12.02;
?>

En zo verder. $PPPN is de prijs per persoon per nacht. Hij haalt dus de juiste prijs per persoon per nacht op en vermenigvuldigd dit met het aantal nachten.

Dit is nu gewoon een bestand dat ik een keer per jaar na een prijsverhoging moet aanpassen. Alleen nu willen ze qua website wat meer en moet er een cms-je bij. Hoe kan ik dit het beste doen? Gewoon een tabel aan maken met

aantal | pppn
25 | 11.99
etc...

Of is er een slimmere oplossing? Ik wil graag een goede grondige aanpak.

In de toekomst komt er wellicht een tweede accomodatie bij. Hier worden aparte prijzen gehanteerd.

Wie kan me een goed antwoord geven?
Het lijkt erop alsof er sprake is van een interval. Wanneer er meer mensen overnachten, wordt de prijs per persoon ook 1 cent hoger.

Mocht dat het geval zijn, dan zou ik de volgende gegevens opslaan:
Minimum aantal personen
Maximum aantal personen (dat is vast sprake van)
Basisprijs
Interval
startdatum
einddatum
accomodatie_id
Helaas Frank, dat is alleen bij de eerste records zo... Hoe meer personen er overnachten hoe groter dat verschil wordt...

Was het maar zo...

Maar wat is dan op dit moment het beste idee?
Oke, ik heb het al geregeld. Ik heb gewoon de database aangemaakt zoals hierboven beschreven en de berekening werkt.

Top. Nu nog een beheer pagina maken!

Groetjes!

edit: typo
Maar nu zit ik met het volgende. Ik heb 55 parameters in die database staan en nu wil ik die allemaal in één keer kunnen aanpassen.

Het formulier naar voren toveren is geen probleem, alleen nu wil ik graag weten hoe ik de boel in één query kan opslaan want dat moet toch mogelijk zijn?

Zoiets moet ik dan in een array zetten maar hoe gaat dat er ongeveer uit zien? Kan iemand me een stapje verder helpen?

Ik hoop 't!
Ik zou per record, dat is wat anders dan per parameter, de boel gaan updaten. Dan kun je per query, per record, controleren of deze update is geslaagd. Zo kun je aan het einde van de while-lus een overzichtje geven van geslaagde en mislukte updates.

Wanneer je alles met 1 query wilt updaten, heb je waarschijnlijk een CASE nodig in de query. Alleen loop je dan het risico in de problemen te komen wanneer er ineens records bijkomen.

Laat eens zien hoe je datamodel er uitziet, dan kunnen we echt meedenken.
dus eerst een array maken, dan een while lus en daarin de boel updaten?

Ik ga eens even kijken. Nu ga ik me weer eens op onbekend terrein begeven :D
Oke, ik heb me er flink in verdiept en volgens mij moet ik het ongeveer zo doen.

Ik heb een formulier met 55 velden. Niet heel praktisch nog maar dat komt misschien nog wel.

De velden heb ik zo gemaakt:

<?php
cho '<td><input type="text" name="prijs" value="'.$row_ptp['pppn'].'" ></td></tr>';
?>

Nu wil ik het als volgt verwerken:

<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){

$prijsn = $_POST['prijs'];

$a = array ($prijsn);

foreach ($a as $v) {
print "Huidige waarde van \$a: $v.\n";
//mysql_query("UPDATE prijs_tp SET pppn = 'bla' WHERE aantal = '25'") or die(mysql_error());
}
}
?>

Als output heb ik nu dit:

Huidige waarde van $a: 7.97.

En dat is de waarde van mijn laatste formulier veld.

Op de een of andere manier moet ik de POST gegevens op een hoop vegen en zorgen dat hij alles meeneemt in de verwerking van de data.

Ik kom er alleen niet uit hoe ik dit het beste moet doen. Ik heb me in array's verdiept alleen het begint me nu even te duizelen.

Wat is een logische volgende stap?
Dit stukje is overbodig:
<?php
$prijsn = $_POST['prijs'];

$a = array ($prijsn);
?>
Je hebt de boel tenslotte al in $_POST['prijs'] staan, dan zijn de variabelen $prijsn en $a gewoon kopieen. Zo kun je er nog wel een stuk of honderd gaan aanmaken...

Hoe ziet je formulier er uit? Maak je daarin een array aan met de naam prijs? Dan zou je de prijzen kunnen uitlezen uit de array $_POST['prijs']. Of met $_POST['prijs'][0] bv. de eerste key opvragen, etc. Uiteraard ga je hier een foreach gebruiken.

Maar geef eerst eens een stukje van je formulier, nu moeten we raden naar een oplossing.
Oke, ik dacht dat ik je voldoende info had gegeven maar daar komt ie:

<?php
$sql_ptp = "SELECT * FROM prijs_tp";
$res_ptp = mysql_query($sql_ptp) or die (mysql_error());

if (mysql_num_rows($res_ptp) >= 1){
//er zijn gegevens gevonden
echo '<form method="post" action="?prijzen_tp">';
echo '<table cellspacing="0" cellpadding="0" width="100%">';
echo '<tr><td width="100"><b>Aantal</b></td>';
echo '<td><b>Prijs per persoon per nacht</b></td></tr>';

while ($row_ptp = mysql_fetch_array ($res_ptp)){
$color ^= 1;
echo '<tr class="rij'.$color.'"><td>'.$row_ptp['aantal'].'</td>';
echo '<td><input type="text" name="prijs" value="'.$row_ptp['pppn'].'" class="inputbox" size="5" maxlength="5"></td></tr>';
}

echo '</table>';
echo '<p></p><input name="submit" type="submit" value="Opslaan" class="button"> <input name="submit" type="reset" value="Reset" class="button">';
echo '</form>';
?>

edit:

dus dan moet ik van regel 15 maken

<?php
echo '<td><input type="text" name="prijs'.$row_ptp['aantal'].'" value="'.$row_ptp['pppn'].'" class="inputbox" size="5" maxlength="5"></td></tr>';
?>

Alleen dan moet ik dus nog wel alle gegevens op een hoop vegen lijkt me... Dat wordt dan dus de vraag...
Als ik het goed heb, kun je van
name="prijs"
ook maken
name="prijs[1]"
waarbij de 1 bv. het id is van een bepaald record.

Zodra het formulier wordt verzonden, ontvang je de array $_POST['prijs'] waar een array met id's in staat die de nieuwe prijs bevatten. Met print_r($_POST); kun je snel zien wat er in deze array allemaal te vinden is.

Wanneer je de array $_POST['prijs'] gaat verwerken, kun je dat doen met foreach.

Tot zo ver de theorie... Probeer het eens en laat even weten wat het resultaat is.

Reageren