php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.02.2009, 09:25  
Benutzer
 
Registriert seit: 15.05.2008
Beiträge: 37
gene befindet sich auf einem aufstrebenden Ast
Standard [Hilfe] Klasse zum auslesen von Boardinformationen

Hallo, es geht darum dass ich Infos von Foren auslesen möchte und diese dann später verarbeiten. Mein Problem ist dass das Auslesen in der 'test.php' problemlos funktioniert, jedoch dann in der Klasse nicht.

Bei Forum #1 geht alles gut.

Bei Forum #2 jedoch liegt das Problem.

Ich verzweifle schon langsam, ich hab nur deswegen die ganze Nacht durchgemacht. Debuging ohne Ende, ich schaffs einfach nicht.

Vielleicht ist es auch nur die Müdigkeit und ich hab etwas übersehen, bitte um Hilfe.

Hier die Testdatei:

PHP-Code:

error_reporting
(E_ALL);
$opts = array(
  
'http'=>array(
    
'method'=>"GET",
    
'header'=>"Accept-language: en\r\n" 
              
"Cookie: sitechrx=ca524559ec423ae5109b3ca04fbdbbfb\r\n"
  
)
);

// create stream for cookie
$context stream_context_create($opts);

$link "http://domain.com/";
        
$data = @file_get_contents($linkfalse$context);
        
$data str_replace('.'''$data);
        
$data str_replace(','''$data);
        
//echo $data;
        
        
if(preg_match('/([0-9a-fA-F]{32})/'$data$hash))
        {
            
$hash $hash[1];
            echo 
$hash;                                                                                  
        }
        
        if ( 
preg_match('/Themen: (\d+\s+)Beiträge: (\d+\s+)Benutzer: (\d+)/'$data$info))
        {
            echo 
$info[1] . '<br />';
            echo 
$info[2] . '<br />';
            echo 
$info[3] . '<br />';
            
        } 
Mit diesem Code bekomme ich als Ausgabe:

$info[1] -> Anzahl der Themen ( nur die Zahl als String )
$info[2] -> Anzahl der Beiträge ( nur die Zahl als String )
$info[3] -> Anzahl der Posts ( nur die Zahl als String )

Schön und gut, genau so wie es sein soll. Jedoch will meine Klasse nicht ganz mitspielen:

PHP-Code:
class Controller {
   
    
# general
    
var $board_url;
    var 
$board_id;
    var 
$user_info;
    var 
$board_name;
   
    
#infos
    
var $board_total_members;
    var 
$board_total_topics;
    var 
$board_total_posts;
   
    
#info order logic
    
var $board_info_order_members;
    var 
$board_info_order_topics;
    var 
$board_info_order_posts;
   
    
# security
    
var $board_secure_cookie_name;
    var 
$board_secure_cookie_value;
   
    
#regex pattern
    
var $board_regex_info;
    var 
$board_regex_hash;
       
    
# which board is requested
    
function get_info_board($board_id)
    {
        if (isset(
$_GET['board_id']) && is_numeric($_GET['board_id']))
        {
            
$board_id trim($_GET['board_id']);
            
$this->board_id $board_id;
        }
       
                                                       
       
        switch (
$this->board_id)
        {
            case 
'1':
                
$this->board_name '**';
                
$this->board_url 'http://www.domain.to';
                
$this->board_secure_cookie_name 'sitechrx';
                
$this->board_regex_info '/(\d+) Posts in (\d+) Topics by (\d+) Members/';
                
$this->board_regex_hash '/([0-9a-fA-F]{32})/';
                
$this->board_info_order_members 3;
                
$this->board_info_order_topics 2;
                
$this->board_info_order_posts 1;
            break;
           
            case 
'2':
                
$this->board_name '**';
                
$this->board_url 'http://domain.com/';
                
$this->board_secure_cookie_name 'sitechrx';
                
$this->board_regex_info '/Themen: (\d+\s+)Beiträge: (\d+\s+)Benutzer: (\d+)/';
                
$this->board_regex_hash '/([0-9a-fA-F]{32})/';
                
$this->board_info_order_members 3;
                
$this->board_info_order_topics 1;
                
$this->board_info_order_posts 2;
            break;
           
            case 
'3':
                
$this->board_name '**';
                
$this->board_url 'http://domain.com/';
                
$this->board_secure_cookie_name 'sitechrx';
                
$this->board_regex_info '/Unsere Benutzer haben insgesamt (\d+) Beiträge geschrieben. Wir haben (\d+) registrierte Benutzer./';
                
$this->board_regex_hash '/([0-9a-fA-F]{32})/';
                
$this->board_info_order_members 0;
                
$this->board_info_order_topics 0;
                
$this->board_info_order_posts 0;
            break;
           
            default:
            break;
        }
       
        
# header options
        
$opts = array(
          
'http'=>array(
            
'method'=>"GET",
            
'header'=>"Accept-language: en\r\n" .
                      
"Cookie: " $this->board_secure_cookie_name "=" trim($this->board_secure_cookie_value) . "\r\n"
          
)
        );
       
        
# create context stream for cookies
        
$context stream_context_create($opts);
       
        
# grab site content
        
$url $this->board_url;
        
$data = @file_get_contents($urlfalse$context);
       
        
#delete all dots, so we have f.e. 1007 posts, not 1.007. Second we delete all whitespace with trim(), for RegEx reason.
        
$data str_replace('.'''$data);
        
$data str_replace(','''$data);
       
        
# some regex for getting only wanted informations like topics, members and posts
       
        
if ( ! preg_match($this->board_regex_info$data$info))
        {
            if( ! 
preg_match($this->board_regex_hash$data$hash))
            {
                exit(
'An error has occurred, please try again later.');
            }
           
            else
            {
                
$this->board_secure_cookie_value $hash[1];
               
                
# the functions calls itself again if the security hash was updated
                
$this->get_info_board($this->board_id);
            }
        }
       
        else
        {
            
$this->board_total_posts $info[trim($this->board_info_order_posts)];
            
$this->board_total_topics $info[trim($this->board_info_order_topics)];
            
$this->board_total_members $info[trim($this->board_info_order_members)];
        }

    } 
Wenn ich also folgendes aufrufe (...?board_id=2):

PHP-Code:
error_reporting(E_ALL);
include(
'si_controller.php');

$req = new Controller();
$req->get_info_board($req->board_id);

# output members, posts, threads etc...
#echo $data;

echo $req->board_total_posts
Bekomme ich immer die Fehlermeldung aus dem exit();
An error has occurred, please try again later.

Wie gesagt, bei Forum 1 geht alles, bei Forum 2 nur über die test.php.

Hoffe jemand hat eine Lösung.

Geändert von gene (13.02.2009 um 09:50 Uhr).
gene ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 13.02.2009, 11:19  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Hoffe jemand hat eine Lösung.
Gegenfrage: warum fragst du die Inhalte nicht einfach per Datenbank ab?
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 13.02.2009, 11:22  
Erfahrener Benutzer
 
Registriert seit: 04.12.2008
Beiträge: 132
agundur befindet sich auf einem aufstrebenden Ast
agundur eine Nachricht über Skype™ schicken
Standard

PHP-Code:
if( ! preg_match($this->board_regex_hash$data$hash)) 
preg_match gibt 0 (Zahl Null) oder 1 zurück. Also, die Anzahl der Treffer.
False (bool) nur wenn ein Fehler aufgetreten ist.

Du kannst Deinen Code also so ändern:

PHP-Code:
if(  preg_match($this->board_regex_hash$data$hash) === false
oder so das Deine RexEx was findet.

Gruß Agundur
__________________
AFFE ist nur im Dezimalsystem ein Palindrom.
agundur ist offline  
Alt 13.02.2009, 11:39  
Benutzer
 
Registriert seit: 15.05.2008
Beiträge: 37
gene befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Gegenfrage: warum fragst du die Inhalte nicht einfach per Datenbank ab?
Es geht nicht um die Daten, es ging ursprünglich darum RegEx besser zu verstehen. Jetzt will ich es aus Prinzip lösen.

@agundur

Danke für den Tipp, du meinst wohl
PHP-Code:
.. === 
oder?

Ich hab beide Varianten schon versucht, also es so zu drehen dass ich prüfe ob er was gefunden hat und jetzt deinen Tipp.

Hat leider beides nicht geklappt, ich verstehe einfach nciht warum es in der test.php geht und hier nicht.
gene ist offline  
Alt 13.02.2009, 11:51  
Erfahrener Benutzer
 
Registriert seit: 04.12.2008
Beiträge: 132
agundur befindet sich auf einem aufstrebenden Ast
agundur eine Nachricht über Skype™ schicken
Standard

Zitat:
Danke für den Tipp, du meinst wohl
PHP-Code:
.. === 
oder?
Kommt darauf an was für Dich ein Fehler ist.
Wenn es ein Fehler ist das er nichts findet dann: ' === 0 ' .
Wenn es ein Fehler ist das Deine Regex nicht gültig ist (nicht übersetzt werden kann)
dann ' === false' .

Poste dochmal Deine RegEx und den zu findenden String.

Gruß Agundur
__________________
AFFE ist nur im Dezimalsystem ein Palindrom.
agundur ist offline  
Alt 13.02.2009, 11:57  
Benutzer
 
Registriert seit: 15.05.2008
Beiträge: 37
gene befindet sich auf einem aufstrebenden Ast
Standard

Die RegEx funktioniert 100%. Ich verwende doch die selbe in der test.php, da geht ja alles.

String:
PHP-Code:
Themen1069
                Beiträge
5617
                Benutzer
581 
RegEx
PHP-Code:
/Themen: (d+s+)Beiträge: (d+s+)Benutzer: (d+)/ 
gene ist offline  
Alt 13.02.2009, 12:18  
Erfahrener Benutzer
 
Registriert seit: 04.12.2008
Beiträge: 132
agundur befindet sich auf einem aufstrebenden Ast
agundur eine Nachricht über Skype™ schicken
Standard

Versuch es mal so:

Code:
/Themen: (\d+\s+)Beiträge: (\d+\s+)Benutzer: (\d+)/
__________________
AFFE ist nur im Dezimalsystem ein Palindrom.
agundur ist offline  
Alt 13.02.2009, 12:19  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Jetzt will ich es aus Prinzip lösen.
?! WtH?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 13.02.2009, 12:23  
Benutzer
 
Registriert seit: 15.05.2008
Beiträge: 37
gene befindet sich auf einem aufstrebenden Ast
Standard

Den RegEx hatte ich schon und er funktioniert in der test.php, jedoch nicht in der Klasse. Wenn ich jetzt nur nach Themen suche findet er die richtige Zahl, wenn aber nach Beiträge oder nach Benutzer dann nicht.

Was 'sieht' die Klasse nur anders als die test ... ich verzweifle.
gene ist offline  
Alt 13.02.2009, 21:16  
Benutzer
 
Registriert seit: 15.05.2008
Beiträge: 37
gene befindet sich auf einem aufstrebenden Ast
Standard

*push* Ich komm wirklich nicht weiter, bitte um Hilfe.
gene 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
[Erledigt] Klasse in anderer Klasse benutzen Screeze PHP Tipps 2009 2 04.01.2009 14:57
Methode einer anderen Klasse aufrufen Luka PHP-Fortgeschrittene 15 09.11.2008 14:19
Klasse aus externer Klasse aufrufen kostja PHP Tipps 2008 8 07.08.2008 14:13
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
mehr als eine Klasse einbinden Alpha Centauri PHP-Fortgeschrittene 4 13.04.2006 20:56
[Erledigt] gelöst: Tabelle auslesen -&amp;amp;amp;amp;gt; Gleiche Einträge nur 1 Mal Datenbanken 3 31.03.2006 01:44
Klasenname einer nicht instanziierten Klasse DerDesian PHP Tipps 2007 9 30.11.2005 13:13
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
[Erledigt] Führerschein für Klasse A+B.. Preis OK??? Off-Topic Diskussionen 20 13.07.2005 18:44
Rückgabewert auf einer Klasse anders als in der Klasse micbur PHP Tipps 2005-2 6 10.06.2005 15:06
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Klasse holt sich die Klasse PHP-Fortgeschrittene 9 07.10.2004 11:53
Klassenobjet in anderer Klasse benutzen inu PHP Tipps 2004 6 19.09.2004 10:58
Klasse ändern UniQ PHP Tipps 2004 5 24.08.2004 14:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sitechrx, \sitechrx\, cookie:sitechrx=, parse error /html/includes/session.php on line 1007, board informationen ausleden, \zahl null\, get cookie from sitechrx

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:16 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