Autor Zpráva
tomasl
Profil *
Zdravím, mám jednoduchý rezervační systém na squash , ale mám menší problém s obsazenými termíny.

v tabulce mám mimo jiné sloupce OD a DO , jsou ve formátu time .
obsazené termíny mám ošetřené pouze tak, že když uživatel zadá rozmezí shodné s rozmezím v databázi tak není možné rezervaci dokončit, ale pokud se časy prolínají tak to lze . Ato je řesně to , co potřebuji zakázat.

Poradí někdo ?


tady je zdroják


<?php           
if (!empty($_POST['jmeno']) && !empty($_POST['prijmeni'])  && !empty($_POST['email'])  && !empty($_POST['telefon'])  && !empty($_POST['ulice'])  && !empty($_POST['mesto'])  && !empty($_POST['psc']))
{ 
  $kontrola=mysql_query("SELECT * from emaily WHERE idcko ='".($_POST["rok"]).($_POST["mesic"]).($_POST["den"]).($_POST["sluzba"]).($_POST["od"]).($_POST["do"])."'");
       
if (!mysql_num_rows($kontrola)){
function rand_chars($count = 8, $chars = 36) {                                                                          
    $return = "";
    for ($i=0; $i < $count; $i++) {
        $rand = rand(0, $chars - 1);
        $return .= chr($rand + ($rand < 10 ? ord('0') : ($rand < 36 ? ord('a') - 10 : ord('A') - 36)));
    }
    return $return;
}
$rand_chars = rand_chars();
if (mysql_query("INSERT INTO emaily (idcko,email, rand_chars ,jmeno , prijmeni, telefon, ulice, mesto, psc, sluzba, od, do,datum,mesic) VALUES ('".($_POST["rok"]).($_POST["mesic"]).($_POST["den"]).($_POST["sluzba"]).($_POST["od"]).($_POST["do"])."','" . mysql_real_escape_string($_POST["email"]) . "' ,'$rand_chars','".($_POST["jmeno"])."','".($_POST["prijmeni"])."','".($_POST["telefon"])."','".($_POST["ulice"])."','".($_POST["mesto"])."','".($_POST["psc"])."','".($_POST["sluzba"])."','".($_POST["od"])."','".($_POST["do"])."','".($_POST["rok"])."-".($_POST["mesic"])."-".($_POST["den"])."','".($_POST["mesic"])."')"))
{
    $zprava = "Pokud chcete potvrdit rezervaci na serveru Sportcentrum na skále, tak prosím navštivte tento odkaz:
http://$_SERVER[SERVER_NAME]/email_overit.php?id=" . mysql_insert_id() . "&rand_chars=$rand_chars
Pokud o rezervaci ve Sportcentru na skále zájem nemáte, tak tuto zprávu prosím ignorujte. Je možné , že někdo zneužil Vaši e-mailovou adresu.";
    $hlavicky = "MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit";
mail($_POST["email"], " Sportcentrumnaskale.cz Ověření emailu a potvrzení rezervace", $zprava, $hlavicky);
echo "Rezervace odeslána. Na Vaší e-mailovou adresu byl odeslán potvrzovací email, kterým do 24h musíte povtrdit rezervaci jinak bude smazána!<hr><br><br>";
}
}
else echo"<big><strong>Zadaný termín je obsazený!</strong></big><br>" ;
} else  {
    echo "<hr>Nezapomeňte vyplnit všechny údaje a vyplňujte je PRAVDIVĚ. Pokud vše nevyplníte nebude rezervace přijata!<br /> ";
                 };     ?>  

Moderátor Davex: Značka [pre] slouží pro formátování zdrojového kódu a ne celého příspěvku.
xmark
Profil
To porovnání zadaných datumů s datumy v databázi je kde?
tomasl
Profil *
beru to podle idcka , kde je datum,cas , sluzba od a do protoze mam 3 sluzby na rezervaci tak jsem to vyresil takhle pomoci slozenyho idcka
xmark
Profil
tomasl:
A to je veliká, veliká chyba. Ukládej ty hodnoty do jednotlivých sloupců, pak se ti problém zredukuje na podovnání dvou dvojic datumů. Jestli tvůj sloupec idcko je slepenec spousty hodnot, navíc ničím neoddělených, tak tvůj problém nemá řešení.
Kajman_
Profil *
Zkusil bych něco jako
$datum=intval($_POST["rok"])."-".intval($_POST["mesic"])."-".intval($_POST["den"]);
$sluzba=mysql_real_escape_string($_POST['sluzba']);
$od=mysql_real_escape_string($_POST['od']);
$do=mysql_real_escape_string($_POST['do']);
$kontrola=mysql_query(" select count(*) pocet_kolizi
						from   emaily
						where  datum = '$datum'
			 			      and sluzba = '$sluzba'
			   			    and do > '$od'
			   			    and od < '$do'");
if($row=mysql_fetch_assoc($kontrola) && $row['pocet_kolizi']==0)
{
	uloz
}


http://diskuse.jakpsatweb.cz/?action=vthread&forum=28&topic=108742#2
tomasl
Profil *
ale ja je mam zvlast, al púak mam jeste slozeny idcko to je jen kvuli tomu aby na stejne termin mohli uzivatel rezervovat squash a treba bowling amam t v jedny tabulce. Jink tam mam normalne sloupec OD a sloupec DO , ve formatu HH:MM:SS ale nevim jak porovnat to rozmezi. pokud mam rezervaci na squash od 15:00 do 17:00 aby nesl rezervovat od 15:30 do 16:30. to je ten rpoblem ...
tomasl
Profil *
Kajman:
Zkusil bych něco jako
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$datum=intval($_POST["rok"])."-".intval($_POST["mesic"])."-".intval($_POST["den"]);
$sluzba=mysql_real_escape_string($_POST['sluzba']);
$od=mysql_real_escape_string($_POST['od']);
$do=mysql_real_escape_string($_POST['do']);
$kontrola=mysql_query(" select count(*) pocet_kolizi
from emaily
where datum = '$datum'
and sluzba = '$sluzba'
and do > '$od'
and od < '$do'");
if($row=mysql_fetch_assoc($kontrola) && $row['pocet_kolizi']==0)
{
uloz
}


Zkusil jsem to ale bohuzel to stale prochazi...
Kajman_
Profil *
A přetypování nepomůže?
$kontrola=mysql_query(" select count(*) pocet_kolizi
                        from   emaily
                        where  datum = date('$datum')
                               and sluzba = '$sluzba'
                               and do > time('$od')
                               and od < time('$do')");
tomasl
Profil *
Kajman:
ne bohužel, stale to nejede, pousti to vsechny rezervace , jak duplicitni tak ty co se prolinaji casově
xmark
Profil
tomasl:
Možná by stálo za to vypsat sem strukturu té tabulky a dva nebo tři řádky z jejího obsahu. Můžeš k tomu použít záložku Export.
Kajman_
Profil *
Pošlete ještě výsledný kód, jak jste to tam zakomponoval, možná bude chyba tam :-)
tomasl
Profil *
takže kus tabulky :
CREATE TABLE `emaily` (
  `idcko` text character set utf8 collate utf8_czech_ci NOT NULL,
  `jmeno` varchar(20) character set utf8 collate utf8_czech_ci NOT NULL,
  `prijmeni` varchar(20) character set utf8 collate utf8_czech_ci NOT NULL,
  `telefon` varchar(20) character set utf8 collate utf8_czech_ci NOT NULL,
  `ulice` varchar(30) character set utf8 collate utf8_czech_ci NOT NULL,
  `mesto` varchar(20) character set utf8 collate utf8_czech_ci NOT NULL,
  `psc` varchar(7) character set utf8 collate utf8_czech_ci NOT NULL,
  `datum` date NOT NULL,
  `od` time NOT NULL,
  `do` time NOT NULL,
  `sluzba` varchar(20) character set utf8 collate utf8_czech_ci NOT NULL,
  `email` text character set utf8 collate utf8_czech_ci NOT NULL,
  `rand_chars` varchar(30) character set utf8 collate utf8_czech_ci NOT NULL,
  `overeno` tinyint(1) default NULL,
  `mesic` int(2) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- 
-- Vypisuji data pro tabulku `emaily`
-- 

INSERT INTO `emaily` VALUES ('2011121bowling_draha_jedna14:3017:00', 'tom.lesnovsky@gmail.', 'tom.lesnovsky@gmail.', '+420', 'tom.lesnovsky@gmail.com', 'tom.lesnovsky@gmail.', '67531', '2011-12-01', '14:30:00', '17:00:00', 'bowling_draha_jedna', 'tom.lesnovsky@gmail.com', 'mavb4lew', NULL, 12);
INSERT INTO `emaily` VALUES ('20110114bowling_draha_jedna18:0020:00', 'pavel', 'Adamec', '+420777958095', '', '', '', '2011-01-14', '18:00:00', '20:00:00', 'bowling_draha_jedna', '', '', 1, 1);
INSERT INTO `emaily` VALUES ('20110115bowling_draha_jedna17:0019:00', 'milan', 'Hanzal', '+420777958095', '', '', '', '2011-01-15', '17:00:00', '19:00:00', 'bowling_draha_jedna', '', '', 1, 1);
INSERT INTO `emaily` VALUES ('20110115bowling_draha_jedna18:0021:00', 'hana', 'máchova', '+420777958095', '', '', '', '2011-01-15', '18:00:00', '21:00:00', 'bowling_draha_jedna', '', '', 1, 1);
INSERT INTO `emaily` VALUES ('20110115bowling_draha_dve18:0021:00', 'hana', 'máchova', '+420', '', '', '', '2011-01-15', '18:00:00', '21:00:00', 'bowling_draha_dve', '', '', 1, 1);


a zdrojak po zabudovani prispevku od kajmana:

<?php           
if (!empty($_POST['jmeno']) && !empty($_POST['prijmeni'])  && !empty($_POST['email'])  && !empty($_POST['telefon'])  && !empty($_POST['ulice'])  && !empty($_POST['mesto'])  && !empty($_POST['psc']))
{ 
$datum=intval($_POST["rok"])."-".intval($_POST["mesic"])."-".intval($_POST["den"]);
$sluzba=mysql_real_escape_string($_POST['sluzba']);
$od=mysql_real_escape_string($_POST['od']);
$do=mysql_real_escape_string($_POST['do']);
$kontrola=mysql_query(" select count(*) pocet_kolizi
                        from   emaily
                        where  datum = date('$datum')
                               and sluzba = '$sluzba'
                               and do > time('$od')
                               and od < time('$do')");
if($row=mysql_fetch_assoc($kontrola) && $kontrola['pocet_kolizi']==0){
function rand_chars($count = 8, $chars = 36) {                                                                          
    $return = "";
    for ($i=0; $i < $count; $i++) {
        $rand = rand(0, $chars - 1);
        $return .= chr($rand + ($rand < 10 ? ord('0') : ($rand < 36 ? ord('a') - 10 : ord('A') - 36)));
    }
    return $return;
}
$rand_chars = rand_chars();
if (mysql_query("INSERT INTO emaily (idcko,email, rand_chars ,jmeno , prijmeni, telefon, ulice, mesto, psc, sluzba, od, do,datum,mesic) VALUES ('".($_POST["rok"]).($_POST["mesic"]).($_POST["den"]).($_POST["sluzba"]).($_POST["od"]).($_POST["do"])."','" . mysql_real_escape_string($_POST["email"]) . "' ,'$rand_chars','".($_POST["jmeno"])."','".($_POST["prijmeni"])."','".($_POST["telefon"])."','".($_POST["ulice"])."','".($_POST["mesto"])."','".($_POST["psc"])."','".($_POST["sluzba"])."','".($_POST["od"])."','".($_POST["do"])."','".($_POST["rok"])."-".($_POST["mesic"])."-".($_POST["den"])."','".($_POST["mesic"])."')"))
{
    $zprava = "Pokud chcete potvrdit rezervaci na serveru Sportcentrum na skále, tak prosím navštivte tento odkaz:
http://$_SERVER[SERVER_NAME]/email_overit.php?id="; . mysql_insert_id() . "&rand_chars=$rand_chars
Pokud o rezervaci ve Sportcentru na skále zájem nemáte, tak tuto zprávu prosím ignorujte. Je možné , že někdo zneužil Vaši e-mailovou adresu.";
    $hlavicky = "MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit";
mail($_POST["email"], " Sportcentrumnaskale.cz Ověření emailu a potvrzení rezervace", $zprava, $hlavicky);
echo "Rezervace odeslána. Na Vaší e-mailovou adresu byl odeslán potvrzovací email, kterým do 24h musíte povtrdit rezervaci jinak bude smazána!<hr><br><br>";
}
}
else echo"<big><strong>Zadaný termín je obsazený!</strong></big><br>" ;
} else  {
    echo "<hr>Nezapomeňte vyplnit všechny údaje a vyplňujte je PRAVDIVĚ. Pokud vše nevyplníte nebude rezervace přijata!<br /> ";
                 };     ?>       
Kajman_
Profil *
Já v tom prvním měl na chvíli $kontrola na místě, kde mělo být $row, ale si bude lepší i ošetřit chybu v dotazu.
<?
if (!empty($_POST['jmeno']) && !empty($_POST['prijmeni'])  && !empty($_POST['email'])  && !empty($_POST['telefon'])  && !empty($_POST['ulice'])  && !empty($_POST['mesto'])  && !empty($_POST['psc']))
{ 
	$datum=intval($_POST["rok"])."-".intval($_POST["mesic"])."-".intval($_POST["den"]);
	$sluzba=mysql_real_escape_string($_POST['sluzba']);
	$od=mysql_real_escape_string($_POST['od']);
	$do=mysql_real_escape_string($_POST['do']);
	$kontrola=mysql_query(" select count(*) pocet_kolizi
		from   emaily
		where  datum = date('$datum')
		and sluzba = '$sluzba'
		and do > time('$od')
		and od < time('$do')");
	$row=mysql_fetch_assoc($kontrola) or die($kontrola . " : " . mysql_error());
	if ($row['pocet_kolizi']==0){
		function rand_chars($count = 8, $chars = 36) {                                                                          
			$return = "";
			for ($i=0; $i < $count; $i++) {
				$rand = rand(0, $chars - 1);
				$return .= chr($rand + ($rand < 10 ? ord('0') : ($rand < 36 ? ord('a') - 10 : ord('A') - 36)));
			}
			return $return;
		}
		$rand_chars = rand_chars();
		if (mysql_query("INSERT INTO emaily (idcko,email, rand_chars ,jmeno , prijmeni, telefon, ulice, mesto, psc, sluzba, od, do,datum,mesic) VALUES ('".($_POST["rok"]).($_POST["mesic"]).($_POST["den"]).($_POST["sluzba"]).($_POST["od"]).($_POST["do"])."','" . mysql_real_escape_string($_POST["email"]) . "' ,'$rand_chars','".($_POST["jmeno"])."','".($_POST["prijmeni"])."','".($_POST["telefon"])."','".($_POST["ulice"])."','".($_POST["mesto"])."','".($_POST["psc"])."','".($_POST["sluzba"])."','".($_POST["od"])."','".($_POST["do"])."','".($_POST["rok"])."-".($_POST["mesic"])."-".($_POST["den"])."','".($_POST["mesic"])."')"))
		{
			$zprava = "Pokud chcete potvrdit rezervaci na serveru Sportcentrum na skále, tak prosím navštivte tento odkaz:
			http://$_SERVER[SERVER_NAME]/email_overit.php?id="; . mysql_insert_id() . "&rand_chars=$rand_chars
			Pokud o rezervaci ve Sportcentru na skále zájem nemáte, tak tuto zprávu prosím ignorujte. Je možné , že někdo zneužil Vaši e-mailovou adresu.";
			$hlavicky = "MIME-Version: 1.0
			Content-Type: text/plain; charset=utf-8
			Content-Transfer-Encoding: 8bit";
			mail($_POST["email"], " Sportcentrumnaskale.cz Ověření emailu a potvrzení rezervace", $zprava, $hlavicky);
			echo "Rezervace odeslána. Na Vaší e-mailovou adresu byl odeslán potvrzovací email, kterým do 24h musíte povtrdit rezervaci jinak bude smazána!<hr><br><br>";
		}
	}
	else echo"<big><strong>Zadaný termín je obsazený!</strong></big><br>" ;
} else  {
	echo "<hr>Nezapomeňte vyplnit všechny údaje a vyplňujte je PRAVDIVĚ. Pokud vše nevyplníte nebude rezervace přijata!<br /> ";
};     ?>       
tomasl
Profil *
Funguje to! Díky moc :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: