Permalänk

Php kod, fungerar inte riktigt.

Hej!
Sitter här med min kod och håller på att bli tokig snart
Information: Trycker man på play utan att välja en siffra så slumpar den random samt skall skriva ut hur mycket poäng man har, MEN den väljer istället if($poang<=0) { att man inte har några poäng.
Samt väljer man en siffra och trycker på play så sätts värdet i databasen till 0 direkt oavsett hur mycket poäng du har. Jag antar att det har något med $poang att göra, points är en int i databasen.

<?php include "antet.php"; include "func.php"; if (!isset($_SESSION["user"][1])) { header('Location: login.php'); die(); } $usr=user($_SESSION["user"][0]); ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>Lottery - Win points</title> <style type="text/css"> body { background: #CCCCCC; } p,input { font-size: 11px; font-family: "Verdana", "Helvetica", "Arial", sans-serif; color: #244189; } label { cursor: pointer; } </style> </head> <body> <?php global $userrow, $db_id; $poang = $userrow["points"]; $skrivut = $gissningar = ''; if($_POST{'ok'}) { $poang = $_POST{'poang'}; $slump = rand(1,9); $skrivut .= 'Random number is '.$slump.'. '; $antal = count($_POST{'siffra'}); if (isset($antal) && !empty($antal)) { foreach($_POST{'siffra'} as $tal) { if(is_numeric($tal)) { $gissningar .= ' '.$tal; if($tal==$slump) { $poang = $userrow['points']+100; $query = "UPDATE users SET points=$poang WHERE id='".$_SESSION["user"]["0"]."' LIMIT 1"; mysql_query($query, $db_id); } else { $poang = $userrow['points']-10; $query = "UPDATE users SET points=$poang WHERE id='".$_SESSION["user"]["0"]."' LIMIT 1"; mysql_query($query, $db_id); } } } } if($gissningar!='') { $skrivut .= 'You guessed '.$gissningar.'. '; } if($poang<=0) { $skrivut .= '<b>You dont have any points left!</b><br/>EPIC FAIL!'; } else { $skrivut .= 'You have '.$poang.' points.'; } } if($usr[7]>=10){ echo ' <p>Every number you buy costs 10 points. If you win: Your betting money + 100 points.</p> <form action="'.$_SERVER{'PHP_SELF'}.'" method="post"> <p><input type="checkbox" name="siffra[]" id="t1" value="1" /> <label for="t1">1</label> <input type="checkbox" name="siffra[]" id="t2" value="2" /> <label for="t2">2</label> <input type="checkbox" name="siffra[]" id="t3" value="3" /> <label for="t3">3</label> <input type="checkbox" name="siffra[]" id="t4" value="4" /> <label for="t4">4</label> <input type="checkbox" name="siffra[]" id="t5" value="5" /> <label for="t5">5</label> <input type="checkbox" name="siffra[]" id="t6" value="6" /> <label for="t6">6</label> <input type="checkbox" name="siffra[]" id="t7" value="7" /> <label for="t7">7</label> <input type="checkbox" name="siffra[]" id="t8" value="8" /> <label for="t8">8</label> <input type="checkbox" name="siffra[]" id="t9" value="9" /> <label for="t9">9</label> <input type="hidden" name="poang" value="'.$poang.'" /> <input type="submit" name="ok" value="Play" /></p> </form> <p>'.$skrivut.'</p>'; }else{ echo '<b><div align"center">You need at least 10 points to play!</div></b>'; } ?> </body> </html>

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk
Medlem

Jag antar att du har session_start() i någon av de där översta php-filerna du inkluderar?

Föreslår att du antingen debuggar med någon PHP-debugger eller annars att du kör echo $poang; överallt för att se vad som händer (och inte händer). Någon kommer säkert hjälpa dig i detalj, men du lär dig mer på att felsöka själv!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av azoapes
Jag antar att du har session_start() i någon av de där översta php-filerna du inkluderar?

Föreslår att du antingen debuggar med någon PHP-debugger eller annars att du kör echo $poang; överallt för att se vad som händer (och inte händer). Någon kommer säkert hjälpa dig i detalj, men du lär dig mer på att felsöka själv!

Tänkte just säga det

Sedan måste jag nog säga att koden kan bli lite mer läsbar med riktiga indenteringar och även bättre namn på variabler med mera.

Visa signatur

Fractal Design Arc Svart | MSI Z68A-GD55 G3 REV B3 | Intel® Core i7 2600K, 3.4GHz, 8MB | Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE LP | MSI GeForce GTX 670 | Phanteks PH-TC14PE CPU Cooler (vit) | Corsair Power Supply 650W TX M, Modular, ATX, PS/2 | SSD (okänd tillverkare) + 2 äldre SATA2 diskar på 750 Gb, 350 gb. | OS: Microsoft Windows 10 home.

Permalänk

Jepp, session_start() finns i antet.php.

Jag kan testa att byta ut, så får man se vad som händer^^

Tro mig, har suttit och pulat med felsökning i över 7 h igår =D

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk

Jag har uppdaterat koden så att den kontrollerar att man har minst 10 poäng eller högre för att kunna spela nu. Har försökt med att sätta echo "$query"; och då får jag ut det här UPDATE users SET points=-10 WHERE id='1' LIMIT 1.

Det verkar som om det är ett logiskt fel, den verkar sätta points till värdet -10, att den inte räknar om points.

Så, har fått hjärnsläpp just nu och behöver någon som kan komma på vad som skall justeras på dom här raderna:

$poang = $userrow['points']+100; UPDATE users SET points=$poang OCH $poang = $userrow['points']-10; UPDATE users SET points=$poang

Fast dock så hämtar jag datan från databasen först, hmm.

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk
Medlem

UPDATE users SET points=points+$poang

Permalänk

Elactos:

Aha, skall testas! Att man inte tänkte på det innan!

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk

Yes, det fungerar! Du är en stjärna:) Aww, vad klantigt av mig att man inte tänkte på det, men men^_^

Då är det sista "problemet" kvar. Det är att den skriver ut hela tiden "You dont have any points left!", dvs hoppar direkt till if($poang<=0) {. Fast beräkningarna fungerar perfa nu. Tex har man 100, köper 5 nummer och ett av numrerna är vinnande så får man 100-50=50, 10 för det vinnande numret + 100, dvs 160.

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk

Kom på att jag inte har någon Sql fråga från databasen.

Kan den se ut så här:

$query="SELECT points FROM users where id='".$_SESSION["user"]["0"]."'";

Och var bör jag placera strängen?

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Darkpower
Kom på att jag inte har någon Sql fråga från databasen.

Kan den se ut så här:

$query="SELECT points FROM users where id='".$_SESSION["user"]["0"]."'";

Och var bör jag placera strängen?

Var lite mer paranoid när du skriver SQL-frågor. Detta är bättre:

$query="SELECT points FROM users where id='".mysql_real_escape_string($_SESSION["user"]["0"])."'";

Permalänk

Visst ja, säkerheten kan vara bra att tänka på

Var bör jag placera denna sträng?

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk

Den här koden:

$query="SELECT points FROM users where id='".mysql_real_escape_string($_SESSION["user"]["0"])."'"; $result = mysql_query($query, $db_id); $poang = mysql_fetch_array($result);

Placerade jag här nu:

if(is_numeric($tal)) { $gissningar .= ' '.$tal; if($tal==$slump) { $poang = $userrow['points']+100; $query = "UPDATE users SET points=points+$poang WHERE id='".mysql_real_escape_string($_SESSION["user"]["0"])."' LIMIT 1"; mysql_query($query, $db_id); } else { $poang = $userrow['points']-10; $query = "UPDATE users SET points=points+$poang WHERE id='".mysql_real_escape_string($_SESSION["user"]["0"])."' LIMIT 1"; mysql_query($query, $db_id); } } } } $query="SELECT points FROM users where id='".mysql_real_escape_string($_SESSION["user"]["0"])."'"; $result = mysql_query($query, $db_id); $poang = mysql_fetch_array($result); if($gissningar!='') { $skrivut .= 'You guessed '.$gissningar.'. '; } if($poang<=0) { $skrivut .= '<b>You don\'t have any points left!</b>'; } else { $skrivut .= 'You have '.$poang.' points.'; } }

Nu säger den: You have Array points!. vad har jag gjort för fel?

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk

Haha, va klantigt!

Kom på lösningen nu.

$query="SELECT points FROM users where id='".mysql_real_escape_string($_SESSION["user"]["0"])."' LIMIT 1"; $result = mysql_query($query, $db_id); $myNum = mysql_fetch_array($result); $poang = $myNum[0];

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk

MEN, har upptäckt en bugg som har med integer att göra. Låt oss säga att du har 10 poäng kvar och väljer ett nummer, numret matchande inte och du har inga poäng kvar, men uppdaterar du sidan så läggs det här numret in i databasen i kolumnen points= 4294967295.
Eller om du uppdaterar sidan och får en träff istället så läggs vinsten in i databasen fast du egentligen inte skall kunna spela mer om du inte har några poäng. Lämnar du sidan direkt efter att du har förlorat alla dina poäng och går tilbaka samt uppdaterar sidan så händer inget, säger bara att du behöver 10 poäng för att spela.
Jag kan inte komma på var felet ligger.

Uppdaterade koden:

<?php include "antet.php"; include "func.php"; if (!isset($_SESSION["user"][1])) { header('Location: login.php'); die(); } $usr=user($_SESSION["user"][0]); ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>Lottery - Win points</title> <style type="text/css"> body { background: #CCCCCC; } p,input { font-size: 11px; font-family: "Verdana", "Helvetica", "Arial", sans-serif; color: #244189; } label { cursor: pointer; } </style> </head> <body> <?php global $userrow, $db_id; $poang = $userrow["points"]; $skrivut = $gissningar = ''; if($_POST{'ok'}) { $poang = $_POST{'poang'}; $slump = rand(1,9); $skrivut .= 'Random number is <b>'.$slump.'</b>. '; $antal = count($_POST{'siffra'}); if (isset($antal) && !empty($antal)) { foreach($_POST{'siffra'} as $tal) { if(is_numeric($tal)) { $gissningar .= ' '.$tal; if($tal==$slump) { $poang = $userrow['points']+100; $query = "UPDATE users SET points=points+$poang WHERE id='".mysql_real_escape_string($_SESSION["user"]["0"])."' LIMIT 1"; mysql_query($query, $db_id); } else { $poang = $userrow['points']-10; $query = "UPDATE users SET points=points+$poang WHERE id='".mysql_real_escape_string($_SESSION["user"]["0"])."' LIMIT 1"; mysql_query($query, $db_id); } } } } $query="SELECT points FROM users where id='".mysql_real_escape_string($_SESSION["user"]["0"])."' LIMIT 1"; $result = mysql_query($query, $db_id); $myNum = mysql_fetch_array($result); $poang = $myNum[0]; if($gissningar!='') { $skrivut .= 'You guessed <b>'.$gissningar.'</b>. '; } if($poang<=0) { $skrivut .= '<b>You don\'t have any points left!</b>'; } else { $skrivut .= 'You have <b>'.$poang.'</b> points.'; } } if($usr[7]>=10){ echo ' <p>Every number you buy costs 10 points. If you win: Your correct number(10 points) + 100 points.</p> <form action="'.$_SERVER{'PHP_SELF'}.'" method="post"> <p><input type="checkbox" name="siffra[]" id="t1" value="1" /> <label for="t1">1</label> <input type="checkbox" name="siffra[]" id="t2" value="2" /> <label for="t2">2</label> <input type="checkbox" name="siffra[]" id="t3" value="3" /> <label for="t3">3</label> <input type="checkbox" name="siffra[]" id="t4" value="4" /> <label for="t4">4</label> <input type="checkbox" name="siffra[]" id="t5" value="5" /> <label for="t5">5</label> <input type="checkbox" name="siffra[]" id="t6" value="6" /> <label for="t6">6</label> <input type="checkbox" name="siffra[]" id="t7" value="7" /> <label for="t7">7</label> <input type="checkbox" name="siffra[]" id="t8" value="8" /> <label for="t8">8</label> <input type="checkbox" name="siffra[]" id="t9" value="9" /> <label for="t9">9</label> <input type="hidden" name="poang" value="'.$poang.'" /> <input type="submit" name="ok" value="Play" /></p> </form> <p>'.$skrivut.'</p>'; }else{ echo '<b><div align"center">You need at least 10 points to play!</div></b>'; } ?> </body> </html>

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk

LÖST!

Flyttade bara if satsen runt sql frågan.

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.