Problema con operatore or

di il
1 risposte

Problema con operatore or

Salve a tutti. Uso mysql (mariadb) per il lavoro intellettuale e nella fatispecie per visualizzare su pagina php in localhost un database bibliografico.
Non riesco a trovare la giusta sintassi per far sì che gli articoli non abbiano edizione, luogo e data subito dopo il titolo.
Se uso questa funziona, ma solo per i contributi (in opera collettiva)
if(trim($row["tipologia"])=='opera collettiva' or 'libro' and  (trim($row["tipologia"])!= 'contributo')){echo " $row[edizione], $row[luogo], $row[data]";} else {echo "";}
Se invece aggiungo un 'or', cioè così
if(trim($row["tipologia"])=='opera collettiva' or 'libro' and  (trim($row["tipologia"])!= 'contributo' [b]or 'articolo'[/b])){echo " $row[edizione], $row[luogo], $row[data]";} else {echo "";}
non funziona più: mi da edizione, luogo e data sia per i contributi sia per gli articoli.
Ne ho provate tante, ma senza successo.

Mi potete dare una mano?
Grazie

Il codice complessivo è il seguente
<?php
$query = "SELECT * FROM `bibliografie__pro-doctorato` WHERE letto = 'si' order by autore";
$result = mysqli_query($db, $query);
while ($row = mysqli_fetch_array($result))
{ 

echo "<p class=\"td\">";
/*mette 'ed.' se c'e un curatore, 'eds.', se sono piu di uno, oppure mette l'autore*/
if($row["tipologia"]=='opera collettiva' and $row["curatore_unico"]=='no') {echo "<span class=\"eds\">$row[curatori] (eds.), ";} elseif ($row["tipologia"]=='opera collettiva' and $row["curatore_unico"]=='si') {echo "<span class=\"eds\">$row[curatori] (ed.), ";} else {echo "<span class=\"autore\">$row[autore]";}

/*aggiunge il nome, se c'e'*/
$nome = substr($row["autore_nome"],0,1);
if(trim($row["autore_nome"])=='') {echo "";} else {echo", $nome.";}

echo "</span> ["."$row[data]],"; 
if($row["tipologia"]=='contributo') {echo " <q>$row[titolo]</q>,";}
else {echo " <i class=\"$row[tipologia]\">$row[titolo]</i>, ";}

if(trim($row["tipologia"])=='opera collettiva' or 'libro' and  (trim($row["tipologia"])!= 'contributo' or 'articolo')){echo " $row[edizione], $row[luogo], $row[data]";} else {echo "";}

if(trim($row["tipologia"])=='contributo') {echo " in <i>$row[opera]</i>, $row[edizione], $row[luogo], pp. $row[pagg], ";} else {echo"";}
if(trim($row["tipologia"])=='articolo') {echo " in <i class=\"rivista\">$row[rivista]</i>, n.$row[num], pp. $row[pagg]";} else {echo "";}

if(trim($row["trad_titolo"])=='') {echo "";} elseif ($row["tipologia"]!='libro') {echo " (tr.it. in <i class=\"libro\">$row[trad_titolo]</i>, $row[trad_edizione], $row[trad_luogo]  $row[trad_data]),";} else {echo " (tr.it. <i class=\"libro\">$row[trad_titolo]</i>, $row[trad_edizione], $row[trad_luogo]  $row[trad_data]),";}


if(trim($row["sigla"])=='') {echo "";} else {echo " [<b>$row[sigla]</b>]";}
if(trim($row["contenuti"])=='') {echo "";} else {echo "<div class=\"cont\">$row[contenuti]</div>";}
}
?>

1 Risposte

  • Re: Problema con operatore or

    Mi pare che si risolva così (chiamiamolo A)
    if (trim($row["tipologia"]=='articolo')){echo "";} elseif (trim($row["tipologia"])=='opera collettiva' or 'libro' and  (trim($row["tipologia"])!= 'contributo')){echo " $row[edizione], $row[luogo], $row[data]";} else {echo "";}
    Direi che funziona. ma devo fare ancora qualche prova.

    EDIT
    Sì, risolto è risolto, ma vorrei capire perché.

    ad esempio vorrei capire perché il seguente (chiamiamolo B) non è equivalente al primo (A)
    if (trim($row["tipologia"]=='articolo' or 'contributo')){echo "";} elseif (trim($row["tipologia"])=='opera collettiva' or 'libro'){echo " $row[edizione], $row[luogo], $row[data]";} else {echo "";}
Devi accedere o registrarti per scrivere nel forum
1 risposte