mysql error?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Koen B

Koen B

04/02/2007 22:29:00
Quote Anchor link
Hallo,

op onze site is iets raars aan de hand, het is een soort spelletje waar iemands rank omlaag is gegaan. Maar dit mag helemaal niet kunnen. Dus ik heb zon beetje alle codes doorzocht en all mysql queries gecontroleerd maar ik kan nergens vinden wat de fout is.

Nou vraag ik me af of het mogelijk is dat een mysql query tijdelijk geen contact met de database kan maken en daarom geen waarde geeft. En als hij er dan 20 bij op moet tellen en weer in de database moet zetten, dat hij dan 20 in de database zet?

Dus bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$a
= "SELECT * FROM members WHERE gebruikersnaam='".$_SESSION[id]."'";
$b = mysql_query($a);
$c = mysql_fetch_object($b);
 // hier zou dus tijdelijk geen contact mee zijn dus er komt niks terug

$nieuwrank = $c->rank + 20;
// Eigenlijk moet hier dus een hoger getal uitkomen maar omdat $c->rank niet bestaan is hij maar 20

mysql_query ("UPDATE `members` SET `rank` = '".$nieuwrank."' WHERE `gebruikersnaam` = '".$naam."'");
//Hier zet de dus de 20 in de database zodat de rank dus omlaag is gegaan?
?>


Mijn vraag is: is zoiets mogelijk? En is hier iets aan te doen?
Met or die(mysql_error() misschien?
of zit er toch ergens een fout in mijn code?

Alvast bedankt ...
Gewijzigd op 01/01/1970 01:00:00 door Koen B
 
PHP hulp

PHP hulp

26/09/2022 17:43:33
 
Jan Koehoorn

Jan Koehoorn

04/02/2007 22:39:00
Quote Anchor link
Je kunt het beter in één query doen:

UPDATE members
SET rank = rank + 20
WHERE gebruikersnaam = '$naam'
 
Koen B

Koen B

05/02/2007 17:33:00
Quote Anchor link
niet als ik $nieuwrank later in de code nog nodig heb ....
 
Erik Rijk

Erik Rijk

05/02/2007 17:38:00
Quote Anchor link
Dan nog kan het met 1 Query hoor koen.
Je vult de huidige rank steeds aan met 20 punten.

Heb je nog steeds de fout dat er punten worden afgetrokken? Het zit dan denk ik niet in het bovenstaande stuk, daar zie ik verder niks verkeerds.
 
Koen B

Koen B

05/02/2007 17:41:00
Quote Anchor link
Het gaat er niet om dat er niks verkeerd is aan de code, maar ik vroeg me af of het mogelijk is dat php tijdelijk geen contact maakt met de database en daarom geen waarde heeft. En dan 'niks + 20 = 20' gaat doen.

Want de rank hoort helemaal niet omlaag te kunnen gaan en het is ook nog maar 1 keer gebeurd.
Als het een fout in de code zou zijn zou de rank vaker omlaag moeten gaan, maar we hebben het nog maar 1 keer gezien ...
 
Robert Deiman

Robert Deiman

05/02/2007 17:45:00
Quote Anchor link
Controleer gewoon of er wat gegevens zijn gevonden, zo ja dan kan je updaten, anders niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if(mysql_num_rows($query) != 1){
   //query fout gegaan, geef melding en update niet
   }
else{
  // wel gegevens gevonden, update wel
   }
?>


Meest simpele oplossing om zoiets in de toekomst te voorkomen.
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
 
Nicoow Unknown

Nicoow Unknown

05/02/2007 17:46:00
Quote Anchor link
Quote:
Het gaat er niet om dat er niks verkeerd is aan de code, maar ik vroeg me af of het mogelijk is dat php tijdelijk geen contact maakt met de database en daarom geen waarde heeft. En dan 'niks + 20 = 20' gaat doen.


maar niks + 20 is toch ook gewoon 20?
 
Robert Deiman

Robert Deiman

05/02/2007 17:49:00
Quote Anchor link
nico schreef op 05.02.2007 17:46:
Quote:
Het gaat er niet om dat er niks verkeerd is aan de code, maar ik vroeg me af of het mogelijk is dat php tijdelijk geen contact maakt met de database en daarom geen waarde heeft. En dan 'niks + 20 = 20' gaat doen.


maar niks + 20 is toch ook gewoon 20?

Lees even terug, het gaat er niet om dat die de berekening niet goed doet, maar als ik level 30 ben (bijvoorbeeld) en er is even geen verbinding met de database, dan kan het zijn dat hij met een lege $row['level'] gaat werken, en dan zou ik level=level+20 is -> level=niks+20 krijgen. Snap je? Dus dan wordt ik lvl 20 terwijl ik 30 was. en 50 zou moeten worden!
 
Koen B

Koen B

05/02/2007 17:50:00
Quote Anchor link
nico schreef op 05.02.2007 17:46:
maar niks + 20 is toch ook gewoon 20?


heel scherp ;) maar wat als er in de database nou 300 staat ...
 
Koen B

Koen B

05/02/2007 17:53:00
Quote Anchor link
Robert schreef op 05.02.2007 17:45:
Controleer gewoon of er wat gegevens zijn gevonden, zo ja dan kan je updaten, anders niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if(mysql_num_rows($query) != 1){
   //query fout gegaan, geef melding en update niet
   }
else{
  // wel gegevens gevonden, update wel
   }
?>


Meest simpele oplossing om zoiets in de toekomst te voorkomen.


Dit is een vrij irritante oplossing, omdat ik heel erg veel queries heb in totaal. (honderden, misschien wel duizend)
Maar het is dus mogelijk dat php gewoon verder gaat als hij niks kan vinden door een tijdelijke downtime van de database ofzo?
Kan het ook met or die(mysql_error())? of werkt dit alleen als de query fout is?
Dit is namelijk makkelijker toe te voegen met ctrl h
Gewijzigd op 01/01/1970 01:00:00 door Koen B
 
Erik Rijk

Erik Rijk

05/02/2007 17:55:00
Quote Anchor link
Het is de simpelste oplossing die Robert bied.
Het helpt je wel van je probleem af, waarom niet gebruiken? Van die 3 regels wordt je script niet "merkbaar" langzamer hoor :)
 
Koen B

Koen B

05/02/2007 20:08:00
Quote Anchor link
Ik het mogelijk met or die(mysql_error())?
Of doet dat iets anders :o ik denk dat dit wel moet werken, maar ik wil het zeker weten ...
 
Manaus

Manaus

05/02/2007 22:03:00
Quote Anchor link
er kunnen altijd fouten onstaan in een query dus altijd or die erbij;)
 
Robert Deiman

Robert Deiman

05/02/2007 22:35:00
Quote Anchor link
koen schreef op 05.02.2007 20:08:
Ik het mogelijk met or die(mysql_error())?
Of doet dat iets anders :o ik denk dat dit wel moet werken, maar ik wil het zeker weten ...


Niet doen, gebruik een error_handler die de boel logt. Als een gebruiker een melding krijgt over tabellen of een username voor het inloggen naar je database die niet goed zijn, heeft die (mogelijke) hacker meer informatie, waardoor het gemakkelijker wordt.
Geef een melding dat er wat fout is gegaan, met een globale beschrijving Bijv: Er kon geen verbinding worden gemaakt met de database, of Er zijn geen records geselecteerd.
En gebruik beter trigger_error en dan wel in combinatie met wat ik zei, je mag er nooit vanuit gaan dat query's altijd maar goed worden uitgevoerd, dus eerst controleren voor je verder gaat!
 



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.