[PHP] Sostituire if ed elseif con operatore ternario switch

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Ciao a tutti,
mi è successa una cosa stranissima con un codice php, in sostanza ho un link che ho nominato "APPUNTAMENTI OGGI", questo link punta ad uno script php che controlla e mostra a video (o meglio dovrebbe) tutti gli appuntamenti della giornata odierna. Bene, utilizzo lo script su un sito test e quando clicco su link mi vengono correttamente mostrati a video tutti gli appuntamenti di oggi. Ho caricato lo stesso script su un NAS locale, stessa versione di php e orario e data perfettamente aggiornato, quando clicco su "APPUNTAMENTI DI OGGI" mi vengono mostrati a video tutti gli appuntamenti del giorno successivo e non quelli con data = date()

Lo script è composto da tanti if e sono consapevole che il sistema prende in considerazione l'ultimo if, chiedo a voi un supporto per strutturare lo script in modo tale che se si verifica la condizione deve uscire dal ciclo senza verificare gli altri if.

PHP:
$today = date("Y-m-d");
//$today = date('Y-m-d');


$tipo = trim(strip_tags(stripslashes($_GET['tipo'])));
$data = trim(strip_tags(stripslashes($_GET['data'])));
$cliente = trim(strip_tags(stripslashes($_GET['cliente'])));

if ($tipo == "tutti") {
$sql = "SELECT * FROM appuntamenti ORDER BY stato_pren ASC, data ASC";
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
}


if ($tipo == "accettazione" && $data == "oggi") {
$sql = "SELECT * FROM appuntamenti WHERE data = '$today' AND stato_pren = 'ACCETTAZIONE' ORDER BY data ASC";
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
}

if ($tipo == "lavorazione" && $data == "oggi") {
$sql = "SELECT * FROM appuntamenti WHERE data = '$today' AND stato_pren = 'LAVORAZIONE' ORDER BY data ASC";
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
}

if ($tipo == "terminato" && $data == "oggi") {
$sql = "SELECT * FROM appuntamenti WHERE data = '$today' AND stato_pren = 'TERMINATO' ORDER BY data ASC";
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
}


if ($tipo == "accettazione" && $data == "oggi" && $cliente == "privato") {
$sql = "SELECT * FROM appuntamenti WHERE data = '$today' AND stato_pren = 'ACCETTAZIONE' and tipo_pren = 'CLIENTE PRIVATO'";
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
}

if ($tipo == "lavorazione" && $data == "oggi" && cliente == "privato") {
$sql = "SELECT * FROM appuntamenti WHERE data = '$today' AND stato_pren = 'LAVORAZIONE' AND tipo_pren = 'CLIENTE PRIVATO' ORDER BY data ASC";
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
}

if ($tipo == "terminato" && $data == "oggi" && $cliente == "privato") {
$sql = "SELECT * FROM appuntamenti WHERE data = '$today' AND stato_pren = 'TERMINATO' AND tipo_pren = 'CLIENTE PRIVATO' ORDER BY data ASC";
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
}

if ($tipo == "accettazione" && $data == "oggi" && $cliente == "noleggio") {
$sql = "SELECT * FROM appuntamenti WHERE data = '$today' AND stato_pren = 'ACCETTAZIONE' AND tipo_pren = 'CLIENTE NOLEGGIO' ORDER BY data ASC";
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
}


if ($tipo == "lavorazione" && $data == "oggi" && $cliente == "noleggio") {
$sql = "SELECT * FROM appuntamenti WHERE data = '$today' AND stato_pren = 'LAVORAZIONE' AND tipo_pren = 'CLIENTE NOLEGGIO' ORDER BY data ASC";
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
}

if ($tipo == "terminato" && $data == "oggi" && $cliente == "noleggio") {
$sql = "SELECT * FROM appuntamenti WHERE data = '$today' AND stato_pren = 'TERMINATO' AND tipo_pren = 'CLIENTE NOLEGGIO' ORDER BY data ASC";
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
}

if ($tipo == "tutti" && $data == "oggi") {
$sql = "SELECT * FROM appuntamenti WHERE data = '$today' ORDER BY data ASC";
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
}

if ($count == 0) {
echo "<p style='text-align:center;margin-top: 10%;'>Non ci sono appuntamenti nel database.</p>";
}else{ ...

Grazie :)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prova così
PHP:
<?php
//......
if ($tipo == "tutti") {
    $where="";
}elseif ($tipo == "accettazione" && $data == "oggi") {
    $where = " WHERE data = '$today' AND stato_pren = 'ACCETTAZIONE' ";
}elseif($tipo == "lavorazione" && $data == "oggi") {
    $where = " WHERE data = '$today' AND stato_pren = 'LAVORAZIONE' ";
}elseif ($tipo == "terminato" && $data == "oggi") {
    $where = " WHERE data = '$today' AND stato_pren = 'TERMINATO' ";
}elseif ($tipo == "accettazione" && $data == "oggi" && $cliente == "privato") {
    $where = " WHERE data = '$today' AND stato_pren = 'ACCETTAZIONE' and tipo_pren = 'CLIENTE PRIVATO'";
}elseif ($tipo == "lavorazione" && $data == "oggi" && cliente == "privato") {
    $where = " WHERE data = '$today' AND stato_pren = 'LAVORAZIONE' AND tipo_pren = 'CLIENTE PRIVATO' ";
}elseif ($tipo == "terminato" && $data == "oggi" && $cliente == "privato") {
    $where = " WHERE data = '$today' AND stato_pren = 'TERMINATO' AND tipo_pren = 'CLIENTE PRIVATO' ";
}elseif ($tipo == "accettazione" && $data == "oggi" && $cliente == "noleggio") {
    $where = " WHERE data = '$today' AND stato_pren = 'ACCETTAZIONE' AND tipo_pren = 'CLIENTE NOLEGGIO' ";
}elseif ($tipo == "lavorazione" && $data == "oggi" && $cliente == "noleggio") {
    $where = " WHERE data = '$today' AND stato_pren = 'LAVORAZIONE' AND tipo_pren = 'CLIENTE NOLEGGIO' ";
}elseif ($tipo == "terminato" && $data == "oggi" && $cliente == "noleggio") {
    $where = " WHERE data = '$today' AND stato_pren = 'TERMINATO' AND tipo_pren = 'CLIENTE NOLEGGIO' ";
}elseif ($tipo == "tutti" && $data == "oggi") {
    $where = " WHERE data = '$today' ";
}
$sql = "SELECT * FROM appuntamenti $where ORDER BY data ASC";
var_dump($sql);//per verificare che venga scritta come vuoi, poi lo togli
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);
if($count==0){
    //......
}else{
    //........
}
//.....
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
dimenticavo metti un var_dump anche alla data per verificare che venga scritta come deve
PHP:
<?php
//......
$today = date("Y-m-d");
var_dump($today);
//....
?>
e a $data
 

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Buongiorno e grazie mille per la risposta,
allora ho provato il tuo script e la parte che riguarda i clienti privati sembra funzionare, il problema si presenta qui

PHP:
index.php?page=lista_appuntamenti_oggi&tipo=accettazione&data=oggi&cliente=noleggio

viene eseguita la query

PHP:
string(104) "SELECT * FROM appuntamenti WHERE data = '2017-05-24' AND stato_pren = 'ACCETTAZIONE' ORDER BY data ASC"
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se non ho capito male nel caso di quel link manca
page=lista_appuntamenti_oggi&tipo=accettazione&data=oggi&cliente=noleggio
verifica che esista l'elseif con quelle condizioni se non esiste devi aggiungerlo e costruire il $where, se esiste verifica il corrispondente $where che sia formato giusto
eventualmente fai anche la verifica dei get
PHP:
//.....
echo "<pre>";// poi le togli
var_dump($_GET);
echo "</pre>";

$tipo = trim(strip_tags(stripslashes($_GET['tipo'])));
$data = trim(strip_tags(stripslashes($_GET['data'])));
$cliente = trim(strip_tags(stripslashes($_GET['cliente'])));
//.....
 

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Grazie borgo italia,
adesso lo script funziona, volevo chiederti sempre restando in topic, per farmi mostrare solo gli appuntamenti con data inferiore ad oggi, come potrei modificare ?

PHP:
<?php

$tipo = trim(strip_tags(stripslashes($_GET['tipo'])));

if ($tipo == "tutti") {
    $where = "WHERE data = '$oggi'";

}elseif ($tipo == "accettazione") {
    $where = "WHERE stato_pren = 'ACCETTAZIONE' AND tipo_pren = 'CLIENTE PRIVATO'";

}elseif ($tipo == "lavorazione") {
    $where = "WHERE stato_pren = 'LAVORAZIONE' AND tipo_pren = 'CLIENTE PRIVATO'";

}elseif ($tipo == "terminato") {
    $where = "WHERE stato_pren = 'TERMINATO' AND tipo_pren = 'CLIENTE PRIVATO'";
}

$sql = "SELECT * FROM appuntamenti $where ORDER BY data ASC";
//var_dump($sql);
$res = $mysqli->query($sql);
$count = mysqli_num_rows($res);

if ($count == 0) {
echo "<p style='text-align:center;margin-top: 10%;'>Non ci sono appuntamenti in $tipo di Clienti Privati nel database.</p>";
}else{ ... stampo la tabella
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
non è semplice risponderti per vari motivi
il primo dovrei sapere come è struuurata la tabella che così a naso mi sembra anche molto ridondante
poi io non avre mai usato il get (sempre potenzialmete pericoloso) per fare le ricerche, ma mi sarei fatto fatto un form con le varie possibili selezioni passate via post
non so, ma può essere una mia personale impressione, mi sembra che tu ti stia incasinando un po'
non so se sei all'inizio del lavoro, ma se sei all'inizio se fossi in te ripenserei un po' al tutto, meglio ripartire da zero che incasinarsi

prova a postare a parole cosa vorresti fare, mi sbaglierò ma mi sembra che tu stia lavorando per seguire delle commesse di lavoro, giusto?
 

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Si, sto provando insieme ad un caro amico a mettere in piedi un progettino per seguire delle commesse di lavoro, in sostanza avrei la necessità di costruire una query che faccia questo:

Seleziona dalla tabella appuntamenti tutti gli appuntamenti cliente privato --> stato accettazione con con data < di oggi
Seleziona dalla tabella appuntamenti tutti gli appuntamenti cliente privato --> stato lavorazione e con con data < di oggi
Seleziona dalla tabella appuntamenti tutti gli appuntamenti cliente privato --> stato terminato con con data < di oggi

Seleziona dalla tabella appuntamenti tutti gli appuntamenti cliente noleggio --> stato accettazione con con data < di oggi
Seleziona dalla tabella appuntamenti tutti gli appuntamenti cliente noleggio --> stato lavorazione e con con data < di oggi
Seleziona dalla tabella appuntamenti tutti gli appuntamenti cliente noleggio --> stato terminato con con data < di oggi
 
Discussioni simili
Autore Titolo Forum Risposte Data
C [PHP] SOSTITUIRE VALORI DENTRO STRINGA PHP 0
L [PHP] Sostituire link da stringa PHP 3
M sostituire parte di URL con espressioni regolari PHP PHP 8
IImanuII Php sostituire un iframe PHP 4
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0

Discussioni simili