Ik heb een code proberen te maken, waarbij een admin uit een dropdownlijst steeds kan kiezen tussen 2 teams en hun verdiende punten (met alleen de volgende combinaties: 3-0 , 2-2, 1-1 en 0-3).

De bedoeling is dus dat als er een post form verzonden is, dat dan de gevens in de database juist worden geupdated, maar dat is hier enkel het geval voor score1 = 0, score2 = 3 en omgekeerd, dus zodra beide scores gelijk zijn, voert hij nog steeds 1ste of 2de if uit ipv 3de of 4de en toch echo'ed/geeft hij voor score1 en score2 een 1 of een 2 als dat gekozen wordt


<?php

incude_once('config.php');

if(isset($_POST['punten'])){

 $team1=$_POST['team1'];
 $score1=$_POST['score1'];
 $team2=$_POST['team2'];
 $score2=$_POST['score2'];

 if($score1==0 && $score2==3){

  $res1=mysql_query("UPDATE gebruikers 
                     SET lost=lost+1 
                     WHERE nickname=".$team1."");

  $res2=mysql_query("UPDATE gebruikers 
                     SET won=won+1, totalpoints=totalpoints+3 
                     WHERE nickname=".$team2."");

 }elseif($score1==3 && $score2==0){

  $res3=mysql_query("UPDATE gebruikers 
                     SET won=won+1, totalpoints=totalpoints+3        
                     WHERE nickname=".$team1."");

  $res4=mysql_query("UPDATE gebruikers 
                    SET lost=lost+1 
                    WHERE nickname=".$team2."");

 }elseif($score1==1 && $score2==1){

  $res5=mysql_query("UPDATE gebruikers 
                     SET tie=tie+1, totalpoints=totalpoints+1 
                     WHERE nickname=".$team1."");

  $res6=mysql_query("UPDATE gebruikers 
                    SET tie=tie+1, totalpoints=totalpoints+1
                    WHERE nickname=".$team2."");

 }elseif($score1==2 && $score2==2){

  $res7=mysql_query("UPDATE gebruikers 
                     SET tie=tie+2, totalpoints=totalpoints+2  
                     WHERE nickname=".$team1."");

  $res8=mysql_query("UPDATE gebruikers 
                     SET tie=tie+2, totalpoints=totalpoints+2 
                     WHERE nickname=".$team2."");

 }

}else{ 
 //post formulier 
}

?>
|| is or
&& is and
Ik denk dat het al fout gaat bij je if (). Want een vergelijking is '==' en niet een enkele.
sloop die backticks er nog even uit
zo voert ie helemaal niks uit
- Waar controleer je of de queries zijn gelukt?
- Waar controleer je of de queries ook iets hebben aangepast?

Verder zijn de queries niet te debuggen, de SQL staat direct in de functie die hem uitvoert, de query kan dus nooit worden geechoot. En dat heb je bij debuggen wel nodig.

De queries zullen waarschijnlijk stuk lopen op het ontbreken van quotes in de SQL, een nickname klinkt mij in de oren als een string. En die hoort tussen quotes ' te staan.

Oplossing: Foutafhandeling inbouwen.
queries op zich zijn wel juist, mocht ik de variabele team door een bestaande team in de db vervangen en het dan via phpmyadmin uitvoeren, dan zou(den) er effectief (een) bepaalde cel(len) aangepast worden.

Het echo'ed ook wel de juiste getal voor variabele score1 en score2, maar het lijkt alsof het geen enkele query kiest om die dan uit te voeren


[edit]Maar ja, inderdaad, sommige nicknames zijn wel strings hier, jij had dus gelijk met die quotes.

Het werkt perfect nu, bedankt ;)[/edit]
Officieel gebruik je overigens voor een string dubbele quotes
Hylke schreef op 16.11.2007 16:48
Officieel gebruik je overigens voor een string dubbele quotes
Is dat zo? In Oracle en pgSQL is dat echt niet het geval, enkele quotes staan om een string.

A string constant in SQL is an arbitrary sequence of characters bounded by single quotes ('), for example 'This is a string'.


Zie verder de handleiding.

Het is dan wel zo handig om de query, de SQL, in PHP tussen dubbele quotes te zetten, dan hoef je niet alle enkele quotes van de SQL te gaan escapen.
Over het algemeen gebruik je bij programmeren voor strings altijd dubbele quotes, voor SQL weet ik niet hoe het in elkaar zit =) blijkbaar gebruik je daar enkele quotes. Het is in ieder geval goed om consequent te zijn in het gebruik van je quotes en daarom gebruik ikzelf voor strings bijna altijd dubbele quotes.
Tja, dat zal jouw aanpak zijn, maar in mijn code kom je nooit dubbele quotes tegen, uitsluitend enkele quotes.

Dubbele quotes zijn voor de html en css gereserveerd, de templates staan er dus vol mee.

Het gebruik van enkele quotes is een fractie sneller, maar belangrijker is dat de data tussen de enkele quotes niet wordt geparsed.
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

echo '$var';

echo "$var";
?>
Dit levert 2 verschillende resultaten op, de 2e kan zelfs de nodige notices e.d. op het scherm gaan zetten.

Resultaat:
$var<br />
<b>Notice</b>: Undefined variable: var in <b>PHPDocument15</b> on line <b>7</b><br />


Met een enkele quote dwing je dus een echte string af, met een dubbele quote is dat niet het geval en zou het best een variabele kunnen zijn. Mocht je hier tegenaan lopen, dan wordt het echt zoeken naar een speld in een hooiberg.

Edit: Ik heb zelfs moeite met het maken van goeie voorbeelden...

Reageren