php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.03.2007, 19:43  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

ok. hier mein ersteller PageSplitter. ist sicherlich nicht alles einwandfrei gecodet oder zu umständlich, aber er funktioniert und ist sicher.
wenn jemand eine zahl eingibt die als seite nicht existiert wird seite 1 angenommen, oder wenn jemand eine kommazahl eingibt, die seite aber existieren würde, wird mit floor abgerundet.

das einzige problem das ich habe ist folgendes:
ich lasse ja das ?page=234 oder &page=234 aus der url entfernen. das klappt so auch ganz gut, nur wenn jemand die url manipuliert und beispielsweise ?page=12342asdf eingibt, also eine buchstabenkette, so haut es mir die berechnete url zusammen.
super wäre wenn ich mein regex erweitern könnte, dass das pattern von (wie jetzt ja schon) &page= oder ?page ist bis zum nächsten & (falls noch eine weitere variable besteht) oder zum ende der url (falls keine variable mehr existiert) sucht. aber ich hab keine ahnung wie ich das lösen soll. regexe sind nicht wirklich meine freunde. lese seid 2 stunden die regenechsen.

hier nun aber die klasse. die function display_full() folgt noch.
PHP-Code:
<?php
###############################
#  file: class_page_splitter.php
#  version: 1.0
###############################

 // klasse erstellen
 
class PageSplitter {

  
// objekte erstellen
  
var $_entries_per_page '5';    // wird in configure.php vordefiniert
  
var $_num_entries '';       // gesamteinträge, gefüllt in konstruktor
  
var $_max_pages '';            // maximale seitenzahl, gefüllt in konstruktor
   
var $query_result '';        // query_result der gesplitteten seite, public für anzeige der daten
  
var $_query_string '';        // aktiver query_string, gefüllt in konstruktor, geändert in display_splitter_nav

  
function PageSplitter($column$table) {
   
// alle einträge zählen und maximale seitenzahl ermitteln
   
$query_string "SELECT ".$column."
                    FROM "
.$table;
   
$sql = new SQLHandler();       // kommt aus meiner klasse SQLHandler
   
$query_result $sql->query($query_string);
   
$this->_query_string $query_string;
   
$this->_num_entries $sql->num_rows;
   
$this->_max_pages ceil($this->_num_entries $this->_entries_per_page);
  }

  function 
display_splitter_nav($url '') {
   
// SCHAUEN OB PAGE EXISTIERT. WENN JA SCHAUEN OB PAGE MÖGLICH IST UND BEI KOMMASTELLE ABRUNDEN
   
$_GET['page'] && $_GET['page'] <= $this->_max_pages $page floor($_GET['page']) : $page '1';

   
// URL BERECHNEN UND GEGEBENENFALLS PAGE LÖSCHEN
   
if(empty($url)) $url $_SERVER['REQUEST_URI'];
   
$url preg_replace"/([?&])page=([0-9]*)/"""$url );
   
preg_match("/\?/"$url) ? $url $url.'&' $url $url.'?';
   echo 
'url: '.$url;

   
// LIMIT PARAMETER BERECHNEN
   
$limit_start $page $this->_entries_per_page $this->_entries_per_page;

   
$sql = new SQLHandler();            // kommt aus meiner klasse SQLHandler
   
$this->query_result $sql->query($this->_query_string." LIMIT ".$limit_start.", ".$this->_entries_per_page1);
   
$output '';
   if(
$page != 1$output.='[url="'.$url.'page='.($page 1).'"]<<[/url]';
   for(
$i 1$i <= $this->_max_pages$i++) {
    
$i $this->_max_pages $sep '|' $sep '';
    if(
$i == $page) {
     
$output.= '['.$i.']'.$sep;
    } else {
     
$output.= '[url="'.$url.'page='.$i.'"]'.$i.'[/url]'.$sep;
    }
   }
   if(
$page != $this->_max_pages$output.= '[url="'.$url.'page='.($page 1).'"]>>[/url]';
   echo 
$output;
  }

  function 
display_full() {
   
// 1. ruft display_splitter_nav() auf
   // 2. holt sich template
   // 3. füllt template mit display_splitter_nav() an vorgesehener stelle und
   //    füllt die daten in das template (bilder oder was auch immer) mittels
   //    while schleife und mysql_fetch_object/assoc/array
   // 4. gibt das ganze ding wieder
  
}
 }
?>
__________________
mfg Alexander Haim
Promaetheus ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.03.2007, 19:53  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hi Promaetheus, sei mir nicht böse, aber die Klasse sieht schrecklich aus.
Du solltest statt mit einem URL-String ($_SERVER['QUERY_STRING']) lieber mit $_GET oder einem anderen Array arbeiten. http_build_query() baut dir die Elemente dann wieder zusammen.

Versuch einmal, HTML-Code komplett aus deinen Methoden zu verbannen und höchstens für einige wenige display*() Methoden HTML-Code mitzuverwursten (deine Methode heißt ja display_splitter_nav, die Berechnung solltest du jedoch trotzdem auslagern).

Wie wäre es mit einer Methode, die dir einen Array zurückliefert, der zB so aussieht:
PHP-Code:
<?php
$aPageNav 
= array(array('page' => 1'href' => 'example.php?param1=2&param2=3&page=1'), array('page' => 2, ..), ..);
?>
Diesen Array könnte eine displayPageNav() aufnehmen und in HTML umwandeln. Dient ungemein der Übersicht
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
professionelle Tipps Maxi Off-Topic Diskussionen 21 11.04.2007 11:57
Puhhhhhhhhhhh ich brauche tipps popel95 Beitragsarchiv 32 05.12.2005 20:02
script läuft aber gibts tipps zur verbesserung od. expansion Promaetheus PHP Tipps 2007 9 13.11.2005 18:58
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
[REISE] Stockholm - Tipps & Tricks imported_Ben Off-Topic Diskussionen 29 09.08.2005 17:06
Tipps geben zu einem Forum. PHP Tipps 2004-2 11 20.12.2004 23:03
[Erledigt] Meine Cronjobs gehen nicht - Bitte um Tipps PHP Tipps 2004-2 4 27.11.2004 13:58
Tipps für Bewertungssystem benötigt PHP-Fortgeschrittene 5 21.09.2004 18:20
Buch: Tipps / Empfehlungen Corvin Off-Topic Diskussionen 14 10.09.2004 13:03
ich suche gute tipps für ein skript ! Beitragsarchiv 3 02.09.2004 07:52
Passwortschutz: Tipps für Seiten PHP Tipps 2004 3 22.07.2004 15:17
Ich möchte PHP lernen... Brauche Tipps ^^ PHP Tipps 2004 4 13.06.2004 18:09

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
pagesplitter.php, preg_match \bis zum nächsten &\, gute dateistruktur, cms selber machen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.