Archief - PHP: for lus

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

tikketim

Legacy Member
PHP:
	$sql = mysql_query("SELECT * FROM datums");
	while($r=mysql_fetch_array($sql)){
		$idtotdatums = $r['uurtot'];
		$idvandatums = $r['uurvan'];
	}
	
	for($idvandatums2 = $idvandatums; $idvandatums2 <= $idtotdatums; $idvandatums2++){
		echo "$idvandatums2<br>";
	}
	
	for($idvan2 = $idvan; $idvan2 <= $idtot; $idvan2++){
		echo "$idvan2<br>";
	}
	
	
	if($idvandatums == $idvan2){
	echo "bla";
	} else {
	
	$insert = blablabla ...
	
}

het probleem is dat ik er niet in slaag om met php te zien of $idvandatums en $idtotdatums die uit een database komt gelijk is aan 1 van de waarden die uit de for lus komen :s

moet dat in een array ofzo dan ?

greetz Tim

Incinnerator

Legacy Member
kan je even vermelden wat je aan het maken bent want ik begrijp ni goed wat je allemaal aan het doen bent

PHP:
$sql = mysql_query("SELECT * FROM datums");
    while($r=mysql_fetch_array($sql)){
        $idtotdatums = $r['uurtot'];
        $idvandatums = $r['uurvan'];
    }

je doorloopt uwen tabel en de waarden van de laatste rij zet ge in 2 variabelen.
en dan heb je zo 5 en 8 in uw variabelen zitten
dan doe je een lus die begint bij 5 en eindigt bij 8
en je drukt dan 5 , 6 , 7 af

of ben ik mis?

orez

Legacy Member
uwen while lus wordt doorlopen... van de eerste tot de laatste waarde... en dan als dit gedaan is, en dus uw variabelen, enkel en alleen de laatste waarden bevatten, dan ga je een for lus lopen...

Ik snap niet wat je wil doen ofzo, dus gelieve ietwat duidelijker te zijn... naar mijn mening denk ik ook dat je for lussen in je while lus moeten... maar soit... eerst uitleggen wat je wil :p

tikketim

Legacy Member
ja inderdaad , nu zou ik graag weten of een andere waarde bv 6 tussen die bv 4,5,6,7 zit

zoja doet hij niks , zoniet doet hij wel iets ..

tikketim

Legacy Member
ok ik zal het proberen uit te leggen :p

het gaat dus over dat reservatie script waar ik al lang aan bezig ben , nu willen ze het in blokken van een half uur hebben en je kan ofwel in meerdere blokken van 2 uur reserveren of een blok van 2 uur + een half uur of een uur extra ..

nu om te checken of bepaalde blokken al niet zijn gereserveerd , haal ik eerst als er al in de database zijn die eruit ( alleen het begin en het eindblok van die reservatie zitten in de databse ) dus bijvoorbeeld :

van 9.00 tot 11.00 is er gereserveerd
9.00 heeft dan id 1 en 11.00 id 5

iemand anders wilt reserveren op dezelfde datum van 10.00 tot 12.00 bv
10.00 heeft dan id 3 en 12.00 id 7

de bedoeling was dus om een loop te maken van diegene die al in de database zit dus : 1-2-3-4-5 en van diegene die ook wilt reserveren 3-4-5-6-7

nu wil ik checken of het begin van die twede loop , de 3 dus , al in die eerste zit om zo dubbel reserveren te voorkomen

ik hoop dat je het snapt :$

Smoerf

Legacy Member
als je alles in een array wilt pushen kan je array_push gebruiken.

Maar je stopt zoiezo je query result in een array, dus kan je eventueel die array gebruiken. (als antwoord op je eerste vraag)

servi

Legacy Member
hetgeen jij wil doen doe je veel beter op database-niveau. Wat je nu gebruikt is een heel slecht ontwerp.

Als je op database-niveau bijhoudt van wanneer (vantijd) tot wanneer (tottijd) het bezet is, dan kan je eenvoudigweg met BETWEEN opvragen welke reservaties zich tussen 2 tijdstippen bevinden.
( Je slaagt hierbij best de unix-timestamps op )

een voorbeeldje, je wil weten of nu ( 18u42 13/01/2006) gereserveerd is of niet, dit kan je eenvoudig te weten komen door volgende code :

PHP:
<?php
$nu = time();
$query = mysql_query("SELECT COUNT(*) AS isgereserveerd FROM reserveringen WHERE $nu BETWEEN vantijd AND tottijd");
$resultaat = mysql_fetch_object($query);
if ( $resultaat->isgereserveerd == 1 )
   echo "het is bezet";
else
  echo "het is vrij";
?>

Dit is eenvoudiger en spaart u heel wat werk uit.

tikketim

Legacy Member
hij doet het nog niet :s

PHP:
<?php

$_SERVER['REQUEST_URI'];

$dag = $_GET['dag'];
$maand = $_GET['maand'];
$jaar = $_GET['jaar'];

include "config.php";

if(isset($_POST["submit"])){

	$sql = mysql_query("SELECT * FROM datums");
	while($r=mysql_fetch_array($sql)){

	$dag2 = $r["dag"];
	$maand2 = $r['maand'];
	$jaar2 = $r['jaar'];
	$van2 = $r['van'];
	$tot2 = $r['tot'];
	} 
	

	$sql = mysql_query("SELECT * FROM tijd2 WHERE uur='$uurvan'");
	while($r=mysql_fetch_array($sql)){
		$idvan = $r['id'];
	}
	
	$sql = mysql_query("SELECT * FROM tijd2 WHERE uur='$uurtot'");
	while($r=mysql_fetch_array($sql)){
		$idtot = $r['id'];
	}
	
	$joerie = $idtot - $idvan;
	
	if($joerie <= 3){
	echo "<p>Gelieve minstens 2 uur te selecteren.</p>";
	include "reserverenform.php";
	exit();
	}	
	
	if($joerie >= 7){
	echo "<p>Gelieve maximum 3 uur te selecteren.</p>";
	include "reserverenform.php";
	exit();
	}
	
	$query = mysql_query("SELECT COUNT(*) AS isgereserveerd FROM datums WHERE $dag2 , $maand2 , jaar2 BETWEEN uurvan AND uurtot");
$resultaat = mysql_fetch_object($query);
if ( $resultaat->isgereserveerd == 1 ){
   echo "het is bezet";
}else{
  echo "het is vrij";
	
	$insert = mysql_query("INSERT INTO datums(naam , dag , maand , jaar, uurvan, uurtot)
	VALUES ('$naam','$dag','$maand','$jaar','$idvan','$idtot')");
	echo "succesvol toegevoegd ! Klik <a href=\"reserveren.php\">hier</a> om terug te gaan enzo !";
	
}

		
	
	
} else {
	

include "reserverenform.php";


}

?>

bij het toevoegen geeft hij de volgende error :
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/aquasana/public_html/aquasana/reserverenformulier.php on line 133

en dat is dus hier :

PHP:
	$query = mysql_query("SELECT COUNT(*) AS isgereserveerd FROM datums WHERE $dag2 , $maand2 , jaar2 BETWEEN uurvan AND uurtot");
$resultaat = mysql_fetch_object($query);
if ( $resultaat->isgereserveerd == 1 ){
   echo "het is bezet";
}else{
  echo "het is vrij";
	
	$insert = mysql_query("INSERT INTO datums(naam , dag , maand , jaar, uurvan, uurtot)
	VALUES ('$naam','$dag','$maand','$jaar','$idvan','$idtot')");
	echo "succesvol toegevoegd ! Klik <a href=\"reserveren.php\">hier</a> om terug te gaan enzo !";
	
}

probeer maar eens : http://www.aquasana.be/aquasana/reserveren.php :s

servi

Legacy Member
dat is omdat die SQL-codes vol met fouten staat. Ik heb gezegd dat het unix timestamps moeten zijn, jij maakt daar gebruik van 3 verschillende waarden, dat is NIET hetzelfde. Tevens ga je een datum met een uur vergelijken, wat moet dat teruggeven ?

nemen we als voorbeeld dat er een reservatie vandaag (14/01/06) is tussen 08 uur en 10 uur :
wat jij doet is :
WHERE 14,01,06 BETWEEN 8 AND 10
wat ik zeg dat je moet doen is :
WHERE 1136066400 BETWEEN 1137218400 AND 1137225600

dat is wel een serieus verschil. Het eerste is zinloos en het tweede is eenduidig.

Bij het eerste zou ik begod niet weten wat te antwoorden, bij het tweede kan ik heel eenvoudig zeggen dat het niet waar is ( 1136066400 ligt NIET tussen 1137218400 en 1137225600 )

Wat jij doet heeft totaal geen betekenis : je gaat daarbij wat getallen vergelijken die zelfs geen enkele betekenis hebben met elkaar.


Je moet dus je tijden omzetten in unixtimestamps en dan heeft die BETWEEN AND-operatie wel zin. ALs je niet weet wat unix timestamps zijn stel ik voor dat je dat eerst eens grondig bestudeerd. ( http://www.unixtimestamp.com/ )

met date() kan je dan terug alle unix timestamps omzetten in een formaat dat leesbaar is door mensen.

Bertold

Legacy Member
Theeft er niets me te zien natuurlijk maar kzou tussen vorige en 01/xx/xxxx de naam van de maand zetten
en als je op een datum klikt ook zeker de datum weergeven in het volgende scherm om misverstanden te vermijden

maar je was dat waarsch. nog wel van plan
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan