Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

Info o reputacji za post w poście

PHP/MYSQL  Założony przez  GiboneKPL.

Dzień dobry, wieczór Polsko! O tuż przerobiłem sobie trochę plugin do pokazywania notatki o ostrzeżeniu za posta na reputację i wygląda to tak: http://ferrycraft.pl/Thread-Nowe-ip

I nie wiem jak to zaokrąglić do 1 notatki typu:
Użytkownik dostał więcej niż 1 punkt reputacji za ten post.
Ale kompletnie nie wiem jak to zrobić..

Tak wygląda funkcja:
function ReputationInfo_postbit(&$post)
{
    global 
$mybb;
    if(
$mybb->settings['ReputationPostInfo_onoff'] == 1)
    {
        global 
$db;
        
$query=$db->query('SELECT * FROM '.TABLE_PREFIX.'reputation WHERE pid ='.$post['pid']);
        while(
$result=$db->fetch_array($query))
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał reputację za ten post!</div>';
        }
    }
        


Zapewne trzeba dopisać warunek, tylko że właśnie nie wiem jak..
może tak, jak nie zadziała to zrób pętle while, co do zliczania musisz użyć count w zapytaniu
$query=$db->query('SELECT * FROM '.TABLE_PREFIX.'reputation WHERE pid ='.$post['pid'].' limit 1);
Heh Twoje zapytanie nie działa.

Zrobiłem to w taki sposób:
function ReputationInfo_postbit(&$post)
{
    global 
$mybb;
    if(
$mybb->settings['ReputationPostInfo_onoff'] == 1)
    {
        global 
$db;
        
$query=$db->query('SELECT * FROM '.TABLE_PREFIX.'reputation WHERE pid ='.$post['pid']);
        if (
$result=$db->fetch_array($query) == 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał punkt reputacji za ten post!</div>';
        }
        elseif (
$result=$db->fetch_array($query) > 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał więcej niż 1 punkt reputacji za ten post!</div>';
        }
    }
        


I wyświetla się tylko że jak ktoś dostanie 1 pkt reputacji za post to nie wyświetla się notatka. Do testu: http://ferrycraft.pl/Thread-Nowe-ip (2 post dostał 1 punkt reputacji). I pokazuje się w każdym poście notatka:
Użytkownik dostał punkt reputacji za ten post!
Mój błąd skopałem coś w kodzie (a dokładniej dałem <= zamiast ==), już tego ni mo :P

Powiem że jestem coraz bliżej, wyjdę na kłamcę? :D

Ehh... Nie kumam tego w ogóle! Jak mam coś takiego:
if ($result=$db->fetch_array($query) == 0

To wyświetla sięw każdym poście (prócz tych z repką) info.

A jak mam:
if ($result=$db->fetch_array($query) == 1

To nie wyświetla się nawet w poście który ma 1 repkę..
Spróbuj tak, jak nie zadziała to napiszę Ci coś innego.
function ReputationInfo_postbit(&$post)
{
    global 
$mybb;
    if(
$mybb->settings['ReputationPostInfo_onoff'] == 1)
    {
        global 
$db;
        
$query=$db->query('SELECT * FROM '.TABLE_PREFIX.'reputation WHERE pid ='.$post['pid']);                  
        
$rep mysql_fetch_array(mysql_query("select (select count(*) from '.TABLE_PREFIX.'reputation where pid =".$post['pid'].") as ile"));
        while(
$result=$db->fetch_array($query) >= 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał '.$rep['ile'].' punkt reputacji za ten post!</div>';
        } 
    }        
        

Po 1. W kij błędów mi wyskakuje.

Po 2. Nie zaokrągla do jednej notatki.

Po 3. To jest moja teraźniejsza funkcja:
function ReputationInfo_postbit(&$post)
{
    global 
$mybb;
    if(
$mybb->settings['ReputationPostInfo_onoff'] == 1)
    {
        global 
$db;
        
$query=$db->query('SELECT * FROM '.TABLE_PREFIX.'reputation WHERE pid ='.$post['pid']);
        if (
$result=$db->fetch_array($query) == 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał punkt reputacji za ten post!</div>';
        }
        elseif (
$result=$db->fetch_array($query) > 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał więcej niż 1 punkt reputacji za ten post!</div>';
        }
    }


Tylko że nie działa notatka jak ktoś dostał 1 pkt repki. :/
Albo użyć
fetch-assoc 
zamiast array
Nie działa. :/

O o o coś zrobiłem! Tylko że teraz wyświetla zawszę notatkę:
Cytat:Użytkownik dostał więcej niż 1 punkt reputacji za ten post!

A tak wygląda funkcja:
function ReputationInfo_postbit(&$post)
{
    global 
$mybb;
    if(
$mybb->settings['ReputationPostInfo_onoff'] == 1)
    {
        global 
$db;
        
$query=$db->query('SELECT * FROM '.TABLE_PREFIX.'reputation WHERE pid ='.$post['pid']);
        
$repka $result=$db->fetch_array($query);
        if (
$repka == 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał punkt reputacji za ten post!</div>';
        }
        elseif (
$repka 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał więcej niż 1 punkt reputacji za ten post!</div>';
        }
    }


Help me please :(
Opcja 1
function ReputationInfo_postbit(&$post)
{
    global 
$mybb;
    if(
$mybb->settings['ReputationPostInfo_onoff'] == 1)
    {
        global 
$db;
        
$query=$db->query('SELECT * FROM '.TABLE_PREFIX.'reputation WHERE pid ='.$post['pid']);

        while(
$repka $result=$db->fetch_array($query)){
        if (
$repka == 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał punkt reputacji za ten post!</div>';
        }
        elseif (
$repka >= 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał więcej niż 1 punkt reputacji za ten post!</div>';
        }
    }
  }

opcja 2
function ReputationInfo_postbit(&$post)
{
    global 
$mybb;
    if(
$mybb->settings['ReputationPostInfo_onoff'] == 1)
    {
        global 
$db;
        
$query=$db->query('SELECT * FROM '.TABLE_PREFIX.'reputation WHERE pid ='.$post['pid']);

        while(
$repka $result=$db->fetch_array($query)){
        if (
$repka == 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał punkt reputacji za ten post!</div>';
        }
        else {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał więcej niż 1 punkt reputacji za ten post!</div>';
        }
    }
  }

Ani to ani to. Wyświetla tylko:
Cytat:Użytkownik dostał więcej niż 1 punkt reputacji

Tyle razy ile dostał reputacji. Więc zostaje przy starym kodzie na razie. ni kija nie wiem jak to zrobić :/ Myślę nad tym 2 dni..
Jak będę miał jutro czas to ci to zrobię
Dlaczego pętla? Po co ona??
Wystarczy obliczyć liczbę, więc
function ReputationInfo_postbit(&$post)
{
    global 
$mybb$db;
    if(
$mybb->settings['ReputationPostInfo_onoff'] == 1)
    {
        
        
$query $db->query('SELECT rid FROM '.TABLE_PREFIX.'reputation WHERE pid ='.$post['pid']);
        
$repka $db->num_rows($query);
        if (
$repka == 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał punkt reputacji za ten post!</div>';
        }
        elseif (
$repka 1)
        {
           
$post['message'].='<div class = "reputation_info">Użytkownik dostał więcej niż 1 punkt reputacji za ten post!</div>';
        }
    }

Do tego to jest i tak źle zbudowane, bo dla każdego posta tworzy zapytanie do bazy, a tak nie powinno się dziać. Trzeba by sprawdzać, czy w ogóle jest jakaś reputka, albo zbierać wszystkie posty do jednego zapytania.
Dziękuje Matslom, bo działa! :P Na razie zostaje przy tym pluginie, ale może kiedyś napisze nowy. :)



Użytkownicy przeglądający ten wątek:

1 gości