webForumDet fria alternativet

fast ID i Poängliga

PHP

4 svar · 238 visningar · startad av richardjoha

Medlem sedan okt. 2005787 inlägg
Frågan#1

Har ett problem med detta skript..

Jag har lagt in ex 10 spelare med olika namn och ska uppdatera spelare X´s statistik trycker jag på knappen "spara denna spelares poäng" och då ändras ALLA tidigare inlagda spelare till spelare X och hans statistik. Dvs. alla poster ser likadana ut.

Samma sak händer när jag ska radera en spelare. då försvinner allt.

Antar att jag måste sätta ett unikt id på varje ny spelare dom läggs till och någonslags ändra funktion kanske?

tacksam för svar. :)

DEN KORREKT KODEN:

addpoang.php

<?php
include "anslut.php"; // Databasanslutningen
 
//Här uppdaterar poängen
IF($_GET['do']=='sparapoang' && $_POST['autoid']!=''){
   $autoid=$_POST['autoid'];
   $namn=$_POST['namn'];
   $matcher=$_POST['matcher'];
   $mal=$_POST['mal'];
   $assist=$_POST['assist'];
   $totalt=$_POST['mal']+$_POST['assist'];
   $uppdatera = "UPDATE pts SET namn = '{$namn}', matcher = '{$matcher}', mal = '{$mal}', assist = '{$assist}', totalt = '{$totalt}' WHERE autoid = '{$autoid}'";
   $res = mysql_query($uppdatera) or die("SQL: Gick ej att uppdatera informationen $uppdatera <br>".mysql_error());
}
 
//Här sparas nya poäng
ElseIF($_GET['do']=='nypoang'){
   $namn=$_POST['namn'];
   $matcher=$_POST['matcher'];
   $mal=$_POST['mal'];
   $assist=$_POST['assist'];
   $totalt=$_POST['mal']+$_POST['assist'];
   $laggtill = "INSERT INTO pts (namn, matcher, mal, assist, totalt) VALUES ('$namn', '$matcher', '$mal', '$assist', '$totalt')";
   echo $laggtill."<BR>";
   $res = mysql_query($laggtill) or die('SQL: Gick ej att lägga till informationen $laggtill <br>'.mysql_error()); 
}
 
//Här raderas spelaren
ElseIF($_GET['do']=='raderaspelare' && $_GET['autoid']!=''){
   $autoid=$_GET['autoid'];
   $radera = "DELETE FROM pts WHERE autoid = '$autoid'";
   mysql_query($radera) or die('SQL: Gick ej att radera informationen: $radera <br>'.mysql_error());
}
 
//Här visas alla poäng
$sql = "SELECT * FROM pts ORDER BY totalt DESC"; 
$resultat = mysql_query($sql);

echo "<table>\n";
   echo "   <tr>\n";
   echo "      <td>Namn</td>\n";
   echo "      <td>Matcher</td>\n";
   echo "      <td>Mål</td>\n";
   echo "      <td>Assist</td>\n";
   echo "      <td>Knapp för att spara</td>\n";
   echo "      <td>Länk för att ta bort</td>\n";
   echo "   </tr>\n";
   echo "   <tr><form method='POST' action='?do=nypoang'>\n";
   echo "      <td><input type='text' name='namn' size='40'></td>\n";
   echo "      <td><input type='text' name='matcher' size='40'></td>\n";
   echo "      <td><input type='text' name='mal' size='40'></td>\n";
   echo "      <td><input type='text' name='assist' size='40'></td>\n";
   echo "      <td><input type='submit' value='Spara nya spelaren & dennes poäng' name='submitny'></td>\n";
   echo "      <td>&nbsp;</td>\n";
   echo "   </form></tr>\n";
while($kolumn = mysql_fetch_array($resultat)){
   echo "   <tr><form method='POST' action='?do=sparapoang'>\n";
   echo "      <input type='hidden' name='autoid' value='{$kolumn['autoid']}'>\n";
   echo "      <td><input type='text' name='namn' size='40' value='{$kolumn['namn']}'></td>\n";
   echo "      <td><input type='text' name='matcher' size='40' value='{$kolumn['matcher']}'></td>\n";
   echo "      <td><input type='text' name='mal' size='40' value='{$kolumn['mal']}'></td>\n";
   echo "      <td><input type='text' name='assist' size='40' value='{$kolumn['assist']}'></td>\n";
   echo "      <td><input type='submit' value='Spara denna spelarens poäng' name='submit{$kolumn['autoid']}'></td>\n";
   echo "      <td><a href='?do=raderaspelare&autoid={$kolumn['autoid']}'>Radera</a></td>\n";
   echo "   </form></tr>\n";
}
echo "</table>\n";
?>

visa poang.php

<?php
include "anslut.php"; // Databasanslutningen
 
$sql = "SELECT * FROM pts ORDER BY totalt DESC"; 
$resultat = mysql_query($sql);

echo "<table>\n";
   echo "   <tr>\n";
   echo "      <td>Namn</td>\n";
   echo "      <td>Matcher</td>\n";
   echo "      <td>Mål</td>\n";
   echo "      <td>Assist</td>\n";
   echo "      <td>Poäng</td>\n";
   echo "   </tr>\n";
while($kolumn = mysql_fetch_array($resultat)){
   echo "   <tr>\n";
   echo "      <td>{$kolumn['namn']}</td>\n";
   echo "      <td>{$kolumn['matcher']}</td>\n";
   echo "      <td>{$kolumn['mal']}</td>\n";
   echo "      <td>{$kolumn['assist']}</td>\n";
   echo "      <td>{$kolumn['totalt']}</td>\n";
   echo "   </tr>\n";
}
echo "</table>\n";
?>
Medlem sedan aug. 2001145 inlägg
#2

Du måste lära dig att debugga dina skript och kolla så allt verkligen stämmer.
Kollar man i koden rakt av ser jag inget konstigt men lite sunt förnuft säger att eftersom när du uppdaterar eller tar bort spelare så uppdateras alla fällt. Och var i koden skilljer du på fälten? jo med autoid. Om autoid är unikt för varje fält ska dom bara inte uppdateras.

Va kan då vara fel? Jo kanske autoid inte har autoincrements så alla autoids kanske är likadana? Då är de helt plötsligt inte så konstigt att alla uppdateras när du har autoid='x' om alla fält är x.

Medlem sedan okt. 2005787 inlägg
#3

det tycks vara felet ja.. men jag kan inte ändra till auto_increments.. får felmedeleande #1067 - Invalid default value for 'autoid' ..?

https://www.oldoakdesign.se/1234ANNAT/wf/autoid.jpg

Medlem sedan mars 20034 471 inlägg
#4

Enligt skärmdumpen i din första tråd, kan man se att autoid = 0 överallt.

Jag har själv aldrig använt phpmyadmin och vet därför inte hur du ändrar i den, men ditt id borde vara av typen:
ID INT auto_increment

I så fall sker uppdatering av id med automatik vid varje insert.

***
Men, du verkar ha andra skumheter i koden också. Såvida inte jag missförstår den, så klart. Men vad vill du egentligen ändra på när du uppdaterar poäng? Bara poängen väl? Som du gör nu sätter du ju om alla värden. Sätt bara om de värden du faktiskt vill ändra!

Sedan har du ingen felhantering i koden alls. Om du inte fyller i något fält i formuläret kan det få trista effekter. Finns tex fältet autoid i ditt formulär? Som hidden i så fall, hoppas jag? Du skriver:

IF($_GET['do']=='sparapoang' && $_POST['autoid']!=''){
   $autoid=$_POST['autoid'];
   $namn=$_POST['namn'];
   $matcher=$_POST['matcher'];
   $mal=$_POST['mal'];
   $assist=$_POST['assist'];
   $totalt=$_POST['mal']+$_POST['assist'];

Om något av $_POST-fälten inte fått ett värde så ger PHP "snällt" ett intetsägande värde åt dom. Så om du inte fyller i namnet tex, så skrivs namnet över med '' vid UPDATE:n. Det vore mycket säkrare att kolla om de är satta med

IF($_GET['do']=='sparapoang' && isSet($_POST['autoid']) && 
            isSet($_POST['namn']) && isSet($_POST['matcher']) && ....
            isSet($_POST['assist'])){
   $autoid=$_POST['autoid'];
   $namn=$_POST['namn'];
   $matcher=$_POST['matcher'];
   $mal=$_POST['mal'];
   $assist=$_POST['assist'];
   $totalt=$_POST['mal']+$_POST['assist'];
Medlem sedan juni 20031 837 inlägg
#5

testa att ändra de befintliga autoid så de får unika värden, kanske går att slå på auto_incement

258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)