Avatar billede farhang Nybegynder
26. september 2006 - 21:27 Der er 16 kommentarer og
1 løsning

Hvad betyder denne php-fejlmelding?

Hej,

Jeg får følgende fejlmelding:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/html/la-femme/kollektion.php on line 89

Som henviser til:

// henter alle tags
$out = "SELECT products_prodnum FROM products";
$num = mysql_num_rows($out);
$results = mysql_query($query)
  or die(mysql_error());
$row = mysql_fetch_array($results);
extract($row);

http://www.designunltd.dk/la-femme/kollektion.php

Reference http://www.eksperten.dk/spm/734032
Avatar billede coderdk Praktikant
26. september 2006 - 21:34 #1
Flyt mysql_num_rows ned under mysql_query ;P
Avatar billede farhang Nybegynder
26. september 2006 - 21:56 #2
Nu ser min kode således ud:

<?
// sætter side nr.
if (isset($_GET[side])){
$side = $_GET[side];
}
if (!isset($_GET[side])){
$side = 0;
}

// status
$antal = 16; // Antal af posts pr side
$total = $page * $antal;
$antal_p_side = $antal * $page;

// hoved query
$query = "SELECT * FROM products ORDER BY products_prodnum DESC LIMIT $total, $antal";

// henter alle tags
$out = "SELECT products_prodnum FROM products";
$results = mysql_query($query)
  or die(mysql_error());
$row = mysql_fetch_array($results);
extract($row);
  $num = mysql_num_rows($out);
// side rotering
if ($side > 0) {
    echo "<a href=\"kollektion.php?page=" . ($side - 1) . "\"><img src=\"images/leftpil.gif\" border=\"0\"></a>";
} else {
    echo "&nbsp;";
}
if ($num > $antal_p_side) {
    echo "<a href=\"kollektion.php?page=" . ($side + 1) . "\"><img src=\"images/rightpil.gif\" border=\"0\"></a>";
} else {
    echo "";
}
?> 

og jeg få følgende fejmelding:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/html/la-femme/kollektion.php on line 93
Avatar billede nielle Nybegynder
26. september 2006 - 21:58 #3
$num = mysql_num_rows($out);

- skal vist rettes til:

$num = mysql_num_rows($result);
Avatar billede nielle Nybegynder
26. september 2006 - 21:59 #4
$num = mysql_num_rows($results);
Avatar billede nielle Nybegynder
26. september 2006 - 22:01 #5
Du udføre forresten aldrig din $out SQL-sætning.
Avatar billede farhang Nybegynder
26. september 2006 - 22:13 #6
Hej nielle,

Det hjalp lidt, men nu pager den ikke korrekt. De første 16 billeder skal være på page 1 og de næste 16 billeder i næste page 2! Hvad gør jeg forkert?
Avatar billede nielle Nybegynder
26. september 2006 - 22:15 #7
Hvordan ser din kode ud?
Avatar billede farhang Nybegynder
26. september 2006 - 22:27 #8
<?php
//connect to the database - either include a connection variable file
//or type the following lines:
$connect = mysql_connect("xxxxx", "xxxxx", "xxxxx")
  or die ("Hey loser, check your server connection.");
mysql_select_db ("xxxxx_shop");

?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="library/fonts.xml" type="text/css">
</head>
<body bgcolor="#FFFFFF">
<table width="785" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td width="785" height="60" colspan="3"><img src="top.gif" width="785" height="60"></td>
  </tr>
  <tr>
    <td width="785" height="1" colspan="3" bgcolor="#A99964"></td>
  </tr>
  <tr>
    <td width="785" height="23" colspan="3"></td>
  </tr>
  <tr>
    <td width="385" height="472" valign="top" align="right"><img src="brud3_510x510p.jpg" width="385" height="472"></td>
    <td width="15" height="472"></td>
    <td width="385" height="472" class="indhold" valign="top" align="right">
      <table width="385" height="472" border="0" valign="top" align="left" cellspacing="0" cellpadding="0">
        <tr valign="bottom" align="left">
          <td width="385" height="23" colspan="6"><font class="indholdoverskrift">Kollektion</font></td>
        </tr>
        <tr valign="bottom" align="left">
          <td width="385" height="23" colspan="6"><?php include("produkttyper.php") ?></td>
        </tr>
        <tr><td width="385" height="426" colspan="6" align="center" valign="top"><?php
$query = "SELECT * FROM products";
$results = mysql_query($query)
  or die(mysql_error());
  echo "<table width=\"385\"><tr>";

$sumcount = 1;
$sum = 4;
$i="0";

while ($row = mysql_fetch_array($results)) {
  extract($row);
  echo "<td width=\"95\" height=\"95\" align=\"middle\">";
  echo "<a href=\"varerbeskrivelse.php?prodid=" . $products_prodnum . "\">";
  echo "<img src=" . $products_thumbnailimageurl . " width=\"87\" height=\"87\" border=\"0\"></a>";
  echo "</td>";
if ($sumcount == $sum) {
$sumcount = 0;
  echo "</tr><tr>";
}
$sumcount++;
$i++;
}
  echo "</tr></table>";
 
 
?>
    </td>
        </tr>
<tr valign="middle" align="center">
          <td width="385 height="30" colspan="6" align="center" valign="top">
            <table width="385" border="0" cellspacing="0" cellpadding="0">
            <tr> 
            <td width="385 height="30" colspan="6" align="center" valign="top">
<?
// sætter side nr.
if (isset($_GET[side])){
$side = $_GET[side];
}
if (!isset($_GET[side])){
$side = 0;
}

// status
$antal = 16; // Antal af posts pr side
$total = $page * $antal;
$antal_p_side = $antal * $page;

// hoved query
$query = "SELECT * FROM products ORDER BY products_prodnum DESC LIMIT $total, $antal";

// henter alle tags
$out = "SELECT products_prodnum FROM products";
  $num = mysql_num_rows($results);
  $results = mysql_query($query)
  or die(mysql_error());
$row = mysql_fetch_array($results);
extract($row);

// side rotering
if ($side > 0) {
    echo "<a href=\"kollektion.php?page=" . ($side - 1) . "\"><img src=\"images/leftpil.gif\" border=\"0\"></a>";
} else {
    echo "&nbsp;";
}
if ($num > $antal_p_side) {
    echo "<a href=\"kollektion.php?page=" . ($side + 1) . "\"><img src=\"images/rightpil.gif\" border=\"0\"></a>";
} else {
    echo "";
}
?>             
    </td>
    </tr>
  </table>    </td>
    </tr>
  </table>    </td>
  </tr>
  <tr>
    <td width="785" height="23" colspan="3"><img src="bund.gif" width="785" height="23"></td>
  </tr>
  <tr>
    <td width="785" height="1" colspan="3" bgcolor="#A99964"></td>
  </tr>
  <tr>
    <td width="785" height="20" colspan="3" align="center" class="indhold"><div align="center">copyright &copy; 2006 la-femme all rights
      reserved - powered by <font class="undermenu"><a href="http://www.designunltd.dk" class="undermenu">designunltd.dk</a></font></div></td>
  </tr>
</table>
</body>
</html>
Avatar billede nielle Nybegynder
26. september 2006 - 22:39 #9
Hele denne blok kode skriver vel samtlige produkter ud:

<?php
$query = "SELECT * FROM products";
$results = mysql_query($query) or die(mysql_error());

echo "<table width=\"385\"><tr>";

$sumcount = 1;
$sum = 4;
$i = "0";

while ($row = mysql_fetch_array($results))
{
    extract($row);
    echo "<td width=\"95\" height=\"95\" align=\"middle\">";
    echo "<a href=\"varerbeskrivelse.php?prodid=" . $products_prodnum . "\">";
    echo "<img src=" . $products_thumbnailimageurl . " width=\"87\" height=\"87\" border=\"0\"></a>";
    echo "</td>";
    if ($sumcount == $sum)
    {
        $sumcount = 0;
        echo "</tr><tr>";
    }
    $sumcount++;
    $i++;
}

echo "</tr></table>";
?>

Der er slet ikke noget paging i den.

Der kommer noget paging-kode længere nede, men det er vel lidt irellevant når du allerede har skrevet alle produkterne ud.
Avatar billede farhang Nybegynder
26. september 2006 - 22:48 #10
Men, min paging virker jo ikke. Hvad skal jeg gør så?
Avatar billede nielle Nybegynder
26. september 2006 - 23:14 #11
Der er jo ikke tale om at din paging ikke virker, men snare om at du slet ikke har noget paging-kode. Den viste blok vli jo altid vise alle produkter.

Nedenunder blokken laver du noget med LIMIT, og det er den tankegang at du skal fortsætte med.
Avatar billede farhang Nybegynder
27. september 2006 - 00:04 #12
Hvad går denne LIMIT ud på?
Avatar billede nielle Nybegynder
27. september 2006 - 06:52 #13
Du bruger allerede LIMIT i din kode, bare ikke det rigtige sted hvis du vil page:

// hoved query
$query = "SELECT * FROM products ORDER BY products_prodnum DESC LIMIT $total, $antal";

Men det er måske ikke dig selv som har skrevet den oprindelige kode?

LIMIT gør det at den lægger en grænse på hvor mange poster der udtrækkes. Det benytter man f.eks. når man vil page: Når det er de første 16 poster der skal udtrækkes hiver man dem ud med:

$query = "SELECT * FROM products ORDER BY products_prodnum DESC LIMIT 0, 16";

De næste 16 poster (altså dem der skal på side 2), så hiver man dem ud med:

// hoved query
$query = "SELECT * FROM products ORDER BY products_prodnum DESC LIMIT 16, 16";

Det første tal efter LIMIT angiver hvorfra at man starter med at udtrække (det kaldes for offset), og den anden værdi angiver hvor mange poster man udtrækkere derfra.
Avatar billede farhang Nybegynder
27. september 2006 - 11:27 #14
Hej nielle,

Min nye kode (som ikke virker korrek) ser nu således ud:

<?php
$query = "SELECT * FROM products";
$results = mysql_query($query)
  or die(mysql_error());
 
// henter alle tags
$out = "SELECT products_prodnum FROM products";
  $num = mysql_num_rows($results);
  $results = mysql_query($query)
  or die(mysql_error());
$row = mysql_fetch_array($results);
extract($row);

  echo "<table width=\"385\"><tr>";

// sætter side nr.
if (isset($_GET[side])){
$side = $_GET[side];
}
if (!isset($_GET[side])){
$side = 0;
}

// status
$antal = 16; // Antal af posts pr side
$total = $page * $antal;
$antal_p_side = $antal * $page;

$sumcount = 1;
$sum = 4;
$i="0";

// hoved query
$query = "SELECT * FROM products ORDER BY products_prodnum DESC LIMIT $total, $antal";

while ($row = mysql_fetch_array($results)) {
  extract($row);
  echo "<td width=\"95\" height=\"95\" align=\"middle\">";
  echo "<a href=\"varerbeskrivelse.php?prodid=" . $products_prodnum . "\">";
  echo "<img src=" . $products_thumbnailimageurl . " width=\"87\" height=\"87\" border=\"0\"></a>";
  echo "</td>";
if ($sumcount == $sum) {
$sumcount = 0;
  echo "</tr><tr>";
}
$sumcount++;
$i++;
}
  echo "</tr></table>";
 
// side rotering
if ($side > 0) {
    echo "<a href=\"kollektion.php?page=" . ($side - 1) . "\"><img src=\"images/leftpil.gif\" border=\"0\"></a>";
} else {
    echo "&nbsp;";
}
if ($num > $antal_p_side) {
    echo "<a href=\"kollektion.php?page=" . ($side + 1) . "\"><img src=\"images/rightpil.gif\" border=\"0\"></a>";
} else {
    echo "";

?>

Hvad gør jeg forkert?
Avatar billede nielle Nybegynder
27. september 2006 - 19:37 #15
> Hvad gør jeg forkert?

Faktisk en hel del ting, men det værste var nok at du skifter mellem at skrive "side" og "page" i koden.

Jeg har prøvet at tilrette din kode efter bedste evne:


<?php
// Antal poster.
$query = "SELECT count(*) AS total FROM products";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($result);
$total = $row["total"];

// Sætter side nr.
$side = (isset($_GET["side"])) ? $_GET["side"] : 0;

// Værdier til LIMIT
$row_count = 16; // Antal af posts pr. side
$offset = $side * $row_count;

$col = 4; // Antal søjler pr. side
$colCount = 1;

// Hoved query
$query = "SELECT * FROM products ORDER BY products_prodnum DESC LIMIT $offset, $row_count";
$result = mysql_query($query) or die(mysql_error());

echo "<table width='385'><tr>";

while ($row = mysql_fetch_assoc($result))
{
    extract($row);

    echo "<td width='95' height='95' align='middle'>";
    echo "<a href='varerbeskrivelse.php?prodid=" . $products_prodnum . "'>";
    echo "<img src=" . $products_thumbnailimageurl . " width='87' height='87' border='0'></a>";
    echo "</td>";

    if ($colCount == $col)
    {
        $colCount = 0;
        echo "</tr><tr>";
    }

    $colCount++;
}

echo "</tr></table>";
 
// Side rotering
if ($side > 0)
    echo "<a href='kollektion.php?side=" . ($side - 1) . "'><img src='images/leftpil.gif' border='0'></a>";
else
    echo "&nbsp;";

if ($total > $offset+$row_count)
    echo "<a href='kollektion.php?side=" . ($side + 1) . "'><img src='images/rightpil.gif' border='0'></a>";
?>
Avatar billede farhang Nybegynder
27. september 2006 - 20:42 #16
Hej Nielle,

Tusind tak for hjælpen. ;-) Smid et svar.

Farhang
Avatar billede nielle Nybegynder
27. september 2006 - 20:48 #17
Svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester