Error: mysql_fetch_assoc()
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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>';
}
}
}
}
?>
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
Ik mis fatsoenlijke foutafhandeling.
@Gerhard: Maakt geen verschil.
The Ultimate op 03/12/2010 12:44:45:
@Aar: Hoezo?
@Gerhard: Maakt geen verschil.
@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
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.
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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>';
}
}
}
}
?>
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?
Even op opzetje hoe het wel moet:
Code (php)
1
2
3
4
5
6
7
8
9
10
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().
}
?>
$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 -
Code (php)
1
2
3
4
5
6
7
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
}
$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
Wat jij wilt, ik gebruik het nooit. Zal wel komen omdat het overdreven is.
Code (php)
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
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>';
}
}
}
}
?>
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?
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
En je past mijn code maar op 1 plek toe i.p.v. op alle mysql-query's
Code (php)
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
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>';
}
}
}
}
?>
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?
Ik laat het aan jou.
Code (php)
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
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>';
}
}
}
}
?>
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>';
}
}
}
}
?>
Geweldig, dat schijnt te werken zonder error. Bedankt!
Maar wat heb je nu precies veranderd dan?
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 .. ;)
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!
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 -
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?