Jump to content
Krzysiu

Skrypcik i błąd.

Recommended Posts

Witam, postanowiłem sobie napisać prosty skrypcik profiletabs, otóż:

 <?php

 ob_start();


 class profile_char extends profile_plugin_parent


{


        /**

        * Feturn HTML block

        *

        * @access       public

        * @param        array           Member information

        * @return       string          HTML block

        */


        public function return_html_block( $member=array() )


  {


  $zap = $this->DB->buildAndFetch(array('select' => '*',

                        'from'       => '1chars',

                        'where'      => 'player_uid = "' . $this->request['id']. '"'));   


$content = '<span class="name">'.$zap['nick'].'</span><br /> 

                                <span class="desc"><b>'.$zap['hours'].'h, '.$zap['minutes'].'m </b><br /> '.$zap['lastlogged'].'<br />


                        </div></div>';  


           if( ! $this->DB->getTotalRows( $zap ) ) {


                           $content = '

      <p> 

      <em>'.$member['members_display_name'].' nie posiada postaci.</em> 

     </p> ';  






}

return $content;

        }

}

?>
Lecz wyskakują mi takie błędy:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, array given in /homepages/16/d349979453/htdocs/ips_kernel/classDbMysqliClient.php on line 407


Warning: Cannot modify header information - headers already sent by (output started at /homepages/16/d349979453/htdocs/admin/applications/members/extensions/profileTabs/char.php:1) in /homepages/16/d349979453/htdocs/admin/sources/classes/output/formats/html/htmlOutput.php on line 109


Warning: Cannot modify header information - headers already sent by (output started at /homepages/16/d349979453/htdocs/admin/applications/members/extensions/profileTabs/char.php:1) in /homepages/16/d349979453/htdocs/admin/sources/classes/output/formats/html/htmlOutput.php on line 120


Warning: Cannot modify header information - headers already sent by (output started at /homepages/16/d349979453/htdocs/admin/applications/members/extensions/profileTabs/char.php:1) in /homepages/16/d349979453/htdocs/admin/sources/classes/output/formats/html/htmlOutput.php on line 129


Warning: Cannot modify header information - headers already sent by (output started at /homepages/16/d349979453/htdocs/admin/applications/members/extensions/profileTabs/char.php:1) in /homepages/16/d349979453/htdocs/admin/sources/classes/output/formats/html/htmlOutput.php on line 130


Warning: Cannot modify header information - headers already sent by (output started at /homepages/16/d349979453/htdocs/admin/applications/members/extensions/profileTabs/char.php:1) in /homepages/16/d349979453/htdocs/admin/sources/classes/output/formats/html/htmlOutput.php on line 134

Share this post


Link to post
Share on other sites

Witaj,

nie dziwie się, bo jest to źle napisane. Nie możesz zrobić tak, że najpierw pobierasz wyniki i je zwracasz a później sprawdzasz czy są jakieś wyniki. Poprawny kod powinien wyglądać tak:

 <?php

class profile_char extends profile_plugin_parent

{

/**
* Feturn HTML block
*
* @access public
* @param array Member information
* @return string HTML block
*/

public function return_html_block( $member=array() )

{

$this->DB->build(array('select' => '*',
'from' => '1chars',
'where' => 'player_uid = "' . $this->request['id']. '"'));

$res = $this->DB->execute();


if( ! $this->DB->getTotalRows( $res ) ) {

$content = '
<p>
<em>'.$member['members_display_name'].' nie posiada postaci.</em>
</p> ';
}
else
{
$zap = $this->DB->fetch();

$content = '<span class="name">'.$zap['nick'].'</span><br />
<span class="desc"><b>'.$zap['hours'].'h, '.$zap['minutes'].'m </b><br /> '.$zap['lastlogged'].'<br />

</div></div>';
}

return $content;
}
}
?>[/code]

Share this post


Link to post
Share on other sites

Oh, dzięki wielkie!

Wiesz może dlaczego występują błędy z headerem? :>

Warning: Cannot modify header information - headers already sent by (output started at /homepages/16/d349979453/htdocs/admin/applications/members/extensions/profileTabs/char.php:1) in /homepages/16/d349979453/htdocs/admin/sources/classes/output/formats/html/htmlOutput.php on line 109


Warning: Cannot modify header information - headers already sent by (output started at /homepages/16/d349979453/htdocs/admin/applications/members/extensions/profileTabs/char.php:1) in /homepages/16/d349979453/htdocs/admin/sources/classes/output/formats/html/htmlOutput.php on line 120


Warning: Cannot modify header information - headers already sent by (output started at /homepages/16/d349979453/htdocs/admin/applications/members/extensions/profileTabs/char.php:1) in /homepages/16/d349979453/htdocs/admin/sources/classes/output/formats/html/htmlOutput.php on line 129


Warning: Cannot modify header information - headers already sent by (output started at /homepages/16/d349979453/htdocs/admin/applications/members/extensions/profileTabs/char.php:1) in /homepages/16/d349979453/htdocs/admin/sources/classes/output/formats/html/htmlOutput.php on line 130


Warning: Cannot modify header information - headers already sent by (output started at /homepages/16/d349979453/htdocs/admin/applications/members/extensions/profileTabs/char.php:1) in /homepages/16/d349979453/htdocs/admin/sources/classes/output/formats/html/htmlOutput.php on line 134

Edited by Krzysiu

Share this post


Link to post
Share on other sites

Tak, błąd wystąpił dlatego, że najpierw w przeglądarce pojawił się błąd:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, array given in /homepages/16/d349979453/htdocs/ips_kernel/classDbMysqliClient.php on line 407
[/code]

w związku z tym każde późniejsze wysyłanie nagłówków powoduje te pozostałe błędy, które podałeś

Share this post


Link to post
Share on other sites

Można je jakoś zniwelować? One się gdzieś zapisały?

Share this post


Link to post
Share on other sites

Jak zapisały? takie błędy się nie zapisują bo spowodowane były błędem wysyłania nagłówków, który wynikł nie ze złego działania aplikacji tylko ze złego pisania przez Ciebie skryptu

Share this post


Link to post
Share on other sites

Rozumiem, lecz poprawiłes mój skrypt, główny bład zniknał a te z hederami zostały.

Share this post


Link to post
Share on other sites

tak. :) Z gory dzieki.

Share this post


Link to post
Share on other sites

wklej jaki masz kod, to zerkniemy co można jeszcze zrobić i nie pisz 4 postów jeden pod drugim z tą samą zawartością

Share this post


Link to post
Share on other sites

Jestem w szkole i na telefonie, lag - wybacz. Jak wroce do domu dam kod. ;)

Share this post


Link to post
Share on other sites

 <?php

class profile_char extends profile_plugin_parent


{

public function return_html_block( $member=array() )

  {


$results = array();

$this->DB->build( array( 'select' => '*',

                        'from'       => '1chars',

                        'where'      => 'guid = "' . $this->request['id']. '"'));


while ( $row = $this->DB->fetch() )

{

	$zap[] = $row;

}


  $res = $this->DB->execute();


  $content = '';



           if( ! $this->DB->getTotalRows( $res ) ) {


                          $content = '<h3 class="bar">Postacie gracza</h3><div class="friend_list clear" style="margin:0;padding:0">

      <p> 

      <em>'.$member['members_display_name'].' nie posiada postaci.</em> 

     </p> ';  

}

else

{

$zap = $this->DB->fetch();


$zap['nick'] = str_replace("_"," ", $zap['nick']);


$content = '<div id="tab_content" class="row1">



                                        <h3 class="bar">Postacie gracza</h3><div class="friend_list clear" style="margin:0;padding:0"><ul class="clearfix"><li style="height:170px;">


                                <img src="http://h-rp.co/public/hrp/skins/Skin_'.$zap['skin'].'.gif"><br />


                 <span class="name">'.$zap['nick'].'</span><br /> 

                                <span class="desc"><b>'.$zap['hours'].'h, '.$zap['minutes'].'m </b><br /> '.$zap['lastlogged'].'<br />


                        </div></div>';  

}


return $content;

        }

}

?>

Oto kod. ;)

Share this post


Link to post
Share on other sites

Okej, zredukowałem liczbę spacji na górze i errory zniknęły. Ale mam pytanie otóż: Dlaczego pobiera mi tylko jedno zapytanie, spełniające dany warunek? Jak są dwa, pobiera to o wyższym id

Share this post


Link to post
Share on other sites

Tak, a wiesz może dlaczego pobiera mi tylko jeden wiersz?

Share this post


Link to post
Share on other sites

Bo pobierasz tylko jeden rekord:

$zap = $this->DB->fetch();

jeśli chcesz wszystkie to musisz pętlą pobierać wyniki jakimś while'em

Share this post


Link to post
Share on other sites

Mógłbyś mnie jakoś naprowadzić? :>

Share this post


Link to post
Share on other sites

oj, podstawy kolego, podstawy :)

Znajdź:

$zap = $this->DB->fetch();

$zap['nick'] = str_replace("_"," ", $zap['nick']);

$content = '<div id="tab_content" class="row1">


<h3 class="bar">Postacie gracza</h3><div class="friend_list clear" style="margin:0;padding:0"><ul class="clearfix"><li style="height:170px;">

<img src="http://h-rp.co/public/hrp/skins/Skin_'.$zap['skin'].'.gif"><br />

<span class="name">'.$zap['nick'].'</span><br />
<span class="desc"><b>'.$zap['hours'].'h, '.$zap['minutes'].'m </b><br /> '.$zap['lastlogged'].'<br />

</div></div>'; [/code] Zamień na:
[code]$content = '';
while($zap = $this->DB->fetch())
{

$zap['nick'] = str_replace("_"," ", $zap['nick']);

$content .= '<div id="tab_content" class="row1">


<h3 class="bar">Postacie gracza</h3><div class="friend_list clear" style="margin:0;padding:0"><ul class="clearfix"><li style="height:170px;">

<img src="http://h-rp.co/public/hrp/skins/Skin_'.$zap['skin'].'.gif"><br />

<span class="name">'.$zap['nick'].'</span><br />
<span class="desc"><b>'.$zap['hours'].'h, '.$zap['minutes'].'m </b><br /> '.$zap['lastlogged'].'<br />

</div></div>';
}

Share this post


Link to post
Share on other sites

Dzięki ale już sobie poradziłem. :P

Wiesz może jaką funkcja mogę wywołać coś widocznego tylko dla administratora? :>

Edited by Krzysiu

Share this post


Link to post
Share on other sites

W sensie coś widocznego dla admina? chcesz żeby widział jakiś komunikat czy jakieś inne dane? najprościej sprawdzić czy odwiedzający profil

$this->memberData['g_access_cp']

ma dostęp do acp

Share this post


Link to post
Share on other sites

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

W celu świadczenie usług przez nasz Serwis na najwyższym poziomie, w ramach Serwisu wykorzystujemy pliki Cookies (tzw. ciasteczka). Korzystając ze stron Serwisu IPSBEYOND.PL bez zmiany ustawień przeglądarki będą one zapisane w pamięci urządzenia. Jeżeli nie dokonacie Państwo zmiany ustawień przeglądarki internetowej to wyrażacie zgodę na zapisywanie plików Cookies.