UPDATE (verkeerde gegevens)
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
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?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
}
?>
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
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Ed
&& 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 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.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
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 ;)
Het werkt perfect nu, bedankt ;)
Gewijzigd op 01/01/1970 01:00:00 door Ed
Officieel gebruik je overigens voor een string dubbele quotes
Hylke schreef op 16.11.2007 16:48:
Is dat zo? In Oracle en pgSQL is dat echt niet het geval, enkele quotes staan om een string.Officieel gebruik je overigens voor een string dubbele quotes
Quote:
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.
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.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
echo '$var';
echo "$var";
?>
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:
Quote:
$var<br />
<b>Notice</b>: Undefined variable: var in <b>PHPDocument15</b> on line <b>7</b><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...
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Dat doe jij ja, maar ik gebruik overal enkele quotes. Bij zowel PHP als bij SQL.
De tweede manier gebruik je natuurlijk ook niet, dat wordt uiteraard zoiets:
Allereerst gebruik je dan netjes de string concatenation operator, namelijk de punt, die bedoelt is om meerdere strings samen te voegen. Ten tweede leer je jezelf alvast een goede basis omdat in programmeertalen je echt dubbele quotes voor strings moet gebruiken.
@GaMer13
Wat bedoel je hier precies mee te zeggen? Kom vooral met argumenten om me te overtuigen =).
Uiteraard wil je geen variabelen binnen quotes hebben, dat ben ik direct met je eens. Maar dan wil ik wel iedere willekeurige tekst tussen de quotes kunnen zetten zonder de kans te lopen dat dit fout gaat. En ja, ik ben bekend met het lapmiddel van de accolades {}.
Enkele quotes in PHP bevallen mij uitstekend, in SQL zijn ze verplicht. Althans, enkele quotes zijn de officieele standaard. Andere programmeertalen heb ik geen ervaring mee, ik ben van huis uit geen programmeur.
Hmm wat bedoel je precies? Een dollarteken kun je in html sowieso het beste met de html code weergeven, zodat hij altijd goed wordt weergegeven. Dus dan heb je sowieso het probleem niet meer dat hij vervangen wordt. Je kunt hem natuurlijk ook altijd escapen. Maar bedoel je dit wel?
Quote:
De $dollar is vandaag in waarde gedaald
En in jouw code heb je toevallig ook een variabele $dollar staan:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$dollar = 1.45;
$string = "De $dollar is vandaag in waarde gedaald";
echo $string;
?>
$dollar = 1.45;
$string = "De $dollar is vandaag in waarde gedaald";
echo $string;
?>
Resultaat:
Quote:
De 1.45 is vandaag in waarde gedaald
Wanneer de data van $string tussen enkele quotes staat, krijg je dit als output:
Quote:
De $dollar is vandaag in waarde gedaald
De kans dat je dit gebeurd is erg klein, maar het is vreemd gedrag dat voor hele lullige bugs kan zorgen. Zeker omdat de variabele $dollar van waarde kan wisselen en je tijdens het testen iedere keer andere waardes kunt krijgen. Zelfs correcte gegevens zijn mogelijk, bv. wanneer $dollar nog niet bestaat. Erg lastig om zoiets te debuggen en het is erg eenvoudig om dit soort problemen te voorkomen: enkele quotes.
Maar goed, het is wel duidelijk dat het vrij weinig uit maakt of je nou enkele of dubbele quotes gebruikt, als je maar consequent blijft.