Parameters uit database?
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:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$PPPN=array();
$PPPN[25] = 11.99;
$PPPN[26] = 12.00;
$PPPN[27] = 12.01;
$PPPN[28] = 12.02;
?>
$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?
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
Was het maar zo...
Maar wat is dan op dit moment het beste idee?
Top. Nu nog een beheer pagina maken!
Groetjes!
edit: typo
Gewijzigd op 01/01/1970 01:00:00 door Crispijn -
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!
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.
Ik ga eens even kijken. Nu ga ik me weer eens op onbekend terrein begeven :D
Ik heb een formulier met 55 velden. Niet heel praktisch nog maar dat komt misschien nog wel.
De velden heb ik zo gemaakt:
Code (php)
1
2
3
2
3
<?php
cho '<td><input type="text" name="prijs" value="'.$row_ptp['pppn'].'" ></td></tr>';
?>
cho '<td><input type="text" name="prijs" value="'.$row_ptp['pppn'].'" ></td></tr>';
?>
Nu wil ik het als volgt verwerken:
Code (php)
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?
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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>';
?>
$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
Code (php)
1
2
3
2
3
<?php
echo '<td><input type="text" name="prijs'.$row_ptp['aantal'].'" value="'.$row_ptp['pppn'].'" class="inputbox" size="5" maxlength="5"></td></tr>';
?>
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...
Gewijzigd op 01/01/1970 01:00:00 door Crispijn -
ook maken 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.
Als ik het goed heb, kun je van 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.
Slaap lekker allemaal!
Wat je bedoeld zijn zogenaamde TopLevel key's
na lang zoeken op php.net:
Quote:
TL = TopLevel key
+TL = key is on top level (i.e. $_GET['myKey'])
-TL = key is nested within another array (i.e. $_GET['myList']['myKey'])
TL = TopLevel key
+TL = key is on top level (i.e. $_GET['myKey'])
-TL = key is nested within another array (i.e. $_GET['myList']['myKey'])
Alleen: weet iemand hoe ik dit in mijn formulier die twee waarden moet aangeven?
name="mylist['myKey']"
Ik heb nu een array gekregen dmv
Code (php)
1
2
3
2
3
<?php
<input type="text" name="prijs['.$row_ptp['aantal'].']" value="'.$row_ptp['pppn'].'" class="inputbox" size="5" maxlength="5">
?>
<input type="text" name="prijs['.$row_ptp['aantal'].']" value="'.$row_ptp['pppn'].'" class="inputbox" size="5" maxlength="5">
?>
Als ik kijk wat er gepost wordt:
Code (php)
Is dit de output:
Array ( [25] => 11.99 [26] => 12.00 [27] => 12.01 )
Dit klopt als een bus en is hartstikke mooi. Alleen nu de volgende stap: Hoe update ik de velden in de tabel met die for each.
Ik dacht dat ik dat met dit principe kon doen:
Code (php)
Ik verwacht nu een lijst met alle POST gegevens alleen ik krijg alleen
$a[0] => Array.
Ik heb geen idee hoe ik dit anders kan oplossen. Iemand anders wel?
Wat je nu doet is een array $a aanmaken, met als eerste element een array ($_POST['prijs'])
Vandaar dat je krijgt: $a[0] => Array
Oplossing:
Array
als output...
hij ziet dan maar 1 record in de array? Waarom laat hij niet al mijn waarden uit de $_POST['prijs'] zien?
Crispijn:
Op deze manier krijg ik...
Op wiens manier?
Jan:
Op wiens manier?
Crispijn:
Op deze manier krijg ik...
Op wiens manier?
Lijkt mij Erik's manier want die stopt $_POST in een array().
maar nu ik Jan z'n manier zie snap ik het ook weer