Aiuto: SQL condizioni

di il
1 risposte

Aiuto: SQL condizioni

Salve a tutti avrei URGENTE bisogno di una mano....
vi spiego brevemente cosa devo fare:
prendere da un pagina x.php dei dati da una text (name:testo) e da una select/option (name:categoria) e fare una ricerca nel database rispettando i criteri selezionati nella pagina x.php e stampare il risultato nella pagina y.php

e fin qui funziona tutto.
il problema è:
se nelle categorie seleziono "Qualsiasi"(presente nel db) mi dovrebbe dare come risultato tutti i prodotti con il criterio inserito nella text di TUTTE le categorie...
come faccio????

vi posto il codice della pagina del risultato cosi mi dite dove sbaglio e come posso risolvere

<?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_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", 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);


if (isset($_GET['totalRows_RS_prodotti'])) {
  $totalRows_RS_prodotti = $_GET['totalRows_RS_prodotti'];
} else {
  $all_RS_prodotti = mysql_query($query_RS_prodotti);
  $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);
?>

1 Risposte

  • Re: Aiuto: SQL condizioni

    rare ha scritto:


    salve a tutti avrei URGENTE bisogno di una mano....
    il problema è:
    se nelle categorie seleziono "Qualsiasi"(presente nel db) mi dovrebbe dare come risultato tutti i prodotti con il criterio inserito nella text di TUTTE le categorie... come faccio????
    Ciao rare,
    io modificherei l'SQL in modo da NON chiedere il controllo sulla categoria nel caso essa non vi fosse.
    Ovvero, prima di tutto bisogna vedere che valore viene passato quando l'utente seleziona "Qualsiasi", ora ti faccio un esempio ponendo il caso che tale valore sia proprio "Qualsiasi".
    $cat_RS_prodotti = "-1";
    if (isset($_GET['categoria'])) {
      $cat_RS_prodotti = $_GET['categoria'];
      if ($cat_RS_prodotti == "Qualsiasi") $cat_RS_prodotti = 0;
    }
    ...
    $cRp = "'%{$colname_RS_prodotti}%'";
    $query_RS_prodotti = "SELECT * FROM prodotti WHERE (descrizione LIKE $cRp OR nome LIKE $cRp OR marca LIKE $cRp OR categoria LIKE $cRp)".($cat_RS_prodotti<=0?" AND categoria = '$cat_RS_prodotti'":" ")." AND prezzo<= ".GetSQLValueString($costo_RS_prodotti, "int");
    Cosa ho cambiato?
    Prima di tutto ho aggiunto un controllo IF sulla variabile cat_RS_prodotti: se è uguale a "Qualsiasi" allora azzera la variabile stessa;
    dopodiché ho creato una variabile volante chiamata cRp (abbreviazione di colname_RS_prodotti) che userò subito dopo per riempire i LIKE del query statement (contenente ovvero la parola chiave di ricerca che l'utente ha inserito);
    infine aggiungo un secondo controllo IF (l'operatore ternario CONDIZIONE?TRUE:FALSE mi permette di inserirlo direttamente in linea e in modo molto conciso) che aggiunge la verifica sulla categoria solo nel caso una categoria sia settata, mentre non mette tale verifica nel caso contrario.

    Non credo di essere stato cristallino, ad ogni modo se ti servono delucidazioni chiedi pure.
Devi accedere o registrarti per scrivere nel forum
1 risposte