Vraag & Antwoord

Webprogrammeren & scripting

[php] Reserveringssysteem

5 antwoorden
  • Ik heb een klein probleempje. Ik wil dat het volgende gebeurt: De gebruiker voert een machinesoort in, ik haal alle machines op van dat soort, laat ze zien in een tabel, en geef weer of ze voor de komende 2 weken (per dag) bezet zijn ja of nee. Voorbeeld: [img:da609facfb]http://www.wtcdekempen.nl/ruud_dump/wtc_reserveren.png[/img:da609facfb] Hij kleurt nu alles groen of rood, of doet hele rare dingen, maar niet wat ik wil. Volgens mij klopt mn if() niet helemaal. Hopelijk kan iemand mij (op weg) helpen. [code:1:da609facfb] <? $machcheck = mysql_query("SELECT * FROM machines WHERE soort='$soort'") or die(mysql_error()); $machinebestaat = mysql_num_rows($machcheck); if($machinebestaat) { $nu = time(); $veertiendgn = $nu + (60 * 60 * 24 * 14); $a = date("j", $nu); $aa = date("n", $nu); $aaa = date("Y", $nu); $b = date("j", $veertiendgn); $bb = date("n", $veertiendgn); $bbb = date("Y", $veertiendgn); $begindatum = mktime($uur1,$minuut1,00,$maand1,$dag1,$jaar1); $einddatum = mktime($uur2,$minuut2,00,$maand2,$dag2,$jaar2); $beginveertien = mktime(00,00,00,$a,$aa,$aaa); $eindveertien = mktime(23,59,59,$b,$bb,$bbb); ?> <table border="1" width="100%" cellspacing="0"> <tr> <td colspan='16'><? echo("<b>$soort</b>"); ?></td> </tr> <tr> <td>nr:</td> <td>Machine:</td> <? for($i = 0; $i < 14; $i++) { $dg = date("j", $nu); $mnd = date("n", $nu); echo("<td>$dg/$mnd</td>"); $nu= $nu + 86400; } ?> </tr> <? while($mach = mysql_fetch_array($machcheck)) { $result = mysql_query("SELECT * FROM reservaties WHERE machinenr='$mach[nummer]' AND ((begindatum >= $beginveertien AND begindatum <= $eindveertien) OR (begindatum <= $beginveertien AND einddatum >= $beginveertien) OR (begindatum <= $eindveertien AND einddatum <= $eindveertien))") or die(mysql_error()); $found = mysql_num_rows($result); ?> <tr> <td><? echo("$mach[nummer]"); ?></td> <td><? echo("$mach[merk] $mach[naam] $mach[type]"); ?></td> <? $begin = $beginveertien; $eind = mktime(23,59,59,$a,$aa,$aaa); $i = 0; echo("<p>"); for($i = 0; $i < 14;) { if(($begin >= $res[begindatum] AND $begin >= $res[einddatum]) OR ($begin <= $res[begindatum] AND $eind <= $res[begindatum]) OR ($begin <= $res[begindatum] AND $eind >= $res[begindatum])) { echo("<td bgcolor='#DC143C'> </td>"); // rood } else { echo("<td bgcolor='#2E8B57'> </td>"); // groen } $begin = $begin + 86400; $eind = $eind + 86400; $i = $i + 1; } ?> </tr> <? } ?> </table> [/code:1:da609facfb] (sorry voor de vage variabelen en de lange code, maar anders is het nog vager :o )
  • Als ik je een paar tips mag geven: [list:e140d677b8] [*:e140d677b8]spring je code in [*:e140d677b8]gebruik duidelijke variabele namen [*:e140d677b8]index van associatieve arrays tussen quotes zetten, dus niet $array[index], maar $array['index'] (zie ook [url=http://www.php.net/manual/en/language.types.array.php]Array do's and don'ts[/url]) [*:e140d677b8]zet [url=http://www.php.net/manual/en/function.error-reporting.php]error_reporting[/url] op E_ALL (zeker bij debugging) [*:e140d677b8]schrijf alle kolomnamen in je query uit, ipv SELECT * FROM ... [/list:u:e140d677b8]Grote kans dat je dan eerder de fout eruit kan halen. Terug naar je vraag: waar komt ineens de variabele [b:e140d677b8]$res[/b:e140d677b8] vandaan?
  • Nog wat:[code:1:57d059cc2f]$machinebestaat = mysql_num_rows($machcheck); if($machinebestaat)[/code:1:57d059cc2f]is ook niet helemaal correct, je krijgt nu een int (uit de "mysql_num_rows") en dat ga je nu testen als boolean. Je maak er: [code:1:57d059cc2f]if($machinebestaat > 0)[/code:1:57d059cc2f]van. Dit soort (kleine ?) foutjes maken percies dat je code niet altijd doet wat je ervan verwacht.
  • [quote:dfa57b2154="Annie"]Als ik je een paar tips mag geven: [list:dfa57b2154] [*:dfa57b2154]spring je code in [*:dfa57b2154]gebruik duidelijke variabele namen [*:dfa57b2154]index van associatieve arrays tussen quotes zetten, dus niet $array[index], maar $array['index'] (zie ook [url=http://www.php.net/manual/en/language.types.array.php]Array do's and don'ts[/url]) [*:dfa57b2154]zet [url=http://www.php.net/manual/en/function.error-reporting.php]error_reporting[/url] op E_ALL (zeker bij debugging) [*:dfa57b2154]schrijf alle kolomnamen in je query uit, ipv SELECT * FROM ... [/list:u:dfa57b2154]Grote kans dat je dan eerder de fout eruit kan halen. Terug naar je vraag: waar komt ineens de variabele [b:dfa57b2154]$res[/b:dfa57b2154] vandaan?[/quote:dfa57b2154] [list:dfa57b2154] [*:dfa57b2154]omdat dit niet in alle forums goed gaat heb ik dit niet gedaan, in mijn bestand is dat wel. [*:dfa57b2154]Het wilde niet werken dus moes ik ff snel iets verzinnen [*:dfa57b2154]Nog nooit gebruikt, zal het eens bekijken. [*:dfa57b2154]zal er ook eens naar kijken [*:dfa57b2154]doe ik altijd op het laatst, dan weet ik zeker dat de code goed is en ik niet een kolom vergeet. [/list:u:dfa57b2154]Grote kans dat je dan eerder de fout eruit kan halen. Variabele $res: oops, foutje met kopieeren. Er stond nog $res = mysql_fetch_array($result); (tijdens kopieeren while() maar dat werd een nog grotere zooi :?) Volgens mij klopt de structuur niet helemaal, of de if/else deugd niet. Als iemand denkt dat hij/zij mij kan en wil helpen wil ik de php file met fatsoenlijke opmaak wel mailen.
  • Waar het precies fout gaat durf ik niet te zeggen op basis van de code die je hier nu neergezet hebt. De code is, zoals je zelf aan aangeeft, te onoverzichtelijk en niet meer de juiste versie. Mijn vermoeden is dat je op dit moment zelf ook niet meer weet hoe je het moet aanpakken, waarschijnlijk ben je zonder iets op papier te zetten aan het programmeren geslagen en zie je nu door de bomen het bos niet meer. Mijn advies is dan ook om te schrappen wat je nu hebt en eerst eens rustig alles op papier te zetten (functionele eisen en technische randvoorwaarden). Aan de hand van de functionele eisen kan je de technische aanpak (kort) uitschrijven. Tijdens het programmeren kan je altijd terugvallen op deze "documentatie" als het even niet meer duidelijk is. En die documentatie hoeft natuurlijk niet super professioneel cq. uitgebreid te zijn. Maar eerst een aantal zaken opkrabbelen verplicht je al bij voorbaat om wat beter over de materie na te denken. Als ik even snel kijk naar wat je wil bereiken dan zie ik het volgende: [img:63f670097e]http://members.home.nl/hurkmans/ct/reservering.gif[/img:63f670097e] Een periode van 14 dagen en de huurperiode van een machine (rood) kan daar op 4 manieren binnen vallen. Als je deze regels even uitschrijft en combineert met je andere gegevens (uit de database) kan je deze daarna vertalen naar PHP. p.s. deze functionaliteiten zitten ook vaak in online (activiteiten)kalenders, misschien dat je voor codevoorbeelden cq. aanpak ook eens kan kijken bij hotscipts.com

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.