Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Sep 2009

Skriver inte till databasen.

Hejsan!

Jag håller på med ett script på en betsida där man skickar in resultat för matcher. Scriptet ska räkna ut vinst, lägga in "pengarna" på spelkontot och dessutom sätta en siffra som symboliserar att spelet blivit avslutat.

Felet ligger någonstans i min loop som ska göra samma sak för alla användare, men det skriver ingenting till databasen. Någon som ser något fel på loopen. Jag har kollat alla variabler som inte defineras i den här kodsnutten och de fungerar som de ska. Allt utanför loopen skriver till databasen som det ska.

$getwinners = mysql_query("SELECT * FROM games WHERE match='$matchid'");
while($winnerrow = mysql_fetch_assoc($getwinners))
{

$betid = $winnerrow['id'];
$bet = $winnerrow['$result'];
$user = $winnerrow['user'];

$share = $bet/$winners;

$win = $share*$pot;

$querycreds = mysql_query("SELECT * FROM gameusers WHERE username='$user'");
$credsrow = mysql_fetch_assoc($querycreds);

$creds = $credsrow['creds'];

$newcreds = $creds+$win;

mysql_query("UPDATE gameusers SET creds='$newcreds' WHERE username='$user'");

mysql_query("UPDATE games SET avslutad='1' WHERE id='$betid'");

}

Här finns hela övriga koden: http://www.pastry.se/119015/

Trädvy Permalänk
Medlem
Plats
Borlänge
Registrerad
Mar 2005

Kolumnen "avslutad" är väl förhoppningsvis inte av någon sträng-typ? För nu har du apostrofer runt värdet du sätter, vilket gör det till en sträng.

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC → Objective2 → Sennheiser HD650/Ultrasone PRO 900
Portabelt → Sennheiser Momentum/Sennheiser Urbanite XL/Sennheiser Momentum In-Ear

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Sep 2009

nej, sant. Men spelar det någon roll om man har värdet inom ' '?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2003

Tror mig ha hittat ett antal fel:
1. $bet = $winnerrow['$result']; --> $bet = $winnerrow['result'];
2. "SELECT * FROM gameusers WHERE username='$user'" --> "SELECT * FROM gameusers WHERE username='" . $user . "'"
3. "UPDATE gameusers SET creds='$newcreds' WHERE username='$user'" --> "UPDATE gameusers SET creds='" . $newcreds . "' WHERE username='" . $user . "'"
4. "UPDATE games SET avslutad='1' WHERE id='$betid'" --> "UPDATE games SET avslutad='1' WHERE id='" . $betid . "'"

Lycka till.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Sep 2009

Tack för hjälpen, men det löste sig ännu inte.

Garret, de fel som hittade rättades förutom fel 1. Vet inte om man får göra så, men $result är den kolmumn som alla "bets" på rätt resultat kommer från. Dessa kolumner heter ins1, ins2 och ins3. Jag har alltså ett form (name=ins) där jag skriver i vilket resultat som är rätt i form av 1, 2 eller 3.

Detta plockas in som:

$res = $_POST['ins'];
$result = "ins".$res;

Detta för att variabeln ska ge mig rätt kolumn. Är det helt galet att göra så?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2003

Då ska det stå:

$winnerrow[$result]

I PHP anger apostrofer (') strängar som inte "kontrolleras" efter variabler, citattecken (") däremot kontrolleras.
Dvs. om du vill ha en sträng som innehåller variabler, t.ex. "Hej $name" måste du använda citattecken, använder du däremot apostrofer ('Hej $name') kommer strängen att skrivas ut precis så: Hej $name.

Jag föredrar dock att skriva "'Hej ' . $name" för att bryta upp och markera var jag har variabler, men allt är en smaksak och du ska välja det du känner dig mest bekväm med.

Du kan läsa mer på php.net.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Sep 2009

Tack, det är ändrat nu! Men inte det som gör att loopen inte körs.

Har gjort en rejäl felsökning nu genom hela koden och ett fel är i den här kodsnutten precis innan loopen.

$getwinners = mysql_query("SELECT * FROM games WHERE match=$matchid") or die(mysql_error());

Det gav:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=10' at line 1

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2003

Du får inte använda reserverade ord utan att escapa de, i ditt fall gäller detta order "match".
Ta en titt på följande sida för att se vilka ord som är reserverade och som måste escapas om de ska användas.

Ändra din SQL-fråga till:

"SELECT * FROM games WHERE `match` = $matchid"

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Sep 2009

TACK SÅ MYCKET!!!!

Nu blev jag riktigt glad, men samtidigt förbannad på mig själv att jag gör sånna dumma fel!

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2003

Det är misstagen som gör att man lär sig, kämpa på bara.
Lycka till!