condizioni in sql

  • Creatore Discussione Creatore Discussione Rare
  • Data di inizio Data di inizio

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
 
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);
 
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???
 
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
 
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