webForumDet fria alternativet

Underligt fel, kategorier

Databaser & SQL

2 svar · 443 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#1

Ber om ursäkt för en dålig rubrik.

Finns det någon vänlig person som kan förklara för mig vad det är för fel på koden nedan?

Problemet jag har, är att flera kategorier inte visar några produkter alls, samt att några kategorier endast visar ett fåtal produkter.

(Har dubbelkollat att samtliga produkter tillhör en kategori.)

$search = trim($_GET["sok"]);
$cat = $_GET["kategori"];

if ($cat == '-')
  $cat = '';

if ($search == "")
	$search = "-";

if ($search || $cat)
{
  $query = "name LIKE " . sqlesc("%$search%") . " AND active = 'yes'";
	if ($search)
		  $q = "sok=" . htmlspecialchars($search);
}

if ($cat)
{
  $query .= " AND cat = $cat";
  $q .= ($q ? "&" : "") . "cat=$cat";
}

$categories = "<option value='-'>---- visar alla ----</option>\n";
$ct_r = mysql_query("SELECT id,name FROM products_cat ORDER BY name ASC") or die;
while ($ct_a = mysql_fetch_array($ct_r))
  $categories .= "<option value=\"" .intval($ct_a["id"]). "\">" .htmlspecialchars($ct_a["name"]). "</option>\n";

print($query);

print("<div class=\"info\">\n<h4>Alla produkter</h4>\n");

print("<form method=get style=\"padding: 5px\" action=alla_produkter.php?>\n");
print("Sök produkt: <input type=text size=20 name='sok' />\n");

print("<select name=\"kategori\">\n");
print($categories);
print("</select>\n");

print("<input type=submit value='sök' />\n");
print("</form><br />\n");

  
$page = $_GET['sida'];
$perpage = 10;

$res = mysql_query("SELECT COUNT(*) FROM products WHERE $query") or sqlerr();
$arr = mysql_fetch_row($res);
$pages = floor($arr[0] / $perpage);
if ($pages * $perpage < $arr[0])
  ++$pages;

if ($page < 1)
  $page = 1;
else
  if ($page > $pages)
    $page = $pages;

for ($i = 1; $i <= $pages; ++$i)
  if ($i == $page)
    $pagemenu .= "<b>sida $i</b>\n";
  else
    $pagemenu .= "<a href=alla_produkter.php?kategori=$cat&amp;sida=$i><b>$i</b></a>\n";

if ($page == 1)
  $browsemenu .= "<span style=\"color: #eee\"><b>&lt;&lt; Föregående</b></span>";
else
  $browsemenu .= "<a href=alla_produkter.php?sida=" . ($page - 1) . "><b>&lt;&lt; Föregående</b></a>";

$browsemenu .= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

if ($page == $pages)
  $browsemenu .= "<span style=\"color: #eee\"><b>Nästa &gt;&gt;</b></span>";
else
  $browsemenu .= "<a href=alla_produkter.php?kategori=$cat&amp;sida=" . ($page + 1) . "><b>Nästa &gt;&gt;</b></a>";

$offset = ($page * $perpage) - $perpage;

$res = mysql_query("SELECT * FROM products WHERE $query ORDER BY name LIMIT $offset,$perpage") or sqlerr();
$num = mysql_num_rows($res);

print("<br /><table border=1 cellspacing=0 cellpadding=3 width='99%' style=\"margin: 5px\">\n");
print("<tr>\n<td></td>\n<td class=colhead align=left>Produktnamn</td>\n<td class=colhead align=\"right\">Pris</td>\n</tr>\n");
for ($i = 0; $i < $num; ++$i)
{
  $arr = mysql_fetch_assoc($res);

//här listas alla produkter

EDIT: Hittade det "dumma" felet. Såg ni att jag listar endast produkter som har "-" i namnet.

if ($search == "")
	$search = "-";
Medlem sedan dec. 201027 inlägg
#2

Nu kan jag knappt PHP och detta är inte svar på din fråga men det ser ut som att du kan råka ut för sql injection.

Exempel: http://www.unixwiz.net/techtips/sql-injection.html

Medlem sedan juli 20041 271 inlägg
#3

Det kan säkert stämma, men sidan är inte "live" än, jag kommer att gå igenom säkerheten så fort jag har löst det underliga med kategorierna.

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)