Ik ben even bezig met een klein projectje. Ik moet een reserveringssysteem voor een accomodatie maken. Per klant maak ik orders aan die een bepaalde termijn beslaan. Dit kan elke willekeurige datum zijn tussen 1 april van elk jaar en 30 okt.
Ik wil nu graag een overzicht maken met de dagen dat deze accomodatie bezet is, maar ik heb alleen een start en een eind datum van de gehuurde periode. Op welke manier kan ik het best dit overzicht in elkaar klussen? Ik wil dus een overzichtje van april tm oktober met dus een verschil in beschikbare en bezette dagen.
Ik ben bezig om een functie te maken die alle dagen dat er een actie geld op te halen zodat die in een array gezet kunnen worden.
Omdat het overzicht een maand als output geeft wil ik alle data van die betreffende maand in een array zetten. Wat dan belangrijk is is de start en de einddatum.
Ik wil alle data selecteren met het huidige jaar en de huidige maand met onderstaande query:
<?php
$sql_ca = " SELECT
id,
locatie,
van,
tot
FROM
acties
WHERE
van = ".date ("$jaar-$maand")."
";
?>
Alleen ik krijg nu een 0 als ik het aantal dat het resultaat in de database moet voorkomen print.
En dit terwijl er zeker wel een record in de database voorkomt waarop er een actie start.
Ook heb ik de variabelen $jaar en $maand hierboven gedefinieerd.
Wie o wie kan me vertellen hoe ik alle records ophaal die in maand 1 jaar 2007 starten?
edit:
opgelost
<?php
$sql_ca = "SELECT * FROM acties WHERE DATE_FORMAT(tot, '%m') = ".$maand."
?>
if ($iTotDatum>=$iVanDatum) {
array_push($ArrayBereik,date('Y-m-d',$iVanDatum)); //eerste datum
while ($iVanDatum<$iTotDatum) {
$iVanDatum+=86400; //24 uur toevoegen
array_push($ArrayBereik,date('Y-m-d',$iVanDatum));
}
}
return $ArrayBereik;
}
?>
Deze functie geeft alle tussenliggende data weer incl de data die ik opgeef.
De volgende query roept alle records aan die in de betreffende maand vallen.
<?php
$sql_ca = " SELECT
id,
locatie,
van,
tot
FROM
acties
WHERE
DATE_FORMAT(tot, '%m') = ".$maand."
OR
DATE_FORMAT(van, '%m') = ".$maand."
AND
locatie = '$locatie'
";
$res_ca = mysql_query($sql_ca) or die (mysql_error());
$cou_ca = mysql_num_rows($res_ca);
//voor elk record dat een actie in de huidge maand heeft de boel in een array proppen
while ($row = mysql_fetch_array ($res_ca)){
echo "<br>". $row['id'];
}
?>
Nu ben ik bezig geweest de boel in één functie te proppen.
Ik heb als info nodig:
- $maand
- $jaar
- $locatie
Ik heb nu iets als:
<?php
function Check_Acties($jaar,$maand,$locatie) { //de hoofdfunctie waar we mee gaan checken
function DB_records() {//kijken welke dagen er iets van een actie is
$sql_ca = " SELECT
id,
locatie,
van,
tot
FROM
acties
WHERE
DATE_FORMAT(tot, '%Y-%m') = ".$jaar."-".$maand."
OR
DATE_FORMAT(van, '%Y-%m') = ".$jaar."-".$maand."
AND
locatie = '$locatie'
";
$res_ca = mysql_query($sql_ca) or die (mysql_error());
$cou_ca = mysql_num_rows($res_ca);
$ArrayBereik=array();
//voor elk record dat een actie in de huidge maand heeft de boel in een array proppen
while ($row_ca = mysql_fetch_array ($res_ca)){
if ($iTotDatum>=$iVanDatum) {
array_push($ArrayBereik,date('Y-m-d',$iVanDatum)); //eerste datum
while ($iVanDatum<$iTotDatum) {
$iVanDatum+=86400; //24 uur toevoegen
array_push($ArrayBereik,date('Y-m-d',$iVanDatum));
}
}
return $ArrayBereik;
}
}
}
print_r(Check_Acties(2007,01,1));
?>
Alleen dit levert een leeg scherm op. Super lastig om dan te gaan debuggen.
Even stap voor stap mijn beredenatie:
1. Alle records binnen die maand ophalen
2. Voor alle records het bereik ophalen
3. In één array proppen
4. Later in het script controleren of er die dag, die maand, dat jaar een actie geldig is met in_array()
Wat heb ik nu verkeerd gedaan? Ik zou nu de inhoud moeten zien van mijn array alleen ik zie geen output...
Oke, na een drukke periode ben heb ik het project weer opgepakt. Ik heb er wat aan lopen sleutelen. Ik heb nu het volgende:
<?php
error_reporting(E_ALL);
//hier maak ik eerste verbinding met de database - functie weggelaten
function Check_Acties($jaar,$maand,$locatie){
$sql_ca = " SELECT
id,
locatie,
van,
tot
FROM
acties
WHERE
DATE_FORMAT(tot, '%Y-%m') = '".$jaar."-".$maand."'
OR
DATE_FORMAT(van, '%Y-%m') = '".$jaar."-".$maand."'
AND
locatie = '".$locatie."'
";
$res_ca = mysql_query($sql_ca) or die (mysql_error());
//Hier gaan we alle dagen in stoppen
$ArrayBereik=array();
Helemaal bovenaan mijn pagina maak ik verbinding met de database, heb dit alleen even weg gelaten.
Mijn denkwijze:
1. Ik selecteer alle records in de tabel acties die in deze maand van dit jaar vallen
2. Nieuw array ArrayBereik starten
3. Per resultaat het array vullen met mijn data (en dus ook tussenliggende data)
4. Daarna array uitspugen om te kijen of dit werkt.
Ik krijg nu alleen maar terug
Notice: Undefined variable: VanDatum in /home/users*********/temp/date_range.php on line 41
Notice: Undefined variable: TotDatum in /home/users/*********/temp/date_range.php on line 42
Array ( [0] => 2007-03-31 )
Wat gaat hier precies fout? Waarom krijg ik geen waarden in mijn array?
Ohja, er staan zeker wel acties in deze maand aangegeven, het is niet zo dat er geen records geselecteerd worden.
Ik ben er weer even met frisse moed aan begonnen. Het moet toch maar eens afgemaakt worden. Ik heb het volgende probleem opgespoord. De waarden die ik er in stop, wanneer lager dan 10 zijn gewoon enkel bijvoorbeeld '1' dus zonder voorloop 0.
Ik kan het hele script van Arjan herschrijven maar dat zie ik niet zo zitten. Daarom ben ik op zoek naar een manierom een voorloop 0 bij cijfers kleiner dan 10 te genereren. Heeft iemand een idee hoe ik dat voor elkaar krijg? Een zoektocht op php.net en google heeft niks opgeleverd.... Kijk ik ergens overheen?