Avatar billede xsix Nybegynder
22. februar 2008 - 14:30 Der er 12 kommentarer og
1 løsning

Database update fejl

Hej Eksperter.
Jeg har siddet og prøvet at rette nogle fejl i 1 time nu, og hver gang jeg får 1 rettet opstår der en ny, selvom det er et ret simpelt update.
Koden ser sådan ud:

<?
session_start();
if(!$_SESSION[user_id] > 0) {
header("location:index.php");
exit;
}
require_once('connect.php');
$query = mysql_query("SELECT * FROM players WHERE id=$_GET[id]");
$user_data = mysql_fetch_assoc($query) or die(mysql_error());
$clanquery = mysql_query("SELECT * FROM clan WHERE clanleader=$_SESSION[user_id]");
$clan_data = mysql_fetch_assoc($clanquery) or die(mysql_error());
if($_SESSION[user_id] == $clan_data[clanleader])
{
if($clan_data[maxmembers] > $clan_data[clanmembers]) {
$sql = mysql_query("UPDATE players SET clanid = $clan_data[clanid] WHERE id=$_GET[id]") or die(mysql_error());
$name = $clan_data[clanname];
$sql = mysql_query("UPDATE players SET clanname = '$name' WHERE id=$_GET[id]") or die(mysql_error());
$sql = mysql_query("UPDATE players SET clanrank = 'Clan Member' WHERE id=$_GET[id]") or die(mysql_error());
$sql = mysql_query("UPDATE players SET clanapply = 0 WHERE id=$_GET[id]") or die(mysql_error());

$sql = mysql_query("UPDATE clan SET clanmembers = $clan_data[clanmembers] + 1 WHERE $clanid=clan_data[clanid]") or die(mysql_error());
echo $user_data[accountname] . " successfully added.";
header("location:clan.php");
}
else {
echo "Sorry there are too many members in your clan.";
}
}
?>

Lige nu har jeg den her fejl:
"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 '=clan_data[clanid]' at line 1".
Avatar billede michael_stim Ekspert
22. februar 2008 - 14:33 #1
Husk at separer PHP'en.

$sql = mysql_query("UPDATE clan SET clanmembers = ". $clan_data['clanmembers']." + 1 WHERE $clanid=". $clan_data[clanid] ."")...

Der er flere steder.
Avatar billede michael_stim Ekspert
22. februar 2008 - 14:34 #2
Måske sådan her hvis det er en char:
'". $clan_data['clanmembers']."'
Avatar billede erikjacobsen Ekspert
22. februar 2008 - 14:34 #3
$sql = mysql_query("UPDATE clan SET clanmembers = $clan_data[clanmembers] + 1 WHERE $clanid=clan_data[clanid]") or die(mysql_error());
  skal nok ændres til
$sql = mysql_query("UPDATE clan SET clanmembers = $clan_data[clanmembers] + 1 WHERE clanid=$clan_data[clanid]") or die(mysql_error());
Avatar billede michael_stim Ekspert
22. februar 2008 - 14:35 #4
$clanid??? Har du sat $ det forkerte sted? Det er vel kolonnen der hedder clanid?
Avatar billede yHec Novice
22. februar 2008 - 14:37 #5
Prøv at en af disse to:
Sæt {} omkring alle dine $_GET[]
eller
".$_GET[]." istedet for $_GET[]

Du kan nemlig ikke bruge array-kald indenfor "". De skal enten omsluttes af {} eller sættes udenfor "" med ".bla-bla."

Så du skal gøre det samme med $clan_data[et-eller-andet] som jeg forslår du gør med $_GET[]

I øvrigt er din kode meget usikker!!!! Du bør bruge noget addslashes($_GET[]) - det kan hjælpe mod SQL-intrusions

/y
Avatar billede i910ativ Nybegynder
22. februar 2008 - 14:38 #6
her:

$sql = mysql_query("UPDATE clan SET clanmembers = $clan_data[clanmembers] + 1 WHERE $clanid=clan_data[clanid]") or die(mysql_error());

WHERE $clanid=clan_data[clanid] flyt $'en til rette sted
Avatar billede xsix Nybegynder
22. februar 2008 - 14:38 #7
Tak for det erikjacobsen, den havde jeg ikke lige set.
Bare læg et svar :)
Avatar billede i910ativ Nybegynder
22. februar 2008 - 14:38 #8
ahh, too late
Avatar billede xsix Nybegynder
22. februar 2008 - 14:40 #9
y: Jeg har desværre ikke så meget forstand på så noget med sikkerheden i PHP kode, kender du et sted hvor der er noget guide eller ligende til så noget? Ellers må jeg lige google lidt efter det.
Avatar billede erikjacobsen Ekspert
22. februar 2008 - 15:00 #10
Det eneste man bør bruge til at bygge mysql kald op med er mysqli i PHP5 og dens brug af parameters.

Jeg samler slet ikke på point, tak.
Avatar billede erikjacobsen Ekspert
22. februar 2008 - 15:01 #11
Avatar billede xsix Nybegynder
22. februar 2008 - 15:22 #12
i910ativ vil du have pointende så? Du kom jo også med det rigtige svar :)
Igen, tak erikjacobsen!
Avatar billede xsix Nybegynder
26. marts 2008 - 10:56 #13
Ser ikke ud som om nogle vil have point, så lukker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester