condizioni in sql

Rare

Nuovo Utente
12 Mag 2010
6
0
1
salve a tutti
sono nuovo quindi colgo l'occasione per presentarmi.
potete chiamarmi Rare (pronuncia inglese!) e sviluppo grafiche per allplicazioni web.
cmq passiamo al mio problema...
ho iniziato da circa un anno a studiare php; e devo dire che mi è rimasto anche molto semplice; ma da ieri sto sbattendo la testa contro una query.
vi spiego cosa dovrei fare:
in pratica un piccolo motore di ricerca all'interno di un sito
quindi ho:
una casella di testo
un elenco/menu
e un pulsante
(ovviamente dentro un form)
facendo prendere i valori (categoria) all'elenco/menu dal database, il form restituisce un risultato dove è presente la parola della text (all'interno della descrizione,nome,marca,categoria del prodotto) nella categoria selezionata.
e fin qui funziona tutto.
questo è l'sql funzionante

SELECT *
FROM prodotti
WHERE (descrizione LIKE %colname% OR nome LIKE %colname% OR marca LIKE %colname% OR categoria LIKE %colname%) AND categoria = cat AND prezzo<= costo

ora da questo sql dovrei fare una cosa del genere

if categoria="qualsiasi" then
SELECT *
FROM prodotti
else
SELECT *
FROM prodotti
WHERE (descrizione LIKE %colname% OR nome LIKE %colname% OR marca LIKE %colname% OR categoria LIKE %colname%) AND categoria = cat AND prezzo<= costo

ma purtr l'istruzione IF all'interno del sql non si può utilizzare come posso realizzare questa query????
aiutatemi per favore
 

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
Ciao Rare,

benvenuto nel forum.

potresti optare per una soluzione che non sia necessariamente scritta in sql, ma la condizione puoi effettuarla direttamente in php e, a secondo dell'esito fare eseguire la query opportuna. Mettiamo il caso che $cat contiene la categoria selezionata nel form, potresti fare in questo modo:
PHP:
$query = "";
if(strcasecmp($cat,"qualsiasi")==0) {
    $query = "SELECT * FROM prodotti";
} else {
    $query = "SELECT *
        FROM prodotti WHERE (descrizione LIKE %colname% OR nome LIKE %colname% OR marca LIKE %colname% OR categoria LIKE %colname%) AND categoria = '".$cat."' AND prezzo<=".$costo; 
}

$result = mysql_query($query);
 

Rare

Nuovo Utente
12 Mag 2010
6
0
1
grazie della risposta
Quindi sostituisco:

PHP:
mysql_select_db($database_con_IH, $con_IH);
$query_RS_prodotti = sprintf("SELECT * FROM prodotti WHERE (descrizione LIKE %s OR nome LIKE %s OR marca LIKE %s OR categoria LIKE %s) AND categoria = %s AND prezzo<= %s AND categoria <> "Qualsiasi"  ", GetSQLValueString("%" . $colname_RS_prodotti . "%", "text"),GetSQLValueString("%" . $colname_RS_prodotti . "%", "text"),GetSQLValueString("%" . $colname_RS_prodotti . "%", "text"),GetSQLValueString("%" . $colname_RS_prodotti . "%", "text"),GetSQLValueString($cat_RS_prodotti, "text"),GetSQLValueString($costo_RS_prodotti, "int"));
$query_limit_RS_prodotti = sprintf("%s LIMIT %d, %d", $query_RS_prodotti, $startRow_RS_prodotti, $maxRows_RS_prodotti);
$RS_prodotti = mysql_query($query_limit_RS_prodotti, $con_IH) or die(mysql_error());
$row_RS_prodotti = mysql_fetch_assoc($RS_prodotti);

A:

PHP:
mysql_select_db($database_con_IH, $con_IH);
$query_RS_prodotti = ""; 
if(strcasecmp($cat,"Qualsiasi")==0) { 
     = "SELECT * FROM prodotti"; 
} else { 
    $query_RS_prodotti = "SELECT * 
        FROM prodotti WHERE (descrizione LIKE %colname% OR nome LIKE %colname% OR marca LIKE %colname% OR categoria LIKE %colname%) AND categoria = '".$cat."' AND prezzo<=".$costo;  
}

Ma non funziona, mi dice sempre che "non ci sono prodotti"
come risolvo???
 

Rare

Nuovo Utente
12 Mag 2010
6
0
1
sorry... un errore di distrazione mentre scrivevo il post....
cmq il risultato non cambia; vi posto l'intera pagina cosi ci capite di più:

PHP:
<?php require_once('Connections/con_IH.php'); ?>
<?php require_once('Connections/Con_IH.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$currentPage = $_SERVER["PHP_SELF"];

$maxRows_RS_prodotti = 7;
$pageNum_RS_prodotti = 0;
if (isset($_GET['pageNum_RS_prodotti'])) {
  $pageNum_RS_prodotti = $_GET['pageNum_RS_prodotti'];
}
$startRow_RS_prodotti = $pageNum_RS_prodotti * $maxRows_RS_prodotti;

$colname_RS_prodotti = "-1";
if (isset($_GET['testo'])) {
  $colname_RS_prodotti = $_GET['testo'];
}
$cat_RS_prodotti = "-1";
if (isset($_GET['categoria'])) {
  $cat_RS_prodotti = $_GET['categoria'];
}
$costo_RS_prodotti = "-1";
if (isset($_GET['costo'])) {
  $costo_RS_prodotti = $_GET['costo'];
}

mysql_select_db($database_con_IH, $con_IH);
$query = ""; 
if(strcasecmp($cat,"Qualsiasi")==0) { 
    $query = "SELECT * FROM prodotti WHERE (descrizione LIKE %colname% OR nome LIKE %colname% OR marca LIKE %colname% OR categoria LIKE %colname%)"; 
} else { 
    $query = "SELECT * 
        FROM prodotti WHERE (descrizione LIKE %colname% OR nome LIKE %colname% OR marca LIKE %colname% OR categoria LIKE %colname%) AND categoria = '".$cat."' AND prezzo<=".$costo;  
} 
$result = mysql_query($query); 

if (isset($_GET['totalRows_RS_prodotti'])) {
  $totalRows_RS_prodotti = $_GET['totalRows_RS_prodotti'];
} else {
  $all_RS_prodotti = mysql_query($result);
  $totalRows_RS_prodotti = mysql_num_rows($all_RS_prodotti);
}
$totalPages_RS_prodotti = ceil($totalRows_RS_prodotti/$maxRows_RS_prodotti)-1;

$queryString_RS_prodotti = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_RS_prodotti") == false && 
        stristr($param, "totalRows_RS_prodotti") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_RS_prodotti = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_RS_prodotti = sprintf("&totalRows_RS_prodotti=%d%s", $totalRows_RS_prodotti, $queryString_RS_prodotti);
?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
  $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['username'])) {
  $loginUsername=$_POST['username'];
  $password=$_POST['password'];
  $MM_fldUserAuthorization = "livello_utente";
  $MM_redirectLoginSuccess = $_SERVER['HTTP_REFERER'];
  $MM_redirectLoginFailed = $_SERVER['HTTP_REFERER'];
  $MM_redirecttoReferrer = false;
  mysql_select_db($database_Con_IH, $Con_IH);
  	
  $LoginRS__query=sprintf("SELECT id_clienti, nome, livello_utente FROM clienti WHERE id_clienti=%s AND nome=%s",
  GetSQLValueString($loginUsername, "int"), GetSQLValueString($password, "text")); 
   
  $LoginRS = mysql_query($LoginRS__query, $Con_IH) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
    
    $loginStrGroup  = mysql_result($LoginRS,0,'livello_utente');
    
    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;	      

    if (isset($_SESSION['PrevUrl']) && false) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];	
    }
    header("Location: " . $MM_redirectLoginSuccess );
  }
  else {
    header("Location: ". $MM_redirectLoginFailed );
  }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><!-- DW6 -->
<head>
 <?php 
 	function TagliaStringa($stringa, $max_char){
		if(strlen($stringa)>$max_char){
			$stringa_tagliata=substr($stringa, 0,$max_char);
			$last_space=strrpos($stringa_tagliata," ");
			$stringa_ok=substr($stringa_tagliata, 0,$last_space);
			return $stringa_ok."...";
		}else{
			return $stringa;
		}
	} 
	
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Index</title>

<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
<!--
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>

<body onload="MM_preloadImages('images/categorie_blue.jpg','images/profilo_blue.jpg','images/home_blue.jpg','images/prodotti_blue.jpg','images/contattaci_blue.jpg','images/registrati_blue.jpg')">
 <div id="contenitore">
  <div id="carrello">
    <table width="100%" border="0">
      <tr>
        <td width="55%">
        	<form METHOD="POST" name="login" action="<?php echo $loginFormAction; ?>">
            		<p>USER <input type="text" size="15" name="username" /> PASSWORD 
                    <input type="password" size="15" name="password" />
                    <input type="submit" value="Entra" /></p>
            </form>
        </td>
        <td width="45%">carrello</td>
      </tr>
    </table>
  </div>
  <div id="logo"></div>
  <div id="inutile"></div>
  <div id="testataDx"></div>
  <div id="pulsantiera">
    <div id="home"><a href="#" title="" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('home','','images/home_blue.jpg',1)"><img name="home" src="images/home.jpg" width="69" height="11" border="0" id="home" alt="" /></a></div>
    <div id="prodotti"><a href="#" title="" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('prodotti','','images/prodotti_blue.jpg',1)"><img name="prodotti" src="images/prodotti.jpg" width="68" height="11" border="0" id="home" alt="" /></a></div>
    <div id="categorie"><a href="#" title="" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('categorie','','images/categorie_blue.jpg',1)"><img name="categorie" src="images/categorie.jpg" width="76" height="11" border="0" id="categorie" alt="" /></a></div>
    <div id="profilo"><a href="#" title="" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('profilo','','images/profilo_blue.jpg',1)"><img name="profilo" src="images/profilo.jpg" width="61" height="11" border="0" id="profilo" alt="" /></a></div>
    <div id="contattaci"><a href="#" title="" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('contattaci','','images/contattaci_blue.jpg',1)"><img name="contattaci" src="images/contattaci.jpg" width="82" height="11" border="0" id="contattaci" alt="" /></a></div>
    <div id="registrati"><a href="#" title="" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('registrati','','images/registrati_blue.jpg',1)"><img name="registrati" src="images/registrati.jpg" width="87" height="11" border="0" id="registrati" alt="" /></a></div>
  </div>
  <div id="testata"></div>
  <div id="menu">
<table width="100%" border="0">
  <tr>
    <td height="30" ><p class="titoletto">CATEGORIE</p></td>
  </tr>
  <tr>
    <td height="235">
<ul>
          <li><a href="prodotti.php?categotia=notebook">Portatili</a></li>
          <li><a href="prodotti.php?categoria=cellulari">Cellulari</a></li>
          <li><a href="prodotti.php?categoria=Monitors">Monitors</a></li>
          <li><a href="prodotti.php?categoria=Lettori MP3">Lettori MP3</a></li>
          <li><a href="prodotti.php?categotia=Portatili MAC">Portatili MAC</a></li>
          <li><a href="prodotti.php?categotia=Tablet PC">Tablet PC</a></li>
          <li><a href="prodotti.php?categotia=Mouse e tastiere">Mouse e tastiere</a></li>
          <li><a href="prodotti.php?categotia=Lettori multimediali">Lettori multimediali</a></li>
          <li><a href="prodotti.php?categotia=Scanner">Scanner</a></li>
          <li><a href="prodotti.php?categotia=Stampanti">Stampanti</a></li>
          <li><a href="prodotti.php?categotia=Tavolette grafiche">Tavolette grafiche</a></li>
          <li><a href="prodotti.php?categotia=Webcam">Webcam</a></li>
          <li><a href="prodotti.php?categotia=HD multimediali">HD multimediali</a></li>
        </ul>
    </td>
  </tr>
  <tr>
    <td><p class="titoletto">OFFERTE SPECIALI</p></td>
  </tr>
  <tr>
    <td height="215">
    <p><img src="images/Nuova cartella/openmoko.gif" alt="prezzo speciale cellulare opensource OPEN MOKO" width="63" height="120" class="imgofferte" title="prezzo speciale cellulare opensource OPEN MOKO" /></p>
    <p>&nbsp; </p>
    <p class="offerte">OPEN MOKO <br />
<span class="prezzobarrato">€ 330,00</span><br />
<span class="prezzofferta">€ 228,00</span></p>
    </td>
  </tr>
  <tr>
    <td><p class="titoletto">MARCHE</p></td>
  </tr>
  <tr>
    <td height="40">
    		<select name="marche" class="marche">
<option>Alienware</option>
<option>Apple</option>
<option>AOC</option>
<option>Asus</option>
<option>Digital Blue</option>
<option>Eizo</option>
<option>Estari Computer</option>
<option>gScreen</option>
<option>Hyundai</option>
<option>Lenovo</option>
<option>LG</option>
<option>Meizu</option>
<option>Microsoft</option>
<option>MobilBlu</option>
<option>Nanovision</option>
<option>NU</option>
<option>Open Moko</option>
<option>Philips</option>
<option>Polymer Vision </option>
<option>Sony</option>
</select>
<input name="" type="button" value="Vai" />
    </td>
  </tr>
</table>



  </div>
  <div id="sinusoide"> </div>
  <div id="corpo">
  <?php if ($totalRows_RS_prodotti > 0) { // Show if recordset not empty ?> 
  <h3 align="right">Risultati da <?php echo ($startRow_RS_prodotti + 1) ?> A <?php echo min($startRow_RS_prodotti + $maxRows_RS_prodotti, $totalRows_RS_prodotti) ?> su <?php echo $totalRows_RS_prodotti ?></h3>
<?php do { ?>
      <table width="100%" border="0">
        <tr>
          <td width="30%" rowspan="2"><img src="<?php echo $row_RS_prodotti['foto']; ?>" align="middle" /></td>
          <td width="34%" bgcolor="#CCCCCC"><?php echo $row_RS_prodotti['nome']; ?></td>
          <td colspan="2" bgcolor="#CCCCCC"><?php echo $row_RS_prodotti['marca']; ?></td>
        </tr>
        <tr>
          <td colspan="3">  
            <?php $row_RS_prodotti['descrizione']; 	
$stringa = $row_RS_prodotti['descrizione'];
$stringa_tagliata = TagliaStringa($stringa, 200);
echo $stringa_tagliata?>
            
          </td>
        </tr>
        <tr>
          <td bgcolor="#FFFFFF">Disponibilità: <img src="<?php echo $row_RS_prodotti['qnt']; ?>" height="15" width="15" /></td>
          <td bgcolor="#CCCCCC"><?php echo $row_RS_prodotti['prezzo']; ?></td>
          <td width="12%" bgcolor="#CCCCCC">&nbsp;</td>
          <td width="24%" bgcolor="#CCCCCC">&nbsp;</td>
        </tr>
      </table>
      <br />
      <?php } while ($row_RS_prodotti = mysql_fetch_assoc($RS_prodotti)); ?>
      <table border="0" align="center">
        <tr>
          <td><?php if ($pageNum_RS_prodotti > 0) { // Show if not first page ?>
              <a href="<?php printf("%s?pageNum_RS_prodotti=%d%s", $currentPage, 0, $queryString_RS_prodotti); ?>"><img src="./First.gif" /></a>
          <?php } // Show if not first page ?></td>
          <td><?php if ($pageNum_RS_prodotti > 0) { // Show if not first page ?>
              <a href="<?php printf("%s?pageNum_RS_prodotti=%d%s", $currentPage, max(0, $pageNum_RS_prodotti - 1), $queryString_RS_prodotti); ?>"><img src="./Previous.gif" /></a>
          <?php } // Show if not first page ?></td>
          <td><?php if ($pageNum_RS_prodotti < $totalPages_RS_prodotti) { // Show if not last page ?>
              <a href="<?php printf("%s?pageNum_RS_prodotti=%d%s", $currentPage, min($totalPages_RS_prodotti, $pageNum_RS_prodotti + 1), $queryString_RS_prodotti); ?>"><img src="./Next.gif" /></a>
          <?php } // Show if not last page ?></td>
          <td><?php if ($pageNum_RS_prodotti < $totalPages_RS_prodotti) { // Show if not last page ?>
              <a href="<?php printf("%s?pageNum_RS_prodotti=%d%s", $currentPage, $totalPages_RS_prodotti, $queryString_RS_prodotti); ?>"><img src="./Last.gif" /></a>
          <?php } // Show if not last page ?></td>
        </tr>
      </table>
        <?php } /* Show if recordset not empty  */ else {?>  
  spiacenti nessun risultato trovato
  <?php } ?>
  </div>
  <div id="contOfferta">
    <div id="publicita"></div>
    <br/>
    <div id="offerta"></div>
  </div>
  <div id="footer"></div>
</div>

</body>
</html>
<?php
mysql_free_result($RS_prodotti);
?>

dategli un okkio e ditemi un pò dove sbaglio...
grazie mille
 

Rare

Nuovo Utente
12 Mag 2010
6
0
1
Il problema che non ho la più pallida idea di come si faccia...
Mi daresti una mano pls???
Se ti può essere utile utilizzo apache come server...
 
Discussioni simili
Autore Titolo Forum Risposte Data
M LEFT JOIN di diverse condizioni PHP 10
B [PHP] IF condizioni e query annidate PHP 1
A [HTML] alternative a Google Maps - aggiornamento condizioni giugno 2018 HTML e CSS 6
G [PHP] FORM INVIO VALORI A QUERY CON TRE CONDIZIONI PHP 2
F [MySQL] Select con due condizioni su uno stesso campo MySQL 7
giancadeejay [PHP] If condizioni multiple PHP 6
elpirata [PHP] Paginazione dati estratti da una query con più condizioni PHP 17
T Condizioni multiple in htaccess per accesso a sub folder basato su indirizzo IP Apache 0
B Slider Immagini con condizioni PHP 1
V Sono stati rilevati gravi problemi relativi alle condizioni della tua proprietà. Google Search Console 11
L Creare alcune condizioni php PHP 22
gun88 Termini e Condizioni D'uso Leggi, Normative e Fisco 0
G condizioni if then else all interno di una query?? MySQL 2
G preoblema condizioni PHP 2
T Conto alla rovescia con condizioni Javascript 10
gandalf1959 update di una tabella con due condizioni PHP 2
blips Istruzione IF con condizioni multiple PHP 2
asevenx SELECT con condizioni WHERE multiple PHP 4
braccobaldo [GUIDA] VBulletin 4: lista di condizioni e variabili da utilizzare nei template CMS (Content Management System) 2
anthares Contare record in tabella secondo certe condizioni PHP 21
S accettare condizioni d'uso da file batch Windows e Software 2
G Caricamento icone su condizioni Flash 0
K condizioni multiple PHP 3
peppoweb Realizzare 3 condizioni con una Query. PHP 2
jan267 Modulo "accetta le condizioni" Classic ASP 0
E Help Sql somma orari PHP 32
G Importazione file .sql Web Server 0
D data in sql in formato ITA PHP 4
L Studio SQL 2104 o SQL2019 Mac m1 Database 0
otto9due Inserire o aggiornare tabella my sql controllando una coppia di valori PHP 7
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
D passare valori da database sql a php PHP 1
B Stringa sql per ricerca su più campi Database 1
L Interfaccia grafica per gestire sql server .NET Framework 1
L Front-end SQL server Database 0
W Query SQL Classic ASP 2
R Filtro multiplo di selezione Sql PHP 2
Emix Select concatenate php sql ajax PHP 2
C Estrarre dati stringa Sql Database 1
W Mandare a capo valore di SQL Classic ASP 2
G non riesco a capire quale sia l'errore [SQL] MySQL 2
M modificare un file .XML da database Sql PHP 13
M Update con condizione SQL PHP 7
Alex_70 sql importazione dati MySQL 0
Tommy03 Algoritmo classifica SQL MySQL 0
L form multipla php sql,errore in inserimento MySQL 0
I Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE PHP 1
L Insert php sql da una form multipla PHP 6
moustache [RISOLTO] SQL PHP IIS PHP 8
WebmasterFioriniAndrea SQL, PHP Come passo i dati da una tabella? PHP 1

Discussioni simili