Gå til innhold

(php:feil) Notice:Undefined index


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Crowly
Lenke til kommentar

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

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 av Crowly
Lenke til kommentar

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
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 av Crowly
Lenke til kommentar

<?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 av KRIZx
Lenke til kommentar

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

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...