Newsgroup: it.comp.www.php
Titolo: Pensate di essere _veramente_ dei guru? Beccatevi questa!

Non conosco postgres, non sono un guru, comunque
dopo una lettura superficiale mi sembra che:
1.le tue query abbondano di LIKE.
Queste select comportano la lettura di tutti i record della tabella e  sono quindi lente; non vedo motivi per non sostituirle con delle condizioni di where campo='valore';
2.quando effettui le query per il controllo di esistenza , ti interessa sapere se esiste almeno un record e non hai bisogno di scorrere tutta la tabella. Se postgres le supporta, aggiungi alle condizioni di where qulcosa tipo "limit 1" o "select 1 where exists".
3.togli dove possibile le condizioni in or 
4.aggiungi qualche index al tuo db a seconda delle tue ricerche.
Ciao

5. Se devi effettuare dei controlli sui dati immessi dall'utente, perché non
usi JavaScript?
E client side e eviti di appesantire il parser php, castigando l'utente.


bleah! dovresti farli sia in javascript che in php...

Non sono un Guru quindi non ti rispondo, ma ce ne sono di cose migliorabili.
Tuttavia 15 secondi mi sembrano troppi... sicuro che il computer è settatto
correttamente?
Alla fine del tuo script hai:
////////////////////////////////////////////////////////
     /* se non inserisco, dico qual e' l'errore */
     else {
     $err_aut3n=pg_result($risqueryaut3,0,1);
     $err_aut3c=pg_result($risqueryaut3,0,2);
     echo("<Center><H3>ERRORE</H3>Il terzo autista <b>$err_aut3n
$err_aut3c</b> e' gia' impegnato nel periodo:<br> $inizio - $fine<br><br>
Ricontrollare i dati.");
     }
     else {
     $err_aut2n=pg_result($risqueryaut2,0,1);
     $err_aut2c=pg_result($risqueryaut2,0,2);
     echo("<Center><H3>ERRORE</H3>Il secondo autista <b>$err_aut2n
$err_aut2c</b> e' gia' impegnato nel periodo:<br> $inizio - $fine<br><br>
Ricontrollare i dati.");
     }
     else {
     $err_autn=pg_result($risqueryaut,0,1);
     $err_autc=pg_result($risqueryaut,0,2);
     echo("<Center><H3>ERRORE</H3>L'autista <b>$err_autn $err_autc</b> e'
gia' impegnato nel periodo:<br> $inizio - $fine<br><br> Ricontrollare i
dati.");
     }
     else {
     $err_pul=pg_result($risquerypul,0,1);
     echo("<Center><H3>ERRORE</H3>Il pullman <b>$err_pul</b> e' gia'
impegnato nel periodo:<br> $inizio - $fine<br><br> Ricontrollare i dati.");
////////////////////////////////////////////////////////
...ma come funzionano gli "else" a catena?
else {...}
else {...}
else {...}..????
Gli autisti non hanno neanche un giorno di riposo dopo un viaggio? =)
LAMASE

>bleah! dovresti farli sia in javascript che in php...
Perché?
M

 ha scritto nel messaggio
news:9lt78u$4ff$1...@newsfeed.cineca.it...


 Perché?
Perchè se l'utente ha un browser un po' vecchio o non ti fai il mazzo a
verificare che funzioni correttamente *almeno* con i 3 principali browser
(IE, NS, Opera più magari lynx e quelli linux), l'utente resta >troppo<
castigato. Sono cose molto odiose. Secondo me è giusto "appesantire" il php
con queste routines, risulta tutto più leggero e raggiungibile all'utente
(che è meglio), anche se in condizioni particolari.
--
ciauz
Maurizio Berti
maur...@jidesk.net
 - 
http://www.jidesk.net/
ICQ: 21686278
-------------------------------
"Non capirò mai la capacità femminile di evitare
una risposta diretta a qualsiasi domanda" - Spock

aggiungo che se uno li disabilita, oppure ricostruisce il form passando dati
sbagliati sono *cavoli* amari
LAMASE
"deverror" <deve...@yahoo.ocm> ha scritto nel messaggio
news:9ltbpq$5lh$1...@pegasus.tiscalinet.it...


sbagliati sono *cavoli* amari
Ammesso che qualcuno si prenda la briga di creare una pagina modificata per
fregare il db (ma a meno che non si eseguano transazioni commerciali
rischiamo di trascendere nella paranoia), mi sembra comunque molto difficile
che la cosa vada a buon fine: dipende da come sono fatti il form, lo script
di inserimento dei dati e il database.
Comunque si può sempre ricorrere a un file Javascript esterno, controllare
l'url di provenienza dei dati, eccetera.
Anche perché in ultima istanza uno può anche passare dati formalmente
corretti ma inesistenti o falsi. Quindi se proprio uno vuole dar fastidio,
il modo lo trova.
Il concetto era che è innegabilmente fastidioso per l'utente aspettare
decine di secondi per vedere poi un messaggio del tipo: "Hai dimenticato il
nome del tuo canarino!" oppure: "Il tuo numero di telefono è sbagliato:
riscrivilo completo di prefisso internazionale e senza separare le cifre" e
poi magari rischiare di non riuscire a recuperare i dati inseriti.
Quindi secondo me, visto che il problema era la lentezza dello script,
quando si può, far ricorso a innocui e rapidi controlli client-side rende le
cose senz'altro più veloci.
Ammetto che ci sono casi in cui ciò non è conveniente, o addirittura non è
possibile, ad esempio se si vogliono controllare eventuali duplicazioni di
record.
Che ne dite?
M

 record.
Siamo d'accordo, però allora lo scripter deve prendersi la briga di
assicurarsi che il suo form funzioni *comunque*. Sia che si utilizzino
vecchi browser, browser alternativi, browser con disabilitati i javascript,
browser alla crema e browser senza caffeina...
E magari aggiungere in fondo al modulo un check con scritto "attiva la
verifica dei dati prima di inviare il modulo", mettendo tutto l'algoritmo di
verifica dentro ad un graaaaaande if con if (document.mioForm.chkVerifica)
then ecc ecc...



[....]
paolo tosciri

 cose senz'altro più veloci.
il problema esiste sempre: devi fare il controllo anche dopo, non puoi
lasciare al javascript compiti importanti, ma potresti utilizzarlo per
controlli generali. Magari ti dice "hai scordato di riempire il campo...",
ma un IF in un programma php non richiede tanto tempo... (credo che sia
sull'ordine dei millesimi di secondo o giù di li)
LAMASE

 C'e' un metodo migliore per farlo?
questo va bene, ma č poco leggibile... sfrutti il fatto che il php quando
trova un else lo attacca all'IF piů vicino, poi continua..
Comunque se a te sta bene č perfetto.

 Con un case of?
come è meglio: puoi anche preparare un messaggio che mostri alla fine tipo
if (!$vabene)
{
    $ok = 0;
    $errorMsg .= "Errore A<br>\n"; // notare il .=
}
if (!$vabene2)
{
    $ok = 0;
    $errorMsg .= "Errore B<br>\n";
}
if (!$ok)
{
    echo $errorMsg;
    exit();
}

   -  Lord Quicksilver  -
invece di fare
//////////////////////////////////
if (condizione 1)
if (condizione 2)
if (condizione 3)
...
if (condizione i)
{
// istruzioni
}
else (mex errore i)
...
else (mex errore 3)
else (mex errore 2)
else (mex errore 1)
/////////////////////////////////
prova con
if (!condizione1) {mex 1}
else if (!condizione2) {mex 2}
else if (!condizione3) {mex 3}
else {
quello che devi fare
}
LAMASE


E se io visualizzo la pagina con un browser testuale o comunque che non
supporta javascript? ;-)
IMO, è sempre meglio utilizzare javascript+php.
Così il 95% degli utenti vengono "castigati" dal loro browser, se
proprio vogliono fare i furbi vengono castigati dal PHP (o qualunque
altro linguaggio si usi dalla parte del server).
E poi, non è che si appesantisca molto lo script con un controllo
server-side: con qualcosa del tipo:
if($variabile == "qualcosa") {
    castiga();
}
se  $variabile non è uguale a "qualcosa" il parser passa immediatamente
all'istruzione successiva; certo che per controlli più meticolosi (ad
esempio, basati su regexp) la cosa si fa un attimo più complessa, ma a
volte meglio sacrificare un po' (ma poca!!) di velocità a favore di una
maggiore sicurezza!
Questo, ovviamente, IMHO!
Ciao
--ev

			AND V.fine >= '$fine' ;";
Questo e' un errore. La riga che comincia con OR non ci deve essere.
Leonardo "alle tre di notte e gratis, questo e' il massimo che posso fare"
-- 
Nior thainig ar major i dtus an lae chugainn,
is ni rabhamar fein ann i gcoir na gceart
ach mar sheolfai aoireacht bo gan aoire,
ar thaobh na greine de Sliabh na mBan.

Probabilmente a questo punto sono arrivato al limite hardware del pc
No, SELECT COUNT(*) e SELECT dati in PostgreSQL non sono granche' diverse
...A PATTO CHE TU NON ESTRAGGA I DATI ;-)
E dato che non lo fai, ma usi solo pg_num_rows(), non noti differenze.
Leonardo


capitato di scrivere :-)
Cavolo di struttura...
Ma chi sei, l'amico dell'if()? ;)
Un'istruzione if() e' computazionalmente pesante, figuriamoci
quell'accrocchio annidato e riannodato.
IMHO meglio se ripensi tutto da zero.
Nota: non l'ho letto, ho solo fatto uno scroll, ma, da 
  vero_programmatore_TM, e' stato sufficiente ;):P:P:) (scherzo)
-- 
Filippo "Kirone" Zamengo 
Quanto scritto deve ritenersi IMHO e indipendente dal datore di lavoro
e-mail modificata: togliere DESPAM.

 Almeno, postgres non me lo fa fare...
ovvio anche questo, ma nel caso ti dia un errore in quel punto devi essere
pronto a gestirlo... e poi era un'ipotesi apocalittica!
Faci sapere come č andata a finire, allora!
LAMASE

Ricominciare da capo e' una perdita di tempo!
Okkei.
Da quel che vedo, presenti una form di soli campi INPUT, potresti
presentare delle liste combo con i nominativi degli autisti, con i
mezzi, eccetera, insomma con i dati poco variabili, prelevandoli
dal database.
Cosi' eviti qualsiasi controllo sui doppioni eccetera, dato un ID 
unico per le scelte fatte. Inoltre eviti i problemi derivanti 
dalla digitazione, dato che non digiti niente ma scegli da una lista.
Eccetera eccetera eccetera. Buon lavoro.
P.S.: Personalmente preferisco fare una buona analisi prima e
 migliorare quella, piuttosto che dover rimettere mano al codice.
 Ma ~de gustibus...~
