Gå til innhold

Feilmelding ved uthenting av informasjon


Anbefalte innlegg

Jeg holder på å videreutvikle et ban-script jeg bruker, men etter at jeg byttet tabell, så virker ikke spørringen lenger o.O

 

Feilmeldingen jeg får er:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\iqsperre\admin\unbanaccount.php on line 7

 

unbanaccount.php

<?php
$sql = "SELECT * FROM accounts where banned='1' ORDER BY id DESC";
$query = mysql_query($sql);
while($rad = mysql_fetch_array($query)) {
$account = $rad['login'];
$id = $rad['acct'];

echo '<div id="containerthing"><div class="right"><a href="?id=Administration&mod=unbanaccount2&accountid=';
echo "$id";
echo '"><img src="style/img/delete.png" class="noborder"></a></div>';
echo "<b>$account</b>";
echo "</div><br />";
}
?>

 

 

Greier:

-- Table "accounts" DDL

CREATE TABLE `accounts` (
 `acct` bigint(20) unsigned NOT NULL auto_increment,
 `login` varchar(255) collate utf8_unicode_ci NOT NULL default '',
 `password` varchar(28) collate utf8_unicode_ci NOT NULL default '',
 `gm` varchar(27) collate utf8_unicode_ci NOT NULL default '',
 `banned` int(1) unsigned NOT NULL default '0',
 `lastlogin` timestamp NOT NULL default '0000-00-00 00:00:00',
 `lastip` varchar(15) collate utf8_unicode_ci NOT NULL default '',
 `email` varchar(50) collate utf8_unicode_ci NOT NULL default '',
 `flags` int(11) unsigned NOT NULL default '0',
 `forceLanguage` varchar(5) collate utf8_unicode_ci NOT NULL default 'enUS',
 PRIMARY KEY  (`acct`,`login`),
 UNIQUE KEY `acct` (`acct`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

Det jeg syns er merkelig, er at det funker hvis jeg kjører spørringen mot andre tabeller o.O

Endret av lefsaker
Lenke til kommentar
Videoannonse
Annonse

Jeg fortsetter på denne tråden jeg, IOM at problemet ligner litt... Samme databasesystem osv.

 

SQL-ting

CREATE TABLE `characters` (
 `guid` int(6) unsigned NOT NULL default '0',
 `acct` int(20) unsigned NOT NULL default '0',
 `name` varchar(21) NOT NULL default '',
 `race` smallint(3) NOT NULL,
 `class` smallint(3) NOT NULL,
 `gender` tinyint(1) NOT NULL,
 `custom_faction` int(30) NOT NULL default '0',
 `level` int(3) NOT NULL,
 `xp` int(30) NOT NULL,
 `exploration_data` longtext NOT NULL,
 `skills` longtext NOT NULL,
 `watched_faction_index` bigint(40) NOT NULL,
 `selected_pvp_title` int(30) NOT NULL,
 `available_pvp_titles` int(30) NOT NULL,
 `gold` int(30) NOT NULL,
 `ammo_id` int(30) NOT NULL,
 `available_prof_points` int(30) NOT NULL,
 `available_talent_points` int(30) NOT NULL,
 `current_hp` int(30) NOT NULL,
 `current_power` int(30) NOT NULL,
 `pvprank` int(30) NOT NULL,
 `bytes` int(30) NOT NULL,
 `bytes2` int(30) NOT NULL,
 `player_flags` int(30) NOT NULL,
 `player_bytes` int(30) NOT NULL,
 `positionX` float NOT NULL default '0',
 `positionY` float NOT NULL default '0',
 `positionZ` float NOT NULL default '0',
 `orientation` float NOT NULL default '0',
 `mapId` int(8) unsigned NOT NULL default '0',
 `zoneId` int(8) unsigned NOT NULL default '0',
 `taximask` longtext NOT NULL,
 `banned` int(40) unsigned NOT NULL default '0',
 `banReason` varchar(255) NOT NULL,
 `timestamp` int(30) default NULL,
 `online` int(11) default NULL,
 `bindpositionX` float NOT NULL default '0',
 `bindpositionY` float NOT NULL default '0',
 `bindpositionZ` float NOT NULL default '0',
 `bindmapId` int(8) unsigned NOT NULL default '0',
 `bindzoneId` int(8) unsigned NOT NULL default '0',
 `isResting` int(3) NOT NULL default '0',
 `restState` int(5) NOT NULL default '0',
 `restTime` int(5) NOT NULL default '0',
 `playedtime` text NOT NULL,
 `deathstate` int(5) NOT NULL default '0',
 `TalentResetTimes` int(5) NOT NULL default '0',
 `first_login` tinyint(1) NOT NULL default '0',
 `forced_rename_pending` tinyint(1) NOT NULL default '0',
 `arenaPoints` int(10) NOT NULL,
 `totalstableslots` int(10) unsigned NOT NULL default '0',
 `instance_id` int(10) NOT NULL,
 `entrypointmap` int(10) NOT NULL,
 `entrypointx` float NOT NULL,
 `entrypointy` float NOT NULL,
 `entrypointz` float NOT NULL,
 `entrypointo` float NOT NULL,
 `entrypointinstance` int(10) NOT NULL,
 `taxi_path` int(10) NOT NULL,
 `taxi_lastnode` int(10) NOT NULL,
 `taxi_mountid` int(10) NOT NULL,
 `transporter` int(10) NOT NULL,
 `transporter_xdiff` float NOT NULL,
 `transporter_ydiff` float NOT NULL,
 `transporter_zdiff` float NOT NULL,
 `spells` longtext NOT NULL,
 `deleted_spells` longtext NOT NULL,
 `reputation` longtext NOT NULL,
 `actions` longtext NOT NULL,
 `auras` longtext NOT NULL,
 `finished_quests` longtext NOT NULL,
 `honorPointsToAdd` int(10) NOT NULL,
 `killsToday` int(10) NOT NULL default '0',
 `killsYesterday` int(10) NOT NULL default '0',
 `killsLifeTime` int(10) NOT NULL default '0',
 `honorToday` int(10) NOT NULL default '0',
 `honorYesterday` int(10) NOT NULL default '0',
 `honorPoints` int(10) NOT NULL default '0',
 `difficulty` int(4) NOT NULL default '0',
 PRIMARY KEY  (`guid`),
 KEY `acct` (`acct`),
 KEY `name` (`name`),
 KEY `b` (`banned`),
 KEY `c` (`online`),
 KEY `d` (`forced_rename_pending`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

 

Kode:

<?php
$charname =($_GET['charname']);
$sql = "SELECT * FROM characters WHERE name='$charname'";
$query = mysql_query($sql);
while($rad = mysql_fetch_array($query)) {
$xpos = $rad['bindpositionX'];
$ypos = $rad['bindpositionY'];
$zpos = $rad['bindpositionZ'];
$mapid = $rad['bindmapId'];
$zoneid = $rad['bindzoneId'];
}
$insert = "update characters set positionX='$xpos', positionY='$ypos', positionZ='$zpos', mapId='$mapid', zoneId='$zoneid', where name='$charname'";
if(mysql_query($insert)) { echo "<b>$charname</b> was successfully teleported to his/her hearthstone-location."; }
else { echo("An error occured, the character wasn't teleported!"); }
?>

 

Det scriptet skal gjøre, er å kopiere innholdet fra radene "bindpositionX, bindpositionY, bindpositionZ, bindmapId, bindzoneId" inn i radene "positionX, positionY, positionZ, mapId, zoneId"

 

Men det skjer en feil når jeg kjører scriptet.

Informasjonen blir hentet ut, det har jeg sjekket ved å echoe variablene.

Hvor ligger feilen? Er det en annen måte å gjøre dette på?

Lenke til kommentar

Når jeg tenker meg om er det kanskje ikke normalisering jeg mener, fordi tabellen din ikke lider veldig av fare for dobbeltlagring (du kan lese mer om det her, men du hadde hatt godt av å redesigne den.

 

Eksempelvis er alle kolonnene dine som har flertallsnavn, som skills, en dårlig idé. Det beste ville være å lage en ny tabell som heter skills og som ser ut som dette:

user_skill (

skill_name

user_id

)

Hvis du da bruker en sammensatt primærnøkkel sikrer du deg at hver bruker kun kan ha hver skill én gang, og du slipper disse hårreisende longtext-ene dine.

 

Dersom du vil være skikkelig nøye kan du lage en egen tabell som heter skills, og som bare inneholder skill_name. Der putter du inn alle skills det er mulig å ha. Når du så skal opprette en ny skill til en bruker sjekker du først at brukeren og skillen eksisterer før du setter inn verdiene i user_skill.

 

På den måten sørger du for at en bruker kun kan ha en skill som du har definert, og ikke finne opp sine egne.

 

Noe lignende kan du gjøre for hele position-systemet ditt (tror jeg), spells, deleted_spells, finished_quests, actions, auras og kanskje noen til.

 

Edit: og når du gjør en spørring kan det lønne seg å spørre om kun det du trenger og ikke alle kolonnene.

Endret av G2Petter
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...