Hallo iedereen,

Ik ben net 3 dagen geleden begonnen met het schrijven van PHP.
Heb diverse websites al door gespit om te zien hoe dingen in elkaar zitten en hoe iets werkt en waarom het werkt.

Met deze informatie op zak ben ik aan de slag gegaan met een MMO script.
Nu ben ik al aardig op weg alleen ben ik op iets oneigenaardigs gestuit en was ik benieuwd of hier iemand zou weten wat het probleem is.

Het is namelijk zo dat als ik opdr4.php uitvoer is het de bedoeling dat hij een UPDATE doet bij de database. Met de voorgaande scripts opdr1.php, opdr2.php en opdr3.php is dit wel goed gegaan en voert hij het wel gewoon uit, maar bij opdr4.php niet.

Nu is mij opgevallen dat hij dit probleem alleen heeft als de totale waarde van de variabele die hij moet updaten boven de 1000 uitkomt in de database.
Ook werkt het wel als ik de link gewoon in mijn adresbar invoer.

Is er iemand die mij op weg kan helpen?

Hieronder het script van opdr4.php:

<?php
include "configuratie.php";

session_start();

if(isset($_SESSION['spelernaam']))
$spelernaam = $_SESSION['spelernaam'];

$statestieken = "SELECT * FROM spelers WHERE spelernaam = '$spelernaam'";
$statestiekenquery = mysql_query($statestieken) or die ("Kon geen statestieken vinden!");
$statestiekenarray = mysql_fetch_array($statestiekenquery);

$ervaring = "180";
$naltawin = "0";
$kostenkracht = "5";
$voedselwin = "0";

if ("$statestiekenarray[kracht]">'5')
{
mysql_query("UPDATE spelers SET ervaring = ervaring+".$ervaring." WHERE spelernaam = '$spelernaam'");
mysql_query("UPDATE spelers SET nalta = nalta+".$naltawin." WHERE spelernaam = '$spelernaam'");
mysql_query("UPDATE spelers SET kracht = kracht-".$kostenkracht." WHERE spelernaam = '$spelernaam'");
mysql_query("UPDATE spelers SET opdrachten = '4' WHERE spelernaam = '$spelernaam'");
mysql_query("UPDATE spelers SET voedsel = voedsel+".$voedselwin." WHERE spelernaam = '$spelernaam'");


}

else
{
header( 'Location: http://localhost/FTI/nvk.php';);
}

header( 'Location: http://localhost/FTI/index.php'; ) ;

?>

[size=xsmall]Toevoeging op 20/12/2011 19:19:08:[/size]

Het gaat overigens om de variabel $ervaring
1. Met alleen isset controleren is niet voldoende
2. correcte mysql foutafhandeling ontbreekt
3. na een header redirect dient een exit te volgen
4. variabelen dien je niet te quoten
5. zorg er dat je errer_reporting tijdens het test op het hoogste nivo aan hebt staan
6. de UPDATE kan in 1 statement
-> http://www.w3schools.com/sql/sql_update.asp
7 schrijf geen "afgekapte" if statements, gebruik gewoon altijd if () {} else {}, is overzichtelijker
8. fetchen met array vereist in mijn ogen de tweede parameter, je krijgt nu met 1 fetch 2x dezelfde bagger om je oren terwijl 1x meer dan voldoende is. Uiteraard kom je dan uit dat fetchen met fetch_assoc.
9. SELECT * is voor dummies, je kan beter de velden daar benoemen

De grootste vraag is en blijft uiteraard:
welke eventuele parse errors krijg je om de oren
en welke eventeuele mysql errors krijg je om je oren bij het uitvoeren van de queries

Note: en blijkbaar heb je alle foutieve zaken genoteerd bij je uitpluiswerk
Zoo dat zijn aardig wat kritiek puntjes om aan te werken :)
Maar dat is het hem nou ik krijg geen mySQL en/of Parse errors.

Het gekke is dat het getal in mijn database niet boven de 1000 wil als ik het script via mijn browser oproep. Maar zodra ik de directe link in de adressbar voer, voert hij het dus wel uit.
Patrick P op 20/12/2011 19:48:03

Als ik het script via mijn browser oproep. Maar zodra ik de directe link in de adressbar voer, voert hij het dus wel uit.

Wat is het verschil in beide volgens jouw? Ik raad aan om eens te kijken naar foutafhandeling.

Reageren