Newsgroup: it.comp.www.php
Titolo: Lo strano caso del dottor switch.

Accade una cosa molto strana, supponendo che in db_query ci sia una SELECT
che riporta 0,1,X>1 risultati, provate a vedere cosa accade al valore $righe
prima e dopo la switch;
Quando $righe č maggiore di 1 prima della switch, durante la switch cambia
valore?!?!??
Qualcuno mi sa dire perchč?
A voi il codice in questione, fate in modo che la select in $db_query
riporti prima 0 righe poi una riga e poi un numero di righe maggiore di uno.
Ho forse trovato un bug?
-------------------------------------------
$result = mysql_query($db_query, $link);
$righe = mysql_num_rows($result);
echo "<BR>righe prima dello switch = $righe\n";
switch ( $righe ) {
    case $righe = 0:
    $messaggio = "Non sono stati trovati record che soddisfano la query.";
    break;
    case $righe = 1:
    $messaggio = " E' stato trovato solo 1 record che soddisfa la query.";
    break;
    case $righe>1:
    $messaggio = "Sono stati trovati " .  $righe . " record che soddisfano
la query.";
    break;
    default:
    $messaggio = "Righe dentro lo  switch = " . $righe;
}
echo "<BR>righe dopo lo switch= $righe\n";
echo "<BR><B> " . $messaggio . "  $righe </B><BR>\n";
----------------------------------------------------------------------------
-
Cordialmente.
Carmelo Carchedi.

Scusate, sono veramente un rosPHPo!!!!
Ho trovato l'inghippo
usavo = invece di == nei confronti.
Sono impazzito un'ora!!!
Spero che serva di aiuto a qualcuno comunque.
Grazie.
Cordialmente.
Carmelo Carchedi

Sono impazzito un'ora!!!
if ($var=x) invece che if ($var==x) è uno dei classici
errori di chi programma in PHP (e in C ed in altri linguaggi
che utilizzano questa sintassi).
Non preoccuparti, proprio ieri ho perso 10 minuti prima di
accorgermene di un errore simile:)
--
I'm thinking about a cool signature:)
Coming soon...


Ma che sintassi usi per un switch?
Quello che fai tu e' un misto strano (a parte l'errore di assegnare un
valore)
usando espressioni booleane e questo valore lo verifichi con $righe (che tu
non intendi ad essere booleana).
Anche se nel tuo caso specifico funziona (perche' PHP perdona) non e' la
sintassi abituale da usare!
Potevi anche scrivere switch("PIPPO") o switch(0) e' funziona lo stesso!
La sintassi corretta e strutturata e':
switch ($righe) {
   case 0:
     $messaggio = "Non sono stati trovati record che soddisfano la query.";
     break;
   case 1:
     $messaggio = " E' stato trovato solo 1 record che soddisfa la query.";
     break;
   default:
     $messaggio = "Sono stati trovati " .  $righe . " record che soddisfano
 la query.";
     break;
}
HTH
Jurgen

Grazie, č la sintassi che ho trovato sul manuale e anche su quello on-line.
Cordialmente.
Carmelo Carchedi.


Su quello online non trovi neanche un esempio fatto cosi. Sempre e' solito
switch($var) {
   case valore1:break;
   case valore2:break;
   default:break;
}
Greenspan (pag. 102) neanche.
Altri libri non credo. Forse non hai interpretato bene gli esempi. Tra
altro, la tua sintassi va bene, ma il problema sta nascosto nel creare
valori booleani quando non servono. insomma, fai un switch ma inrealta' e
una catena di if(expression)

valore?!?!??
Io sto cercando di abituarmi a scrivere i confronti cosi':
	<valore> == $variabile
Se mi scappa un =, me ne accorgo in frettissima :-)
Leonardo

 wrote in message
news:ugvvhugoqmcae3s91...@L.Serni...

Ma non penso che _tu_ lo usi in un case di uno switch... !?

Ma non penso che _tu_ lo usi in un case di uno switch... !?
No... ma, se mai succedesse... :-)
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.


Non me ne ero accorto, non leggendo il codice.
In effetti, la sintassi dà luogo ad una stranissima logica :
switch($res) {
  case $res==1 -->equivale a case 1 nel caso che $res sia
pari a 1 o a case 0 nel caso $res sia diverso da 1.
Cmq, una logica del genere forse potrebbe tornare utile in
qualche caso alquanto raro.
-- 
WEbdOM webmaster di
Metronic.It mobile phone philosophy

 qualche caso alquanto raro.
Il caso alquanto raro viene coperto da if (expr) block <else block>
switch("ciao come va") {
  case $res==1: echo "res "; break;
  case $pip==1: echo "pip "; break;
  case $mam==1: echo "mam "; break;
  case $pap==2: echo "pap "; break;
}
funziona, ma non ha senso. Anzi potrebbe confonderti infinitamente.
Esempio:
    $res=1,
    $pip=0,
    $mam=1;
    $pap=2;
Ti stampera' solo 'res ' e non 'res mam pap ' anche se la condizione di $mam
e $pap sono ok.
Non ha senso mettere valori booleane in un case (e di quello si tratta se
fai $var==,$var>,$var< ecc.).
switch("ciao come va") {
  case $res<1: echo "res "; break;
  case $pip>2: echo "pip "; break;
  case $mam==1: echo "mam "; break;
  case $pap*3>1: echo "pap "; break;
}
in questo caso sara' difficile capire cosa ottieni.
BTW, in linguaggi come il C, non puoi mettere i case cosi (non possono
essere valori dinamici che cambiano da una esecuzione all'altra,
ottimizzando cosi anche il codice finale).