Problema impaginazione

  • Creatore Discussione Creatore Discussione polinet
  • Data di inizio Data di inizio

polinet

Nuovo Utente
7 Mar 2004
18
0
0
WaterLand
www.polinet.biz
Da questa pagina ricavo un menu con tutti i link che puntano a diverse famiglie.

Script:
PHP:
<?
$_GET["categoria"];
echo $categoria;
echo "<BR><BR>";
require ("connessione.php");
echo "<table width=200 border=1>";
$sql = "select * from tbl_fam where id_cat= " . $id_cat . " order by id_fam ASC";
$prt_familia = mysql_db_query ( $nome_db, $sql, $db) or die (mysql_error());
//echo "<select name=categoria>";
echo "<tr>";
while ($riga2 = mysql_fetch_array ($prt_familia))
{
	$i++;
	if ($i == 2){
		print("</tr>");
		print("<tr>");
		$i = 1;
	}
	    print "<td width=200 align=left>";
		print "<a href=select_fam3.php3?id_cat=" .$riga2["id_cat"]. "&id_fam=" .$riga2["id_fam"] ."&familia=" .$riga2["familia"] .">" . $riga2["familia"]. "</a>";
		print "</td>";
}
print "</tr></table>";
?>

Quando pero' vado a cliccare su uno di questi link, mi da il seguente errore:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\archivos de programa\easyphp1-6\www\akros\select_fam3.php3 on line 61
Nessun record trovato!



Questo e`lo script:
PHP:
<?
$_GET["id_cat"];
$_GET["id_fam"];
$_GET["familia"];
// Creo una variabile dove imposto il numero di record 
// da mostrare in ogni pagina
$x_pag = 3;

// Recupero il numero di pagina corrente.
// Generalmente si utilizza una querystring
$pag = $_GET['pag'];

// Controllo se $pag è valorizzato...
// ...in caso contrario gli assegno valore 1
if (!$pag) $pag = 1; 

require ("connessione.php");

// Uso mysql_num_rows per contare le righe presenti
// all'interno della tabella 
$all_rows = mysql_num_rows(mysql_query("SELECT * from tbl_prodotti where id_fam= " . $id_fam . ""));


// Tramite una semplice operazione matematica definisco
// il numero totale di pagine
$all_pages = ceil($all_rows / $x_pag);

// Calcolo da quale record iniziare
$first = ($pag - 1) * $x_pag;

echo $familia;
echo "<BR><BR>";

// Recupero i record per la pagina corrente...
// utilizzando LIMIT per partire da $first e contare fino a $x_pag
$rs = mysql_query("SELECT * FROM from tbl_prodotti where id_fam= " . $id_fam . " LIMIT $first, $x_pag") or die(mysql_error());
$nr = mysql_num_rows($rs);
if ($nr != 0){
  for($x = 0; $x < $nr; $x++){
    $row = mysql_fetch_assoc($rs);

echo "<table width=500 border=0>";
    echo "<tr>";
	echo "<td rowspan=4 style=width=100px valign=top>";
	      echo "<table width=100 height=100 border=0>";
		  echo "<tr><td><img src=img/no_img.gif></td></tr>";
	      echo "</table>";
		  echo "</td>";
	echo "<td style=padding-left:10px bgcolor=#eeeeee valign=top><font face=verdana style=font-size:11><b>" .$row["prodotto"] ."</b></font></td>";
	echo "</tr><tr>";
	echo "<td style=padding-left:10px><font face=verdana style=font-size:11>ID CAT:&nbsp;" .$row["id_cat"] ."</font></td></tr><tr>";
	echo "<td style=padding-left:10px><font face=verdana style=font-size:11>ID FAM:&nbsp;" .$row["id_fam"] ."</font></td></tr><tr>";
	echo "<td style=padding-left:10px><font face=verdana style=font-size:11>ID PROD:&nbsp;" .$row["id_prod"] ."</font></td></tr><tr>";
	echo "<td align=left valign=top><font face=verdana style=font-size:11>descrizione:</font></td>";
	echo "<td colspan=2 align=left>";
	echo "<font face=verdana style=font-size:11>" .$row["descrizione"] ."</font></td>";
	echo "</tr><tr><td colspan=3 height=1 bgcolor=#000000></td>";
	echo "</tr></table>";
  }
}else{
  echo "Nessun record trovato!";
}

// Se le pagine totali sono più di 1...
// stampo i link per andare avanti e indietro tra le diverse pagine!
if ($all_pages > 1){
  if ($pag > 1){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . $pag - 1 . "\">";
    echo "Pagina Indietro</a>&nbsp;";
  } 
  if ($all_pages > $pag){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . $pag + 1 . "\">";
    echo "Pagina Avanti</a>";
  } 
}
?>


Dove sbaglio????

In linea 61 ho:
$nr = mysql_num_rows($rs);

Grazie a tutti voi
 
Prima di tutto devo dirti che il tuo php script ha un GRANDE problema di sicurezza (google: SQL injection) !!!!

E poi:

Invece della linea:

$all_rows = mysql_num_rows(mysql_query("SELECT * from tbl_prodotti where id_fam= " . $id_fam . ""));

Scrivi cosi:

$m = mysql_query("SELECT * from tbl_prodotti where id_fam= " . $id_fam . "");
print mysql_error();
$all_rows = mysql_num_rows($m);

E vedrai quale l'errore nel SQL query. Forse id in tbl_prodotti non e integer ma varchar o qualchosa di simile?
 

Discussioni simili