ThWboard Support-Forum (Archiv)

Ort: / Boardübersicht / PHP / MySQL Probleme / Wieo wird der letzte Datensatz nicht ausgegeben ?


Seite 1 von 1

PhoenixDH schrieb am 20.11.2004 um 14:00 Uhr

Ich bin hier noch am verzweifeln, ich habe folgenden Quelltext, es funktioniert alles, blos wird pro Seite der 1. Datensatz aus der SQL-Tabelle nicht an gezeigt, woran kann das kliegen, ich bin hier am verzweifeln !

<?php

//Toplist von PhoenixDH / Administrator@tuning-freaks-pfalz.de / http://www.tuning-freaks-pfalz.de

include "./inc/header.inc.php";

$TFrame = new Template("./templates/".$style['styletemplate']."/frame.html");
$TToplist = new Template("./templates/".$style['styletemplate']."/toplist.html");
$TToplistrow = new Template("./templates/".$style['styletemplate']."/toplistrow.html");

//Variabeln
$siteid = ''; //ID des Eintrages
$siteurl = ''; //Url der Website
$sitename = ''; //Name der Website
$sitedesc = ''; //Beschreibung der Seite
$sitebanner = ''; //Url zum Banner !
$siteuser = ''; //Name des Verfassers
$config[sitesperpage] = 10;
$siteentry = ''; //Wann wurde die Seite eingetragen
$siteuseremail = ''; // E-Mail Adresse für Rückfragen
// Variablen Ende

$r_toplist = thwb_query("SELECT count(siteid) AS sitecount FROM ".$pref."toplist ");
$toplist = mysql_fetch_array($r_toplist);

$pages = ceil($toplist[sitecount] / $config[sitesperpage]);
$pagesstring = '';

define('PADDING', 6);

if( !isset($page) )
    $page = 1;

// erste seite
if( $page - PADDING > 1 )
{
    $pagesstring = '[<a class="hefo" href="'.build_link('toplist.php?orderby=&amp;page=1').'">Erste Seite</a>] ... ';
}

$i = $page - PADDING;

if( $i < 1 )
    $i = 1;
$imax = $page + PADDING;
if( $imax > $pages )
    $imax = $pages;     

for( $i; $i <= $imax; $i++ )
{
    if( $i == $page )
        $pagesstring .= "&gt;" . ($i) . "&lt; ";
    else
        $pagesstring .= "[<a class=\"hefo\" href=\"".build_link("toplist.php?orderby=&amp;page=$i")."\">" . ($i) . "</a>] ";
}


// letzte seite
if( $page + PADDING < $pages )
{
    $pagesstring .= '... [<a class="\hefo\" href="'.build_link('toplist.php?orderby=&amp;page=$pages').'">Letzte Seite</a>]';
}

$SITE_ROWS = '';

$r_toplist = thwb_query("SELECT siteid, siteurl, siteuseremail, sitename, siteentry, sitedesc, sitebanner, siteuser FROM ".$pref."toplist ORDER BY siteid DESC LIMIT " . intval($page - 1) * $config['sitesperpage'] . ", " . $config['sitesperpage']);
$toplist = mysql_fetch_array($r_toplist);

if(!mysql_num_rows($r_toplist))
{
  $SITE_ROWS = '<tr bgcolor="'.$style['CellA'].'"> 
          <td align="center" class="stdfont" colspan="2">Keine Einträge gefunden!<br><br></td>
        </tr>';
  $pages = 1;
  $pagesstring = "&gt;1&lt;";
}
else
{
  while( $toplist = mysql_fetch_array($r_toplist) )
    {
   
      if ($i % 2 == 0)
    {
    $toplist['bgcolor'] = $style['CellA'];
    $toplist['bgcolor2'] = $style['CellB'];
    }
      else
    {
    $toplist['bgcolor'] = $style['CellB'];
    $toplist['bgcolor2'] = $style['CellA'];
    }
      
      $toplist[siteentry] = form_date($toplist[siteentry]);
      $toplist[siteurl] = '<a href="'.$toplist[siteurl].'" target="_blank" title="'.$toplist[siteurl].'">'.$toplist[siteurl].'</a>';

    if ($g_user['userisadmin'] == "1")
        {
        $showuseremail = '&nbsp;(Administrator: <a href="mailto:'.$toplist[siteuseremail].'?subject=Eintrag in der Topliste bei http://www.tuning-freaks-pfalz.de">'.$toplist[siteuseremail].'</a>;)';
        }

    if ($toplist[sitebanner] == "http://" || $toplist[sitebanner] == "")
        {
        $toplist[sitebanner] = 'Kein Banner eingetragen !';
        }
    else
        {
        $toplist[sitebanner] = '<img src="'.$toplist[sitebanner].'" width="468" title="'.$toplist[sitename].'">';
        }
      
      eval($TToplistrow->GetTemplate("SITE_ROWS"));
      $i++;
    }
  
}

$navpath .= 'Toplist';

eval($TToplist->GetTemplate("CONTENT"));
eval($TFrame->GetTemplate());

?>

PhoenixDH schrieb am 21.11.2004 um 19:36 Uhr

Kann da keiner mal drüberschaun bitte ?

PhoenixDH schrieb am 21.11.2004 um 21:58 Uhr

Der Fehler muss aj irgendwo nach dem LIMIT liegen:

LIMIT " . intval($page - 1) * $config['sitesperpage'] . ", " . $config['sitesperpage']);

Aber da sich dieser Wert ja durch die Seiten-Sprung-Funktion ergibt hab ich keinen Plan warum das nicht geht. Der Code ist aus ner anderen Forendatei, der müsste doch normal stimmen oder nicht ?

hevtig schrieb am 21.11.2004 um 22:55 Uhr

Hi Phoenix,

hast du nochmal die SQL Tabelle kontrolliert? Vielleicht ist da ja etwas anderes evtl zählt der die IDs falsch?
Ansonsten seh ich folgendes:
$toplist[sitebanner]
muss das nicht
$toplist['sitebanner']
heißen?

also die ' '???



das hast du bei allen vars so. Evtl liegt es daran?

PhoenixDH schrieb am 22.11.2004 um 09:01 Uhr

Die ID's werden richtig gezählt, da hab ich überprüft !

Aber was ist der Unterschied zwischen $toplis[sitebanner] und $toplist['sitebanner'] ?

Meine SQL Tabelle hat folgenden Aufbau:
http://www.tuning-freaks-pfalz.de/Forum/bildupload/1_140.gif

Selbst wenn ich als Limit 10 eingebe, dann gibt er nur 9 zurück !

ABer vielleicht stimmt meine Tabelle ja nicht, hier der Befehl zum erzeugen:

CREATE TABLE tb_toplist (
  siteid int(10) unsigned NOT NULL auto_increment,
  siteuser varchar(64) NOT NULL default '',
  siteurl varchar(128) NOT NULL default '',
  sitename varchar(128) NOT NULL default '',
  sitedesc varchar(255)  NOT NULL default '',
  sitebanner varchar(255) NOT NULL default '',
  siteentry int(11) unsigned NOT NULL default '',
  siteuseremail varchar(128) NOT NULL default '',
  PRIMARY KEY  (siteid),
  KEY siteid (siteid)
) TYPE=MyISAM;

Ich weiß auch net was mit unsigned und NOT NULL gemeint ist !

bdominik schrieb am 22.11.2004 um 11:37 Uhr

doku lesen?

PhoenixDH schrieb am 22.11.2004 um 11:52 Uhr

Ihr seit mir ja eine so große Hilfe !
Beantwortet doch bitte einfach meine Fragen, oder wozu ist ein Supportboard da ?


Aaaargh:

$r_toplist = thwb_query("SELECT count(siteid) AS sitecount FROM ".$pref."toplist ");

ind $toplist[sitecount] dteht der richtige Wert, z.b. 58, wenn die Tabelle 58 Einträge hat, das LIMIT stimmt auch, bei der ersten Seite LIMIT 0,10 , 2.Seite 10,10 u.s.w. ! Aber wenn ich die siteid mit ausgeben lasse, fängt sie mit 57 an, ich verstehe das nicht !

MrNase schrieb am 22.11.2004 um 12:34 Uhr

Nimm doch erstmal

LIMIT " . intval($page - 1) * $config['sitesperpage'] . ", " . $config['sitesperpage']

raus und guck ob es ohne dieses komplizierte Gedöns geht :)

PhoenixDH schrieb am 22.11.2004 um 12:37 Uhr

werd ich mal tun !

-----------

NEIN ! Das geht auch net, der letzte Fehlt !

Hier konnt ihr euch das mal ankucken: Toplist

Der obere Wert sind die gesammten Einträge und die darunter die ausgegebenen !

MrNase schrieb am 22.11.2004 um 12:46 Uhr

schick mir mal bitte alle Dateien dieses Hacks und einer Datenbanksicherung aller für diesen Hack angelegten Tabellen an ich[ätt]mrnase.de :)

PhoenixDH schrieb am 22.11.2004 um 13:48 Uhr

werd ich machen !

Und wer immer das war mit der SICHERHEITSLÜCKE, der Code ist noch net fertig und darf dann gerne verbessert werden !

Hat die Sicherheitslücke wieder irgendwas mit Dateien auslesen zu tun, nein oder ?

MrNase schrieb am 22.11.2004 um 14:18 Uhr

Das mit der Sicherheitslücke war ich ;) Leider warst du zu schnell und ich konnte mir das Ergebnis nicht angucken :D

Na dann schau ich mir gleich nach dem Einkaufen mal dein kleines Packet an :)

PhoenixDH schrieb am 22.11.2004 um 14:38 Uhr

Ok, ich war net zu schnell, wie gesagt, der Eintrag von dir war der letzte und der wird ja net angezeigt :(

MrNase schrieb am 22.11.2004 um 15:41 Uhr

So, der Fehler ist gefunden..

Direkt unter deiner Query steht ein

$toplist = mysql_fetch_array($r_toplist);

ganz einsam und allein.. Das muss auf alle Fälle weg :)

Um weitere Fehler zu vermeiden ergänze bitte ' bei allem was in eckigen Klammern steht..
So wird z.B. aus
$toplist[siteentry]
folgendes
$toplist['siteentry']


um es zu testen kannst du folgendes in deine Datei unter <?php einfügen:

error_reporting(E_ALL);

PhoenixDH schrieb am 22.11.2004 um 15:52 Uhr

Alles klar, danke, es funktioniert !

Aber unter dem 1. query hab ich das noch gebraucht ! Sonst hat die Seitenanzahl nicht gestimmt, aber warum muss das unten weg ?

Und wegen deinen geposteten Sicherheitslücken, muss ich mal schaun wie ich das mache, denn davon hab ich im Moment noch keinen Plan !

In allen Dateien die ' einfügen oder nur in den PHP ? Die SQL Tabelle stimmt vom Aufbau ?

MrNase schrieb am 22.11.2004 um 18:58 Uhr

In den PHP-Dateien, Tabelle stimmt.

Vielleicht hilft dir ja:

function EditboxEncode($string)
{
    $string = str_replace('&', '&amp;', $string);
    $string = str_replace('"', '&quot;', $string);
    $string = str_replace('<', '&lt;', $string);
    $string = str_replace('>', '&gt;', $string);
    
    return $string;
}

weiter :)

PhoenixDH schrieb am 22.11.2004 um 19:14 Uhr

Sowas hatte ich im Sinn, genauso wie die Prüfung der Bilder hab ich auch schon was im Sinn !

Die Funktion oben besteht ja schon oder, dann kann ich die ja einfach aufrufen oder ?

MrNase schrieb am 22.11.2004 um 19:44 Uhr

Die besteht noch nicht in der Datei in welche du sie brauchst :)

Seite 1 von 1