KRIZx Skrevet 16. januar 2013 Del Skrevet 16. januar 2013 Hei, jeg driver å koder ett script "Spillere pålogget" for tiden. Når jeg kjører scriptet på min server så får jeg denne feilmeldingen: Notice: Undefined index: havers in /var/www/vhosts/domenenavn.no/httpdocs/system/_Scripts/Game/online_list.php on line 17 Jeg vet selfølgelig at feilen er på linje 17, men jeg har ingen anelse om hva som er galt. Håper da på litt hjelp fra dere. Takk på forhånd! - KRIZx <?php error_reporting(E_ALL); ini_set("display_errors", 1); ?> <?php if(! defined('BASEPATH') ){ exit('Unable to view file.'); } $sql = "SELECT id,name,last_active FROM `[players]` WHERE `online`+'3600'>'".time()."' AND `health`>'0' ORDER BY online DESC"; $pagination = new Pagination($sql, 20, 'p'); $pagination_links = $pagination->GetPageLinks(); $online_list = $pagination->GetSQLRows(); foreach ($online_list as $key => $player) { $online_list[$key]['name'] = $config[$player['name']][0]; $online_list[$key]['last_active'] = View::Time($player['last_active']); } ?> <div class="boksdiv"> <div class="bokshead"><h2>Spillere pålogget <font color="red">(Under utvikling)</font></h2></div> <div class="bokshoved"> <table width="95%"> <tr> <td style="line-height:16pt;"> <?php if (User::Data('userlevel') == 4) { $db->Query("SELECT * FROM `[users]` WHERE `userlevel`>'4' "); echo '<a href="/game/spiller/'.$player['name'].'" style="color:#a7d004;">'.$player['name'].'</a>, '; } elseif(User::Data('userlevel') == 3) { if($db->Query("SELECT * FROM `[users]` WHERE `userlevel`>'3' ")); echo '<a href="/game/spiller/'.$player['name'].'" style="color:#04b6d0;">'.$player['name'].'</a>, '; } elseif(User::Data('userlevel') == 2) { if($db->Query("SELECT * FROM `[users]` WHERE `userlevel`>'2' ")); echo '<a href="/game/spiller/'.$player['name'].'" style="color:#ea7502;">'.$player['name'].'</a>, '; } elseif(User::Data('userlevel') == 1) { if($db->Query("SELECT * FROM `[users]` WHERE `userlevel`>'1' ")); echo '<a href="/game/spiller/'.$player['name'].'" style="color:#FFF;">'.$player['name'].'</a>, '; } else { echo 'Feil i SQL spørringen! '; } ?> <br> </td> </tr> <tr style="background-color:#111111;"> <td style="padding:5px;"> <h2>Akkurat nå er det <?=View::CashFormat($pagination->num_rows)?> spillere pålogget</h2> <strong style="color:#a7d004;">Gul</strong> = Administrator<br> <strong style="color:#04b6d0;">Lyseblå</strong> = Moderator<br> <strong style="color:#ea7502;">Oransje</strong> = Support <a href="#" rel="list" title="Liste"></a> <a href="#" rel="grid" title="Rutenett"></a> </div> <div class="clear"></div> </td> </tr> </table> </div> </div> <div id="players_online_content"></div> <div class="clear"></div> <div style="margin: 20px;"> <?=$pagination_links?> </div> Lenke til kommentar
Crowly Skrevet 16. januar 2013 Del Skrevet 16. januar 2013 (endret) Hvilken linje er linje 17? Feilmeldingen betyr f.eks. at refererer til ett felt i en array som ikke er satt. Denne koden vil gi samme feil $arr=array('felt1'=>1,'felt2'=>2); if ($arr['felt3']==3) echo 'woo hoo'; // felt3 finnes ikke, Undefined index feilmelding Legg varriabelen i en print_r() (og bruk <pre> tagger rundt slik at det blir mer lesbart) slik at du ser hvilke felt som er satt når du debugger. Ved å legge til isset() i if'en i koden over, vil man kode seg rundt dette $arr=array('felt1'=>1,'felt2'=>2); if (isset($arr['felt3']) and $arr['felt3']==3) echo 'woo hoo'; // ingen feilmelding Endret 16. januar 2013 av Crowly Lenke til kommentar
KRIZx Skrevet 16. januar 2013 Forfatter Del Skrevet 16. januar 2013 Linje 17 er: $online_list[$key]['name'] = $config[$player['name']][0]; Skjønte eksempelet ditt, men vetikke hvordan jeg skal bruke det når jeg skal hente f.eks Admin link med en definert farge, vanlig spiller får hvit definert farge. Sånn som det er nå så vises kun en spiller online, når det egentlig er 3 online. Lenke til kommentar
Crowly Skrevet 16. januar 2013 Del Skrevet 16. januar 2013 (endret) Hvor har du definert $config? Du kan endre til $online_list[$key]['name'] = (isset($config[$player['name']][0]) ? $config[$player['name']][0] : 'FEIL!'); // short hand if For å debugge: $sql = "SELECT id,name,last_active FROM `[players]` WHERE `online`+'3600'>'".time()."' AND `health`>'0' ORDER BY online DESC"; $pagination = new Pagination($sql, 20, 'p'); $pagination_links = $pagination->GetPageLinks(); $online_list = $pagination->GetSQLRows(); echo '<pre>'; print_r($online_list); echo '</pre>'; Endret 16. januar 2013 av Crowly Lenke til kommentar
KRIZx Skrevet 16. januar 2013 Forfatter Del Skrevet 16. januar 2013 Takk skal du ha! Men når jeg da debugger så får jeg alt i en array. Hvordan skal jeg f.eks printe ut denne: if (User::Data('userlevel') == 4) { $db->Query("SELECT * FROM `[users]` WHERE `userlevel`>'4' "); echo '<a href="/game/spiller/'.$player['name'].'" style="color:#a7d004;">'.$player['name'].'</a>, '; } ? - KRIZx Lenke til kommentar
Crowly Skrevet 17. januar 2013 Del Skrevet 17. januar 2013 (endret) Men når jeg da debugger så får jeg alt i en array. print_r() lister kun ut innholdet i en variabel slik at det er lettere å lese. Er kun for å se hva $online_list variabelen består av, og hvilke felter som er satt. For det er feltene og verdiene i $online_list som ender opp i $key og $player i foreach'en. Da har man mulighet til å kontrollere at "kart og terreng" henger sammen. Hvordan skal jeg f.eks printe ut denne: $player eksisterer bare innenfor foreach'en lengre opp i koden. Det ser ikke ut som du gjør noe med denne query'en utenom å kjøre den, og så forblir hva enn du henter fra users tabellen ubrukt. Du må nok gjøre noe ala dette, kommer an på om/hva $db->Query() returnerer if (User::Data('userlevel') == 4) { $data = $db->Query("SELECT * FROM `[users]` WHERE `userlevel`>'4' "); // kontroller innholdet i $data, fjern de 3 neste linjene når du vet. echo '<pre>'; print_r($data); echo '</pre>'; foreach ($data as $player) { echo '<a href="/game/spiller/'.$player['name'].'" style="color:#a7d004;">'.$player['name'].'</a>, '; } } I stedet for en haug med else if, så kan du vurdere å ta i bruk en switch() switch (User::Data('userlevel')) { case 4: // utfør kode break; case 3: // utfør kode break; case 2: // utfør kode break; case 1: // utfør kode break; default: echo 'Feil i SQL spørringen! '; } Endret 17. januar 2013 av Crowly Lenke til kommentar
KRIZx Skrevet 19. januar 2013 Forfatter Del Skrevet 19. januar 2013 (endret) <?php error_reporting(E_ALL); ini_set("display_errors", 1); ?> <?php if(! defined('BASEPATH') ){ exit('Unable to view file.'); } $sql = "SELECT id,name,last_active FROM `[players]` WHERE `online`+'3600'>'".time()."' AND `health`>'0' AND `level`>'0' ORDER BY online DESC"; $pagination = new Pagination($sql, 20, 'p'); $pagination_links = $pagination->GetPageLinks(); $online_list = $pagination->GetSQLRows(); $output = $pagination->GetSQLRows(); foreach ($online_list as $key => $player) { $online_list[$key]['name'] = (isset($config[$player['name']][0]) ? $config[$player['name']][0] : 'FEIL!'); } ?> <div class="boksdiv" style="width:530px;"> <div class="bokshead"><h2>Spillere pålogget</h2></div> <div class="bokshoved"> <table width="95%"> <tr> <td style="line-height:16pt;"> <?php if($db->Query("SELECT * FROM `[players]` WHERE `level`>'4'")) { echo "<a href=\"spiller/".$player['name']."\" title=\"Besøk ".$player['name']."\"><font color=\"#a7d004\">".$player['name']."</font></a>, "; } elseif($db->Query("SELECT * FROM `[players]` WHERE `level`>'3'")) { echo "<a href=\"spiller/=".$player['name']."\" title=\"Besøk ".$player['name']."\"><font color=\"#04b6d0\">'".$player['name']."'</font></a>, "; } elseif($db->Query("SELECT * FROM `[players]` WHERE `level`>'2'")) { echo "<a href=\"spiller/".$player['name']."\" title=\"Besøk ".$player['name']."\"><font color=\"#ea7502\">'".$player['name']."'</font></a>, "; } else { if($db->Query("SELECT * FROM `[players]` WHERE `level`>'1'")) { echo "<a href=\"spiller/".$player['name']."\" title=\"Besøk ".$player['name']."\"><font color=\"#111111\">".$player['name']."</font></a>, "; } } echo $output; ?> <br> </td> </tr> <tr style="background-color:#111111;"> <td style="padding:5px;"> <h2>Akkurat nå er det <?=View::CashFormat($pagination->num_rows)?> spillere pålogget</h2> <strong style="color:#a7d004;">Gul</strong> = Administrator<br> <strong style="color:#04b6d0;">Lyseblå</strong> = Moderator<br> <strong style="color:#ea7502;">Oransje</strong> = Support <a href="#" rel="list" title="Liste"></a> <a href="#" rel="grid" title="Rutenett"></a> </div> <div class="clear"></div> </td> </tr> </table> </div> </div> <div id="players_online_content"></div> <div class="clear"></div> <div style="margin: 20px;"> <?=$pagination_links?> </div> Scriptet mitt ser nå slik ut, får i resultat "Test, (Array) " av en eller annen grunn. Har du Crowly lyst til å hjelpe meg med dette scriptet? Setter veldig stor pris på hjelpen jeg har fått hittil! - KRIZx / Kristoffer Endret 19. januar 2013 av KRIZx Lenke til kommentar
Crowly Skrevet 19. januar 2013 Del Skrevet 19. januar 2013 Du må være mer konkret, "får i resultat "Test, (Array)" forteller meg veldig lite, annet enn at en variabel trolig er en array. Har ingen aning om hvor du får dette resultatet. Du må evt legge inn debugg kode og kontrollere verdiene i ymse variabler, slik at du har kontroll på hvilke felter og verdier de inneholder, og sjekke at koden din stemmer overens med dette. print_r() og var_dump() er meget nyttig til dette. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå