Skocz do zawartości
  • 0
KaLu

Zmienna / Bit.

Pytanie

Czołem, uporałem się z problemem dotyczącym odczytu zakładki z bitu, ale pojawia się kolejny problem. Podczas przeglądania profilu danego gracza i  wejścia w zakładkę pojawia się błąd z bazą danych.

$this->DB->build( array( 'select' => '*', 'from' => '1dm', 'where' => "owneruid={$member['member_id']}", 'order' => 'lastlogin desc'));

Logi:

 

 Error: 1064 - 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 '' at line 1
 IP Address: 127.0.0.1 - /index.php?/user/1-karol/?tab=dayztabs
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 mySQL query error: SELECT * FROM 1dm WHERE owneruid=

Domniemam, że trzeba dodać zmienną do bitu oraz odpowiednio zmienić kod w pliku dayztabs, ale jak miałoby to wyglądać? Najlepiej gdybym dostał gotowca. Rozchodzi się o odczyt z tabeli 1dm rekordów, które mają wartość owneruid = profilu, który aktualnie przeglądamy.

 

Edytowano przez Karol170396

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

11 odpowiedzi na to pytanie

Polecane posty

  • 0

Dziwne, jak wejdziesz prawidłowo w zakładkę to 

$member['member_id']

nie powinno być puste. Nie wiem co tam masz w tym pliku ale przed tym zapytaniem do bazy możesz dać taki kod:

$member['member_id'] = intval($member['member_id']);

Uchroni Cię to przed tym błędem co masz. Ale dokładniej jeśli chcesz to musiałbyś wkleić cały plik...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
<php>
$member['member_id'] = intval($member['member_id']);

Dwie pierwsze linijki z kodu, problem w tym, że to zwraca 0 o ile się nie mylę, bo błąd nie występuje aczkolwiek też nie odnajduje rekordów. 

 

A plik wygląda tak:

 

 

<?php
/**
 * SolutionrDEVs Application
 * Własna zakładka w profilu
 *
 * @author                        Dawid Baruch <dawid.baruch@solutiondevs.pl>
 * @copyright   (c) 2005 - 2012 SolutionDEVs
 * @package        SolutionDEVs Apps
 * @subpackage  PHP
 * @link                                                                http://www.solutiondevs.pl
 * @link                                                                http://www.ipsbeyond.pl
 * @version        1.0.0
 *
 */


if ( ! defined( 'IN_IPB' ) )
{
                                print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.<br />Author: Dawid Baruch <a href='http://www.solutiondevs.pl'><strong>SolutionDEVs.pl</strong></a>";
                                exit();
}


class profile_dayztabs extends profile_plugin_parent
{ 
public function return_html_block($member=array())
{
return $template = $this->registry->output->getTemplate('panel')->game_profile();
}                                       
}

 

Edytowano przez Karol170396

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

A ten kod pobierania danych z bazy robisz w szablonie? to bez sensu. powinno to wyglądać tak:

<?php
/**
 * SolutionrDEVs Application
 * Własna zakładka w profilu
 *
 * @author                        Dawid Baruch <dawid.baruch@solutiondevs.pl>
 * @copyright   (c) 2005 - 2012 SolutionDEVs
 * @package        SolutionDEVs Apps
 * @subpackage  PHP
 * @link                                                                http://www.solutiondevs.pl
 * @link                                                                http://www.ipsbeyond.pl
 * @version        1.0.0
 *
 */


if ( ! defined( 'IN_IPB' ) )
{
                                print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.<br />Author: Dawid Baruch <a href='http://www.solutiondevs.pl'><strong>SolutionDEVs.pl</strong></a>";
                                exit();
}


class profile_dayztabs extends profile_plugin_parent
{ 
    public function return_html_block($member=array())
    {
        $this->DB->build( array( 'select' => '*', 'from' => '1dm', 'where' => "owneruid={$member['member_id']}", 'order' => 'lastlogin desc'));
$data = array();
//TUTAJ OBRABIAMY WYNIK I ZAPISUJEMY DO $data
        return $template = $this->registry->output->getTemplate('panel')->game_profile( $data );
    }                                       
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Czyli w miejscu 

 

//TUTAJ OBRABIAMY WYNIK I ZAPISUJEMY DO $data

 

 

Mam dać while i tak dalej a potem użyć normalnie całości poprzez zmienną {$data}, ta? 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Tak, tam dajesz while i "obrabiasz" wynik tak jak chcesz. Następnie przekazujesz do szablonu zmienną $data. W szablonie zdefiniować zmienną $data i aby wyświetlić poprawnie w szablonie rzeczy musisz użyć konstrukcji foreach:

<foreach loop="$data as $row">
{$row[ 'KOLUMNA']}
</foreach>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Kurcze, niezbyt rozumiem jak ma wyglądać kod po dalszej części 

//TUTAJ OBRABIAMY WYNIK I ZAPISUJEMY DO $data

Skoro całość będziemy i tak w foreach robić, nie? No i jeszcze jedno mam pytanie, muszę dodawać nową zmienną do bitu?

Edytowano przez Karol170396

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Ja Ci pokazuje rozwiązanie takie jak powinno być. W pliku obrabiasz while wynik działania bazy danych a w szablonie przetwarzasz obrobiony wygląd. Tak się robi i już. A wtedy musisz przekazać zmienną do szablonu i ją tam oprogramować, bo inaczej nie będzie danych w szablonie

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Czyli coś takiego? 

 

 

class profile_dayztabs extends profile_plugin_parent
{ 
    public function return_html_block($member=array())
    {
        $this->DB->build( array( 'select' => '*', 'from' => '1dm', 'where' => "owneruid={$member['member_id']}", 'order' => 'lastlogin desc'));
$data = array();
while($data = $this->DB->fetch())
{
$data .= ''.$data['nick'].'';
}
        return $template = $this->registry->output->getTemplate('panel')->game_profile($data);
    }                                       
}

Aby wyświetlić wszystkie rekordy należące do danego użytkownika czy inaczej? Jeżeli inaczej, to zrób mi proszę gotowca, którym wyświetlę listę rekordów jako nazwę z pola nick. Z góry dzięki i sorry za nierozumienie. 

 

Edytowano przez Karol170396

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Brakuje defakto tylko jednego:

class profile_dayztabs extends profile_plugin_parent
{ 
    public function return_html_block($member=array())
    {
        $this->DB->build( array( 'select' => '*', 'from' => '1dm', 'where' => "owneruid={$member['member_id']}", 'order' => 'lastlogin desc'));
$this->DB->execute();
$data = '';
while($data = $this->DB->fetch())
{
$data .=  $data['nick'].' ';
}
        return $template = $this->registry->output->getTemplate('panel')->game_profile($data);
    }                                       
}

Poza tym, jeśli dajesz coś takiego:

$data .= ''.$data['nick'].'';

to jak ktoś będzie miał więcej wpisów to wszystko będzie zbite. Powinieneś dać jakąś spacje czy coś. I jeśli tak zrobisz to w szablonie nie używasz foreach, tylko w prost {$data}

 

Ale powyżej masz już poprawiony kod

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość
Temat jest zablokowany i nie można w nim pisać.

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×

Ważne informacje

Kontynuując przeglądanie strony, wyrażasz zgodę na używanie przez nas plików cookies.