Problema con le prenotazioni

Max61

Utente Attivo
2 Mar 2014
740
4
18
Buongiorno, sto tentando di fare un programma di prenotazioni e mi sono arenato nella verifica se la prenotazione esiste già, in parte l'ho risolta, infatti se il giorno risulta già nel DB, me lo segnala, il problema rimane quello delle ore e non riesco a venirne a capo.
Allego query che utilizzo per la verifica:

PHP:
//VERIFICA SE ESISTE LA PRENOTAZIONE NEL DB
$db = mysql_connect($host, $user, $password); 
if ($db == FALSE) 
die ("Errore nella connessione."); 
mysql_select_db($database, $db) 
or die ("Errore nella selezione del database."); 

	 $id = ['id'];
	 $nominativo = ['nominativo'];
     $str_data = strtotime($_POST['data']);
     $oggi = strtotime($_POST['oggi']);
     $orainizio = strtotime($_POST['orainizio']);
     $orafine = strtotime($_POST['orafine']);

 
	$VerificaSePrenotato = "SELECT COUNT(*) FROM tblprenotazioneauto WHERE str_data = '{$str_data}'";
    $query = mysql_query($VerificaSePrenotato) or die(mysql_error());

    if (mysql_result($query, 0) == 0) {
		
		require 'InserisciPrenotazione.php';
        die('Hai già inserito questo record.');
		echo "<span style=\"color:blue height:1;width:1; background-color:white\">
	<b><i><span style=\"color:white; font-size: 14pt\"><span style=\"color:red height:1;width:1; background-color:red\">&nbsp;Giorno prenotato...&nbsp;</b></span>";			
	
	}
 	
			

	     $VerificaSePrenotato = "SELECT * from tblprenotazioneauto WHERE str_data = '{$str_data}'";
	     $result = mysql_query($VerificaSePrenotato) or die (mysql_error());
  
if(mysql_num_rows($result) > 0)
	 {
    while($fetch = mysql_fetch_array($result))
    {
      $id = stripslashes($fetch['id']);
	  $nominativo = stripslashes($fetch['nominativo']);
      $orainizio = stripslashes($fetch['orainizio']);
	  $orafine = stripslashes($fetch['orafine']);
	  $telefono = stripslashes($fetch['telefono']);
	  $note = stripslashes($fetch['note']);
	  $data = date("d-m-Y", $fetch['str_data']); 
	  echo "<br><span style=\"color:blue; font-size: 14pt\"><span style=\"color:white height:1;width:1; background-color:white\"> $nominativo, ", $data, "  ", $orainizio, "  ", $orafine, "";
	
	}
	}
//FINE VERIFICA SE ESISTE LA PRENOTAZIONE NEL DB

Gli altri campi da verificare sono $orainizio e $orafine, ho provato ad aggiungerli alla query sia con AND che con OR, ma con nessun risultato utile.

Grazie a chi saprà darmi una dritta

Max61
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
non so se il problema lo hai risolto, ma provo con una soluzione,

suppongo che nel db, per una prenotazione esiste il giorno ed anche l'ora di inizio e di fine

dovresti quindi verificare queste 3 situazioni,

la prenotazione si sovrappone ad un periodo già prenotato stando al suo interno
DB_orainizio $orainizio $orafine DB_orafine

la prenotazione copre parzialmente un peridodo già prenotato
$orainizio DB_orainizio $orafine

la prenotazione copre parzialmente un peridodo già prenotato
$orainizio DB_orafine $orafine

puoi fare un'unica query mettendo le 3 situazioni in or tra loro

prova anche a scambiare le ore DB con $, dovresti avere lo stesso risultato
ciao
Marino
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
non so se il problema lo hai risolto, ma provo con una soluzione,

suppongo che nel db, per una prenotazione esiste il giorno ed anche l'ora di inizio e di fine

dovresti quindi verificare queste 3 situazioni,

la prenotazione si sovrappone ad un periodo già prenotato stando al suo interno
DB_orainizio $orainizio $orafine DB_orafine

la prenotazione copre parzialmente un peridodo già prenotato
$orainizio DB_orainizio $orafine

la prenotazione copre parzialmente un peridodo già prenotato
$orainizio DB_orafine $orafine

puoi fare un'unica query mettendo le 3 situazioni in or tra loro

prova anche a scambiare le ore DB con $, dovresti avere lo stesso risultato
ciao
Marino


Ciao Marino e grazie per l'interessamento, il problema non l'ho risolto, ma non mi è chiaro -DB_orainizio-DB_orafine- e scambiare le ore DB con $.

Io ho questa query che mi controlla il giorno senza guardare l’orario:
PHP:
$VerificaSePrenotato = "SELECT * from tblprenotazioneauto WHERE str_data = '{$str_data}'"; 
         $result = mysql_query($VerificaSePrenotato) or die (mysql_error()); 
   
if(mysql_num_rows($result) > 0) 
     { 
    while($fetch = mysql_fetch_array($result)) 
    { 
      $id = stripslashes($fetch['id']); 
      $nominativo = stripslashes($fetch['nominativo']); 
      $orainizio = stripslashes($fetch['orainizio']); 
      $orafine = stripslashes($fetch['orafine']); 
      $telefono = stripslashes($fetch['telefono']); 
      $note = stripslashes($fetch['note']); 
      $data = date("d-m-Y", $fetch['str_data']);  
      echo "<br><span style=\"color:blue; font-size: 14pt\"><span style=\"color:white height:1;width:1; background-color:white\"> $nominativo, ", $data, "  ", $orainizio, "  ", $orafine, "";

Se mi puoi modificare la query come credi che debba essere fatto…
Grazie
Max61
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
ti ho indicato con $... i nomi delle variabili php e con DB_..... i nomi delle colonne nel database

per semplificare e per certezza potresti scrivere 4 clausole da inserire nella where,
Codice:
(DB_orainizio <= $orainizio <= DB_orafine) OR
(DB_orainizio <= $orafine <= DB_orafine) OR
($orainizio <= DB_orainizio <= $orafine) OR
($orainizio <= DB_orafine <= $orafine)
nelle parentesi deve essere usato AND
in questo modo viene verificata la sovrapposizione delle prenotazioni
ciao
Marino
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
ti ho indicato con $... i nomi delle variabili php e con DB_..... i nomi delle colonne nel database

per semplificare e per certezza potresti scrivere 4 clausole da inserire nella where,
Codice:
(DB_orainizio <= $orainizio <= DB_orafine) OR
(DB_orainizio <= $orafine <= DB_orafine) OR
($orainizio <= DB_orainizio <= $orafine) OR
($orainizio <= DB_orafine <= $orafine)
nelle parentesi deve essere usato AND
in questo modo viene verificata la sovrapposizione delle prenotazioni
ciao
Marino



Grazie e scusa per la mia ignoranza in materia ma è da poco che mi cimento con PHP e MYSQL, quindi so fare poche cose, però mi piace programmare e quindi ci provo.

Ho testato il tuo codice:
PHP:
$sql = "SELECT * from tblprenotazioneauto WHERE str_data = '{$str_data}' AND (DB_orainizio <= $orainizio <= DB_orafine) OR
(DB_orainizio <= $orafine <= DB_orafine) OR
($orainizio <= DB_orainizio <= $orafine) OR
($orainizio <= DB_orafine <= $orafine)";

ma mi da questo errore di sintassi che non comprendo:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<= DB_orafine) OR (DB_orainizio <= <= DB_orafine) OR ( <= DB_orainizio <= ) OR ' at line 1


Grazie ancora per la pazienza...
Max61
 
Ultima modifica:

Max61

Utente Attivo
2 Mar 2014
740
4
18
Ho fatto altre prove mettendo il $ al posto di DB_ e non mi da più errore, ma nel caso il giorno sia già prenotato (non verifica l'orario) mi mostra tutte le prenotazioni presenti nel DB.
La query che ho usato è questa:
PHP:
$sql = "SELECT * from tblprenotazioneauto WHERE str_data = '{$str_data}' AND ($orainizio <= $orainizio <= $orafine) OR
($orainizio <= $orafine <= $orafine) OR
($orainizio <= $orainizio <= $orafine) OR
($orainizio <= $orafine <= $orafine)";

Dove sbaglio?

Grazie
Max61
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
scusa ma non conoscendo i nomi dei campi nel db avevo scritto solo l'indicazione per la costruzione delle clausole
la select la comporrei in questa forma,

Codice:
SELECT * from tblprenotazioneauto WHERE str_data=$str_data AND (
($orainizio BETWEEN DB_orainizio AND DB_orafine) OR
($orafine   BETWEEN DB_orainizio AND DB_orafine) OR
(DB_orainizio BETWEEN $orainizio AND $orafine)   OR
(DB_orafine   BETWEEN $orainizio AND $orafine)   )

devi sostituire i nomi "DB_orainizio" e "DB_orafine" con i nomi usati nel database
ciao
Marino
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Ciao Marino, ho provato come mi hai suggerito, ma la verifica la ancora soltanto sul giorno a meno che non abbia sbagliato a fare la query...che allego:
PHP:
$sql = "SELECT * from tblprenotazioneauto WHERE str_data=$str_data AND (
($orainizio BETWEEN $orainizio AND $orafine) OR
($orafine   BETWEEN $orainizio AND $orafine) OR
($orainizio BETWEEN $orainizio AND $orafine) OR
($orafine   BETWEEN $orainizio AND $orafine))";

I campi sono nel DB sono:
$orainizio
$orafine

Grazie
Max61
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
direi che sono sbagliati i nomi che hai sostituito,
nella tabella "tblprenotazioneauto" hai la colonna "str_data", nella stessa tabella come si chiamano le colonne relative all'ora di inizio e all'ora di fine ?
certamente quando inserisci un nome preceduto da "$" ti riferisci alla variabile php non certo alla colonna del db
puoi postare le definizioni della tabella "tblprenotazioneauto" ?
ciao
Marino
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Il campo $str_data fa parte della tabella "tblprenotazioneauto".
Questo è il DB completo:

PHP:
-- phpMyAdmin SQL Dump
-- version 4.0.4.1
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generato il: Ago 28, 2015 alle 16:18
-- Versione del server: 5.6.11
-- Versione PHP: 5.5.3

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `prenotazioneauto`
--

-- --------------------------------------------------------

--
-- Struttura della tabella `tblprenotazioneauto`
--

CREATE TABLE IF NOT EXISTS `tblprenotazioneauto` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `nominativo` varchar(100) NOT NULL,
  `str_data` varchar(20) NOT NULL,
  `oggi` varchar(250) NOT NULL,
  `datautilizzoauto` varchar(50) NOT NULL,
  `orainizio` varchar(50) NOT NULL,
  `orafine` varchar(50) NOT NULL,
  `telefono` varchar(50) NOT NULL,
  `note` text NOT NULL,
  `data` varchar(100) NOT NULL,
  `titolo` varchar(250) NOT NULL,
  `testo` varchar(250) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=84 ;

--
-- Dump dei dati per la tabella `tblprenotazioneauto`
--

INSERT INTO `tblprenotazioneauto` (`id`, `nominativo`, `str_data`, `oggi`, `datautilizzoauto`, `orainizio`, `orafine`, `telefono`, `note`, `data`, `titolo`, `testo`) VALUES
(63, 'Pippo', '1440972000', '1440712800', '1440972000', '07.30', '09.30', '333', '', '', '', ''),
(79, 'Pluto', '1440540000', '1440712800', '1440540000', '09.30', '10.00', '333', '', '', '', '');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Ciao
Max61
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
N Problema con position absolute e overflow HTML e CSS 4
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
K [PHP] Problema con variabili concatenate. PHP 1
O problema con query PHP 4
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
M Problema con Try Catch PHP 0
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
R problema con else PHP 0
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
G Problema con Get page PHP 4
P Problema con require once PHP 6
P Problema con i package Java 1
A Problema login con Safari PHP 14
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 0
S problema con css bootstrap3 HTML e CSS 4
M .load() problema con caricamenti dinamici di js Javascript 0
G Problema con eccessiva nitidezza apertura Camera Raw Photoshop 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
T problema con select dinamica con jquery Javascript 0
S Problema con spazi bianchi HTML e CSS 5
A PROBLEMA: insert mysqli con dati Tagsinput Presentati al Forum 0
Tommy03 Problema con z-index HTML e CSS 3
M Problema inserimento parole con apostrofo nel db PHP 5
C Problema con dati meteo xml XML 1
S Problema con infrarossi videocamera IP Cam e Videosorveglianza 1
V Problema con librerie allegro5 c++ C/C++ 1
M Problema con php per calcolo costo percentuale PHP 7
S Problema con mysqli_num_rows PHP 18
grgfede Problema javascript con aruba Javascript 1

Discussioni simili