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 |
#2 · Zasláno: 22. 1. 2011, 20:26:00
To porovnání zadaných datumů s datumy v databázi je kde?
|
||
tomasl Profil * |
#3 · Zasláno: 22. 1. 2011, 20:28:45
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 |
#4 · Zasláno: 22. 1. 2011, 20:35:43
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 * |
#6 · Zasláno: 22. 1. 2011, 20:42:01
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 * |
#7 · Zasláno: 22. 1. 2011, 20:53:54
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 * |
#8 · Zasláno: 22. 1. 2011, 20:59:40
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 * |
#9 · Zasláno: 22. 1. 2011, 21:04:13
Kajman:
ne bohužel, stale to nejede, pousti to vsechny rezervace , jak duplicitni tak ty co se prolinaji casově |
||
xmark Profil |
#10 · Zasláno: 22. 1. 2011, 21:08:18
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 * |
#11 · Zasláno: 22. 1. 2011, 21:08:38
Pošlete ještě výsledný kód, jak jste to tam zakomponoval, možná bude chyba tam :-)
|
||
tomasl Profil * |
#12 · Zasláno: 22. 1. 2011, 21:13:29
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 * |
#13 · Zasláno: 22. 1. 2011, 21:26:42
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 * |
#14 · Zasláno: 22. 1. 2011, 21:31:16
Funguje to! Díky moc :-)
|
||
Časová prodleva: 13 let
|
0