Error: mysql_fetch_assoc()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

The Ultimate

The Ultimate

03/12/2010 12:39:25
Quote Anchor link
Beste php'ers,

Onderstaande functie heb ik gemaakt om gebruikers uit een nieuwsbrief te halen. Wanneer ik een gebruiker die in de database staat opgenomen (dus: active=1) uitschrijf dan wordt de gebruiker in de database uitgeschreven (dus: active=0) maar krijg ik wel de volgende error:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in I:\UsbWebserver\Root\modernCMS\admin\class\cms_class.php on line 274

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    function delete_subscriber($email) {
        $email = mysql_real_escape_string($email);
        // Controleer of de gebruiker bestaat
        $sql = "SELECT * FROM cms_subscribers WHERE email = '$email'";
        $res = mysql_query($sql);
        if(mysql_num_rows($res) == 0){
            echo '<p>Helaas, het door u ingevulde e-mailadres werd niet gevonden.</p>';
        }
else {
            while($row = mysql_fetch_assoc($res)) {
                if($row['active'] == '1') {
                    $sql = "UPDATE cms_subscribers SET active='0' WHERE email='$email'";
                    $res = mysql_query($sql) or die(mysql_error());
                    echo '<p>U bent uitgeschreven voor onze nieuwsbrief.</p>';
                }
else {
                    echo '<p>Het door u opgegeven e-mailadres was reeds uitgeschreven voor onze nieuwsbrief.</p>';
                }
            }            
        }
    }

?>


Wie weet hoe dit komt? Krijg het niet opgelost.
Gewijzigd op 03/12/2010 12:40:44 door The Ultimate
 
PHP hulp

PHP hulp

26/02/2025 05:26:37
 
- Ariën  -
Beheerder

- Ariën -

03/12/2010 12:41:41
Quote Anchor link
Ik mis fatsoenlijke foutafhandeling.
 
Gerhard l

gerhard l

03/12/2010 12:41:41
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= "SELECT * FROM cms_subscribers WHERE email = '".$email."'";
?>
 
The Ultimate

The Ultimate

03/12/2010 12:44:45
Quote Anchor link
@Aar: Hoezo?

@Gerhard: Maakt geen verschil.
 
Gerhard l

gerhard l

03/12/2010 12:48:20
Quote Anchor link
The Ultimate op 03/12/2010 12:44:45:
@Aar: Hoezo?

@Gerhard: Maakt geen verschil.


foutafhandeling moet je altijd maken om te kijken waar het fout gaat, en weetje wat je moet aanpassen

dat van mij maakt wel verschil anders pakt ie de variable niet.

en je moet andere variablen kiezen bij de volgende query denk ik
 
- Ariën  -
Beheerder

- Ariën -

03/12/2010 12:52:03
Quote Anchor link
Je controleer niet eens of de query's gelukt zijn. In dat geval moet je mysql_error() echoén, en dan uiteraard zonder die die().

Want als jij iemand betrapt op iets wat diegene fout doet, moet hij/zij dan ook dood?
Die() is gewoon een functie vaak te pas en te onpas worden gebruikt.
 
The Ultimate

The Ultimate

03/12/2010 12:53:26
Quote Anchor link
@Gerhard:
Ja, ik snap wel wat een foutafhandeling inhoud, maar ik heb toch duidelijk een errormelding in regel 274 gekregen? Die laat ik jullie nota bene zien. Is error_reporting(E_ALL); bovenaan niet voldoende dan?

En wat betreft die variabele: die pakt hij wel want de functie werkt gewoon prima, de database wordt telkens netjes geupdate. Alleen blijf ik die error houden.

Toevoeging op 03/12/2010 12:56:08:

@Aar:
Dit beter?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    function delete_subscriber($email) {
        $email = mysql_real_escape_string($email);
        // Controleer of de gebruiker bestaat
        $sql = "SELECT * FROM cms_subscribers WHERE email = '$email'";
        $res = mysql_query($sql) or print(mysql_error());
        if(mysql_num_rows($res) == 0) {
            echo '<p>Helaas, het door u ingevulde e-mailadres werd niet gevonden.</p>';
        }
else {
            while($row = mysql_fetch_assoc($res)) {
                if($row['active'] == 1) {
                    $sql = "UPDATE cms_subscribers SET active='0' WHERE email='$email'";
                    $res = mysql_query($sql) or print(mysql_error());
                    echo '<p>U bent uitgeschreven voor onze nieuwsbrief.</p>';
                }
else {
                    echo '<p>Het door u opgegeven e-mailadres was reeds uitgeschreven voor onze nieuwsbrief.</p>';
                }
            }            
        }
    }

?>

Krijg nog steeds dezelfde error. Iemand die kan helpen?
 
- Ariën  -
Beheerder

- Ariën -

03/12/2010 13:05:24
Quote Anchor link
Nee, ook dit is fout.

Even op opzetje hoe het wel moet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$sql
= "UPDATE cms_subscribers SET active='0' WHERE email='".mysql_real_escape_string($email)."'";
$res = mysql_query($sql);

if($res) {
      // het is gelukt. Echo een bevestiging naar de gebruiker, voer de volgende acties uit...
} else {
      echo "Er is een fout opgetreden: ".mysql_error().
}

?>

Gewijzigd op 03/12/2010 13:07:04 door - Ariën -
 
Bas Cost Budde

Bas Cost Budde

03/12/2010 13:06:36
Quote Anchor link
Heb je een mysql-error gekregen? Nee, een php-errormelding. Je query levert geen geldige resource op. Je query klopt niet. Wat klopt er niet? Dat zie je zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
// was : $res = mysql_query($sql) or print(mysql_error());
$res = mysql_query($sql);
if ($error = mysql_error()) {
  echo "Probleem bij query '$sql'<br>$error";
} else {
// de rest van je code
}


edit: sloom! wat ben ik toch sloom! :)
@Aar: ik heb de neiging om te testen met is_resource($res), vind je dat overdreven?
Gewijzigd op 03/12/2010 13:07:45 door Bas Cost Budde
 
- Ariën  -
Beheerder

- Ariën -

03/12/2010 13:13:45
Quote Anchor link
Wat jij wilt, ik gebruik het nooit. Zal wel komen omdat het overdreven is.
 
The Ultimate

The Ultimate

03/12/2010 13:50:14
Quote Anchor link
Inmiddels het script aangepast naar aanwijzing van Aar (Aar bedankt voor de uitleg):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
    function delete_subscriber($email) {
        // Controleer of de gebruiker bestaat
        $sql = "SELECT * FROM cms_subscribers WHERE email = '".mysql_real_escape_string($email)."'";
        $res = mysql_query($sql);
        if(mysql_num_rows($res) == 0) {
            echo '<p>Helaas, het door u ingevulde e-mailadres werd niet gevonden.</p>';
        }
else {
            while($row = mysql_fetch_assoc($res)) {
                if($row['active'] == 1) {
                    $sql = "UPDATE cms_subscribers SET active='0' WHERE email='".mysql_real_escape_string($email)."'";
                    $res = mysql_query($sql);
                    if($res) {
                          // het is gelukt. Echo een bevestiging naar de gebruiker, voer de volgende acties uit...
                        echo '<p>U bent uitgeschreven voor onze nieuwsbrief.</p>';
                    }
else {
                          echo "Er is een fout opgetreden: ".mysql_error();
                    }
                }
else {
                    echo '<p>Het door u opgegeven e-mailadres was reeds uitgeschreven voor onze nieuwsbrief.</p>';
                }
            }            
        }
    }


?>

Echter, de error blijf ik krijgen. Wie o Wie weet wat ik fout doe?
 
Bas Cost Budde

Bas Cost Budde

03/12/2010 13:51:33
Quote Anchor link
Je doet nog altijd niet aan fout*afhandeling*.

1) query uitvoeren
2) kijken of er een resultaat is
3) iets met het resultaat doen

Jij mist stap 2.
Gewijzigd op 03/12/2010 13:52:04 door Bas Cost Budde
 
- Ariën  -
Beheerder

- Ariën -

03/12/2010 13:54:50
Quote Anchor link
En je past mijn code maar op 1 plek toe i.p.v. op alle mysql-query's
 
The Ultimate

The Ultimate

03/12/2010 13:58:50
Quote Anchor link
Zo beter?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
    function delete_subscriber($email) {
        // Controleer of de gebruiker bestaat
        $sql = "SELECT * FROM cms_subscribers WHERE email = '".mysql_real_escape_string($email)."'";
        $res = mysql_query($sql);
        if(!$res){
            echo '<p>Er is een fout opgetreden tijdens het uitvoeren van een query in de functie delete_subscriber.</p>';
        }

        if(mysql_num_rows($res) == 0) {
            echo '<p>Helaas, het door u ingevulde e-mailadres werd niet gevonden.</p>';
        }
else {
            while($row = mysql_fetch_assoc($res)) {
                if($row['active'] == 1) {
                    $sql = "UPDATE cms_subscribers SET active='0' WHERE email='".mysql_real_escape_string($email)."'";
                    $res = mysql_query($sql);
                    if($res) {
                          // het is gelukt. Echo een bevestiging naar de gebruiker, voer de volgende acties uit...
                        echo '<p>U bent uitgeschreven voor onze nieuwsbrief.</p>';
                    }
else {
                          echo "Er is een fout opgetreden: ".mysql_error();
                    }
                }
else {
                    echo '<p>Het door u opgegeven e-mailadres was reeds uitgeschreven voor onze nieuwsbrief.</p>';
                }
            }            
        }
    }

?>

Hebben jullie ook enig idee waardoor de error wordt veroorzaakt of gaan we het vandaag alleen nog maar over mijn foutafhandeling hebben?
 
Bas Cost Budde

Bas Cost Budde

03/12/2010 13:59:16
Quote Anchor link
Ik laat het aan jou.
 
Gerhard l

gerhard l

03/12/2010 14:10:50
Quote Anchor link
ik zou eens verschillende variablen proberen? jeweetmaarnooit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
    function delete_subscriber($email) {
        // Controleer of de gebruiker bestaat
        $sql = "SELECT * FROM cms_subscribers WHERE email = '".mysql_real_escape_string($email)."'";
        $res = mysql_query($sql);
        if(!$res){
            echo '<p>Er is een fout opgetreden tijdens het uitvoeren van een query in de functie delete_subscriber.</p>';
        }

        if(mysql_num_rows($res) == 0) {
            echo '<p>Helaas, het door u ingevulde e-mailadres werd niet gevonden.</p>';
        }
else {
            while($row = mysql_fetch_assoc($res)) {
                if($row['active'] == 1) {
                    $sqlupdate = "UPDATE cms_subscribers SET active='0' WHERE email='".mysql_real_escape_string($email)."'";
                    $resupdate = mysql_query($sqlupdate);
                    if($resupdate) {
                          // het is gelukt. Echo een bevestiging naar de gebruiker, voer de volgende acties uit...
                        echo '<p>U bent uitgeschreven voor onze nieuwsbrief.</p>';
                    }
else {
                          echo "Er is een fout opgetreden: ".mysql_error();
                    }
                }
else {
                    echo '<p>Het door u opgegeven e-mailadres was reeds uitgeschreven voor onze nieuwsbrief.</p>';
                }
            }            
        }
    }

?>
 
The Ultimate

The Ultimate

03/12/2010 14:19:06
Quote Anchor link
@gerhard:
Geweldig, dat schijnt te werken zonder error. Bedankt!

Maar wat heb je nu precies veranderd dan?
 
Gerhard l

gerhard l

03/12/2010 14:20:24
Quote Anchor link
dat heb ik je aan het begin ook gezegt, boven aan doe je een $sql query en die voer je uit met $res, en even later gebruik je dezelfde variabelen doodleuk weer, dus heb ik de volgende veranderd in $sqlupdate en $resupdate .. ;)
 
The Ultimate

The Ultimate

03/12/2010 14:23:39
Quote Anchor link
Yup, nu zie ik het inderdaad staan. Goed gedaan! Maar waarom ik nu niet dezelfde vars kan gebruiken snap ik niet... Maar ja, het werkt. Nogmaals mijn dank!
 
- SanThe -

- SanThe -

03/12/2010 14:27:17
Quote Anchor link
Jouw error wordt veroorzaakt door een mislukte query. Door nette en volledige foutafhandeling krijg je een andere, duidelijkere, error te zien waardoor het probleem sneller is te traceren.

while($row = mysql_fetch_assoc($res)) {
Dit kan prima werken, behalve, zoals jij nu doet. In die while()-loop verander jij de waarde van $res. Dat gaat zeker fout.


Edit: Zoals wel vaker, beetje laat.
Gewijzigd op 03/12/2010 14:28:34 door - SanThe -
 
The Ultimate

The Ultimate

03/12/2010 14:31:12
Quote Anchor link
@SanThe:
Dank je voor de uitleg. Ik zie nu ineens ook de fout. Stom, stom, stom.

Wel vreemd dat ik de foutafhandeling heb aangepast maar desondanks dezelfde foutmelding bleef krijgen. Heb je toevallig nog een tip om dergelijke fouten beter weer te kunnen geven?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.