Avatar billede kgp43 Nybegynder
06. juli 2004 - 23:13 Der er 10 kommentarer og
1 løsning

Fejl i løkke

Hejsa,

Jeg får denne fejl:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/tacklepr/public_html/products/reels/include/fishing-reel-series.php on line 24


- Har gennemgået koden 100 gange og checket navnene midst lige så mange gange, men kan ikke finde fejlen. Er der nogle der kan se den/dem? (linie 24 er linien hvor løkken starter)

$price_check = mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error());
while($price_check = mysql_fetch_array($price_check)) {

    $price_check_no = mysql_query("SELECT * FROM prices WHERE product_id='$price_check[id]' ") or die (mysql_error());
    $price_check_no = mysql_num_rows($price_check_no);
}

if($price_check_no != 0){
Avatar billede arne_v Ekspert
06. juli 2004 - 23:15 #1
Er du sikker på at der skal '' omkring id værdierne ?
Avatar billede erikjacobsen Ekspert
06. juli 2004 - 23:16 #2
Brug forskellige variabel navne i
  while($price_check = mysql_fetch_array($price_check)) {
Efter første gennemløb overskriver du $price_check. Fx:
  while($price_check_row = mysql_fetch_array($price_check)) {
Avatar billede kgp43 Nybegynder
07. juli 2004 - 00:30 #3
Det virkede erikjacobsen :)

Den kommer dog ikke med noget output. Sådan ser den ud nu:

$product_query = mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error());
while($product_result = mysql_fetch_array($product_query)) {

    $price_check_no_query = mysql_query("SELECT * FROM prices WHERE product_id='$product_result[id]' ") or die (mysql_error());
    $price_check_no = mysql_num_rows($price_check_no_query);

}

if($price_check_no != 0){
echo $price_check_no;

- Den printer ikke noget med min echo, hvis jeg derimod flytter den ind i løkken, så poster den 1 efterfulgt at 100 nuller. Hvorfor kan jeg ikke echo værdien, udenfor løkken? Du besvarrede mit spørgsmål, så du smider bare et svar (hvis du ikke gider at besvarre dette ekstra spørgsmål) :)
Avatar billede kgp43 Nybegynder
07. juli 2004 - 00:58 #4
Har fikset det :)
Smider du et svar, så får du point.
Avatar billede erikjacobsen Ekspert
07. juli 2004 - 08:40 #5
Ellers tak, jeg samler slet ikke på point. Svar selv, accepter eget svar.
Avatar billede kgp43 Nybegynder
07. juli 2004 - 09:37 #6
nej nej nej... havde lige lavet en laaaaan post, men den oprettede den ikke, da jeg klikkede send :( nå, jeg prøver igen.

Jeg har brugt et døgn på følgene kode, men kan ikke finde en løsning.
Sådan fungerer løkken:

- Der søges på alle aktive series i db'en (løkke)
- Herefter søges der på alle aktive produkter, udfra fundne serier (løkke)
- Herefter checkes der om der er tilføjet priser, til de enkelte produkter (if)

Problemet er at den laver et output for hvert produkt, hvor den kun skal poste for hver serie. Dette skyldes løkken der checker produkterne. Jeg kan dog ikke fjerne denne løkke, da jeg anvender produkt id'erne, når der checkes efter tilføjet priser.
Håber du kan se en løsning på mit problem


        $query2 = mysql_query("SELECT * FROM series WHERE brand_id='$row[id]' AND type='Reels' AND validation_status='1' ORDER BY series ") or die (mysql_error());
        while($row2 = mysql_fetch_array($query2)) {

            $query3= mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error());
            while($row3 = mysql_fetch_array($query3)) {
           
                    $sql_doublecheck3 = mysql_query("SELECT * FROM prices WHERE product_id='$row3[id]' ") or die (mysql_error());
                    $doublecheck3 = mysql_num_rows($sql_doublecheck3);
                    if($doublecheck3 != 0){
Avatar billede kgp43 Nybegynder
07. juli 2004 - 09:39 #7
Samme kode (prøvede at gøre det mere overskueligt):

$query2 = mysql_query("SELECT * FROM series WHERE brand_id='$row[id]' AND type='Reels' AND validation_status='1' ORDER BY series ") or die (mysql_error());
while($row2 = mysql_fetch_array($query2)) {

$query3= mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error());
while($row3 = mysql_fetch_array($query3)) {
           
$sql_doublecheck3 = mysql_query("SELECT * FROM prices WHERE product_id='$row3[id]' ") or die (mysql_error());
$doublecheck3 = mysql_num_rows($sql_doublecheck3);
if($doublecheck3 != 0){
Avatar billede kgp43 Nybegynder
07. juli 2004 - 10:34 #8
Tror jeg løste problemet, sig endelig til hvis det kan gøres bedre (eller mere simplet):


$query2 = mysql_query("SELECT * FROM series WHERE brand_id='$row[id]' AND type='Reels' AND validation_status='1' ORDER BY series ") or die (mysql_error());
while($row2 = mysql_fetch_array($query2)) {
unset($no);

$query3= mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error());
while($row3 = mysql_fetch_array($query3)) {
$no++;

$sql_doublecheck3 = mysql_query("SELECT * FROM prices WHERE product_id='$row3[id]' ") or die (mysql_error());
$doublecheck3 = mysql_num_rows($sql_doublecheck3);
if(($doublecheck3 != 0) && ($no == 1)) {
Avatar billede kgp43 Nybegynder
13. juli 2004 - 13:12 #9
.
Avatar billede erikjacobsen Ekspert
13. juli 2004 - 13:16 #10
Jeg ville nok overveje at lave en join mellem de 3 tabeller, så det er
databasen, der laver arbejdet.
Avatar billede kgp43 Nybegynder
13. juli 2004 - 14:39 #11
har desværre ikke lært at anvende join, vil prøve at kigge på det når jeg får mere tid :)
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
Computerworld tilbyder specialiserede kurser i database-management

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