kostenloser Webspace werbefrei: lima-city


Suche auf lima-city

  • in: Nur bestimmte Daten von HP auslesen

    geschrieben von haniwo

    Na, so richtig firm bin ich im Auslesen anderer Seiten auch nicht, aber ich glaube, es müsste über fopen() funktionieren. Man kann als File-Adresse eine URL übergeben und somit den HTML-Stream einer anderen Seite abfangen. Ich bin mir nicht absolut sicher, ob ein fopen mit einer URL auch unter lima-city möglich/erlaubt ist, aber die PHPinfo() zeigt mir zumindest den Parameter "allow_url_fopen" als "On" an ...

    Nachdem Du die entfernte Seite mit
    $fp=fopen($url,'r');
    geöffnet hast, kannst Du den gesamten (html-)Inhalt mit
    $inhalt=fread($fp,100000);
    auslesen. ABER - ausgetestet habe ich das nicht. Ich habe jedoch durchaus schon mit fopen Dateien über ftp-Protokoll geöffnet ...

    WENN Du das Seiten-HTML einlesen kannst, so bleibt Dir natürlich immer noch die Aufgabe, die Dich interessierenden Informationen herauszufiltern. Das ist eine klassische Aufgabe für regular expressions. Allgemeine Formeln gibt es nicht dafür, aber nachdem ich mir den Seitenquelltext einmal angesehen habe, fiel mir auf, dass jeder Charakter in einer eigenen tabelle angezeigt wird. Die Struktur darin ist immer gleich (hurra!!!), so dass ich den folgenden Code zusammengeklimpert habe der (mit meiner lokal als .html-File abgespeicherten und wieder eingelesenen Seite) funktioniert hat:
    $ret="\r\n";
    $fp=fopen('elu.html','r');
    $txt=fread($fp,100000);  // alles einlesen
    $txt=eregi_replace('<table>','|@|',$txt);      // Abschnittsmarken setzen
    $txt=substr($txt,0,strrpos($txt,'</table>'));  // alles hinter der letzten Tabelle löschen
    
    $txt=eregi_replace('</?[^>]*>','',$txt);       // alle html-Tags entfernen
    $txt=eregi_replace("[\t]*",'',$txt);           // tabs (falls vorhanden) löschen
    $txt=eregi_replace("[$ret][$ret]+",$ret,$txt); // mehrfache Zeilenschaltungen löschen
    $txt=eregi_replace("\n +","\n",$txt);          // Blanks am Zeilenanfang löschen  
    $a=array_slice(explode('|@|',$txt),1);         // Textstring an den Abschnittsmarken trennen ... 
    $charact=array();                              // ... und erstes Element wegschmeissen 
    foreach ($a as $x) {                           // die interessierenden Daten aus jedem Bereich ...
      $v=explode("\n",$x);                         // herauslesen und in $charact abspeichern
      $charact[]=array($v[2],$v[4],$v[6],$v[7],$v[8],$v[9],$v[10],$v[13],$v[15]);
    }

    Zur Kontrolle habe ich das ganze auch noch mit folgendem html-Code angezeigt
    <textarea rows="30" cols="90"><? print_r($charact);?></textarea>

    Hier mein Ergebnis:
    Array
    (
        [0] => Array
            (
                [0] => Elu - Stufe 31
                [1] => Lephar
                [2] => Elyos
                [3] => TP 2,217
                [4] => MP 3,291
                [5] => Abyss-Punkte : 1,568
                [6] => Klasse 
                [7] => The Last Angels
                [8] => Balaurzunge
            )
    
        [1] => Array
            (
                [0] => Xelux - Stufe 50
                [1] => Lephar
                [2] => Elyos
                [3] => TP 7,063
                [4] => MP 5,999
                [5] => Abyss-Punkte : 15,807
                [6] => Klasse 
                [7] => Beyond the Horizon
                [8] => Piratenjäger
            )
    
        [2] => Array
            (
                [0] => Angelusmortis - Stufe 43
                [1] => Lephar
                [2] => Elyos
                [3] => TP 5,912
                [4] => MP 3,420
                [5] => Abyss-Punkte : 30,230
                [6] => Klasse 
                [7] => Beyond Good and Evil
                [8] => Held von Eltnen
            )
    
        [3] => Array
            (
                [0] => Fdoppelu - Stufe 42
                [1] => Lephar
                [2] => Elyos
                [3] => TP 3,367
                [4] => MP 7,239
                [5] => Abyss-Punkte : 10,961
                [6] => Klasse 
                [7] => The last Order
                [8] => Sprengstoffexperte
            )
    
        [4] => Array
            (
                [0] => Whiteluna - Stufe 41
                [1] => Lephar
                [2] => Asmodier
                [3] => TP 4,061
                [4] => MP 7,187
                [5] => Abyss-Punkte : 6,099
                [6] => Klasse 
                [7] => Mondgoettin Luna
                [8] => Meisterin der GK-Manipulation
            )
    
        [5] => Array
            (
                [0] => Allelujah - Stufe 39
                [1] => Lephar
                [2] => Asmodier
                [3] => TP 6,895
                [4] => MP 3,070
                [5] => Abyss-Punkte : 17,261
                [6] => Klasse 
                [7] => Great Vesperia
                [8] => Beschützer von Morheim
            )
    
        [6] => Array
            (
                [0] => Cattelus - Stufe 37
                [1] => Lephar
                [2] => Elyos
                [3] => TP 5,898
                [4] => MP 2,823
                [5] => Abyss-Punkte : 21,600
                [6] => Klasse 
                [7] => Bloodhound
                [8] => Liebeszyniker
            )
    
        [7] => Array
            (
                [0] => Elula - Stufe 36
                [1] => Lephar
                [2] => Elyos
                [3] => TP 2,688
                [4] => MP 2,760
                [5] => Abyss-Punkte : 9,066
                [6] => Klasse 
                [7] => ad honorem
                [8] => Geduldsengel
            )
    
        [8] => Array
            (
                [0] => Belusia - Stufe 36
                [1] => Lephar
                [2] => Elyos
                [3] => TP 2,366
                [4] => MP 2,242
                [5] => Abyss-Punkte : 4,869
                [6] => Klasse 
                [7] => Black Angels
                [8] => Achtet die Toten
            )
    
        [9] => Array
            (
                [0] => Angelusnight - Stufe 33
                [1] => Lephar
                [2] => Asmodier
                [3] => TP 4,448
                [4] => MP 2,542
                [5] => Abyss-Punkte : 11,347
                [6] => Klasse 
                [7] => Titel
                [8] => 
            )
    
    )

    sorry ... ist ein wenig lang geworden ...
  • in: Doc-Type als Template

    geschrieben von haniwo

    Warum muss es denn unbedingt Python sein? Bei Word ist doch VBA mit eingebaut. Kannst Du nicht die Python-Variableninhalte so ein eine Datei herausschreiben, dass ein Word-Makro sie zunächst einlesen (am besten in ein Dictionary oder in eine Collection) und dann beim Duchstöbern des Word-Dokuments an den entsprechenden Stellen gegen die Platzhalterzeichen austauschen kann?

    Ich weiß, Python ist sooo viel schöner ... aber wenn Du Dir mit Word sooo viel Ärger beim Exportieren und Re-Importieren einhandelst, kannst Du es vielleicht doch über Dich bringen, mit dem "schäbigen" Visual Basic zu arbeiten. Ist alles ein wenig klobiger und umständlicher, aber man kommt damit im allgemeinen auch zum Ziel!
  • in: Markierte Divs einfärben

    geschrieben von haniwo

    Versuch es mal mit der jQuery Bibliothek, damit ist so gut wie alles möglich - und das mit sehr wenig Code!

    http://jquery.com/
  • in: Boykott bei Funpic/Ohost

    geschrieben von haniwo

    War mit ziemlich vielen Seiten bei ohost. Mittlerweile läuft dort aber so gut wie gar nichts mehr! Habe mich jetzt lieber hier bei Lima eingerichtet. DieCommunity ist wirklich sehr aktiv hier - super!!
  • in: Internet Explorer 8 hat häufig Fehlstarts - Reparatur möglich?

    geschrieben von haniwo

    Hast Du regelmäßig alle Hotfixes von Microsoft akzeptiert (KBxxxxxx) ? Vielleicht können die das Problem beseitien?
  • in: Geburtstage in bestimmten Zeitraum

    geschrieben von haniwo

    Ich gehe mal davon aus, dass Du die Geburtstage im datetime-Format vorliegen hast.

    Wenn man es MySQL nicht anders mitteilt, gibt es Datumswerte als String im Format 'yyyy-mm-dd' zuück. Du kannst also einen ganz einfachen Stringvergleich vornehmen:

    substring(birthday,6,5) > '04-30'


    Die obige Abfrage ergibt TRUE für alle Geburtstage ab dem 1. Mai. Wichtig ist allerdings die führende 0 vor der 4. Das kannst Du über PHP mit $feld1, $feld2, $feld3 und $feld4 so ereichen (ich gehe davon aus, dass sie schon vorher von möglichen umschließenden Leerzeichen befreit wurden!):

    $startdate=substr("00$feld2", -2).'-'.substr("00$feld1", -2);
    $enddate=substr("00$feld4", -2).'-'.substr("00$feld3", -2);

    Die eigentliche Abfrage und Datenübergabe kann dann so aussehen:
    $r=mysql_query("SELECT birthday FROM yourtable 
                    WHERE substring(birthday,6,5) >= $startdate
                    AND substring(birthday,6,5) <= $enddate");
    $bdays=array();
    while ($z=mysql_fetch_assoc($r))  array_push($bdays,$z['birhday']);
    ...
  • in: 3 Datenbank Anweisungen hintereinander

    geschrieben von haniwo

    Datumsangaben kannst Du in den folgenden Formaten eingeben:

    Sie können DATETIME-, DATE- und TIMESTAMP-Werte mit einem der folgenden gängigen Formate angeben (siehe hier:http://dev.mysql.com/doc/refman/5.1/de/datetime.html) :

    * Als String im Format 'YYYY-MM-DD HH:MM:SS' oder 'YY-MM-DD HH:MM:SS'. Eine weniger strikte Syntax ist ebenfalls erlaubt: Ein beliebiges Interpunktionszeichen darf als Trennzeichen zwischen Datums- oder Zeiteinheiten benutzt werden. Beispielsweise sind '98-12-31 11:30:45', '98.12.31 11+30+45', '98/12/31 11*30*45' und '98@12@31 11^30^45' gleichwertig.
    * Als String im Format 'YYYY-MM-DD' oder 'YY-MM-DD'. Eine weniger strikte Syntax ist auch hier erlaubt. Beispielsweise sind '98-12-31', '98.12.31', '98/12/31' und '98@12@31' gleichwertig.
    * Als String ohne Trennzeichen in den Formaten 'YYYYMMDDHHMMSS' oder 'YYMMDDHHMMSS', sofern der String als Datum sinngebend ist. Zum Beispiel werden '19970523091528' und '970523091528' als '1997-05-23 09:15:28' interpretiert, aber '971122129015' ist unzulässig (der Minutenanteil ist unsinnig) und wird deswegen zu '0000-00-00 00:00:00'.
    * Als String ohne Trennzeichen in den Formaten 'YYYYMMDD' oder 'YYMMDD', sofern der String als Datum sinngebend ist. Zum Beispiel werden '19970523' und '970523' als '1997-05-23' interpretiert, aber '971332' ist unzulässig (der Tages- und der Minutenanteil sind unsinnig) und wird deswegen zu '0000-00-00'.
    * Als Zahl in den Formaten YYYYMMDDHHMMSS oder YYMMDDHHMMSS, sofern die Zahl als Datum sinngebend ist. Beispielsweise werden sowohl 19830905132800 als auch 830905132800 als '1983-09-05 13:28:00' interpretiert.
    * Als Zahl in den Formaten YYYYMMDD oder YYMMDD, sofern die Zahl als Datum sinngebend ist. Beispielsweise werden sowohl 19830905 als auch 830905 als '1983-09-05' interpretiert.
    * Als Ergebnis einer Funktion, die einen Wert zurückgibt, der im Kontext von DATETIME, DATE oder TIMESTAMP sinngebend ist, z. B. NOW() oder CURRENT_DATE.


    Wenn Deine ID-Spalte für settings 'id' heißt, dann musst Du natürlich id verwenden und nicht sid (ich hatte den Namen sid nur verwendet, weil ich grundsätzlich unterschiedliche Feldnamen in unterschiedlichen Tabellen verwende) .

    Und eine WHERE klausel brauchst Du tatsächlich nicht, wenn es nur einen Datensatz gibt.
  • in: Record-Datentyp in PHP

    geschrieben von haniwo

    schau mal hier nach

    zum Ausschneiden einer Reihe von Elementen:
    http://www.selfphp.de/funktionsreferenz/array_funktionen/array_slice.php
    (ein Teilarray wir zurückgegeben)

    Zum Ausschneiden und Einfügen von Elementen:
    http://www.selfphp.de/funktionsreferenz/array_funktionen/array_splice.php
    (Es wird ein Bereich angegeben, der ersetzt werden soll durch die Elemente eines angegebenen (Teil-)Arrays. Der zu ersetzende Bereich kann aber auch die Länge null haben, so dass nicht unbedingt Elemente gelöscht werden müssen)

  • in: ä ö ü Probleme

    geschrieben von haniwo

    Ich kenne das Clanshere-System nicht, aber vielleicht kannst Du ja mal prüfen, mit welcher Zeichenkodierung Deine Umlauteingaben in der dahinterliegenden Datenbank abgelegt werden, und wie sie "aussehen", wenn Du sie über PHP wieder "herausholst", also ob sie dann immer noch so kodiert sind, wie beim Einspeichern.

    Das ist insgesamt ein ziemlich frustiges Thema, zu dem ich keine Patentantwort weiß. Ich habe in meinen Anwendungen auch schon Zeichenersetzungen über str_replace vorgenommen, um die Daten in einem für die Datenbank "unkritischen " Format abzuspeichern, Nach dem Herausholen habe ich die Zeichenersetzungen dann wieder genau andersherum rückgängig gemacht. Aber ich glaube, mit etwas tieferer Kenntnis der Zeichenkodierungseinstellungen bei PHP und MySQl sollte es auh einfacher gehen.

    Gruß,
    Carsten
  • in: Springt weder in if noch else...

    geschrieben von haniwo

    Hast Du mal überprüft, ob Deine function 'getEntrys' bis zum ende (also bis zum return TRUE bzw FALSE) durchläuft? Evtl. einfach mal (quick&dirty) echo-Anweisungen einsetzen. Denn wenn die PHP-Abarbeitung da schon stockt, können Deine if bzw. else Blöcke nicht mehr abgearbeitet werden.
    Gruß,
    Carsten
  • in: 3 Datenbank Anweisungen hintereinander

    geschrieben von haniwo

    Ich habe folgende Punkte gefunden:

    Deine zweite Anweisung enthält keine WHERE-Klausel!!!!
    Damit wendest Du Dein Update auf alle Datensätze der Tabelle an. Falls Deine Tabelle 'settings' allerdings nur eine einzige Zeile enthalten sollte, brauchst Du natürlich keine WHERE-Klausel ...

    Deine dritte Anweisung ergibt so auch keinen Sinn, da Du den Datensatz sicherlich nicht einfügen (INSERT INTO) sondern nur ändern (UPDATE) willst! In einem INSERT INTO Befehl macht eine WHERE-Klausel keinen Sinn, da der Datensatz mit der ID sowieso noch nicht existieren sollte!

    Deine Anweisungen habe ich noch einmal "korrigiert" in zwei Anweisungen zusammengeschrieben (die erste und dritte habe ich kombiniert).

    In der zweiten habe ich noch eine Unsicherheit entdeckt: welchen Datensatz in der Tabelle 'settings' möchtest Du denn ändern?!? Gibt es dort eine korrespondierende ID mit dem Namen SID (wie ich es in meiner Anweisung angenommen habe?!?).
    ...
    if( mysql_query("UPDATE auszahlungen SET ausgezahlt=1, datum2='$datum2' WHERE id=$id")  AND
        mysql_query("UPDATE settings SET ausgezahlt = ausgezahlt+$betrag WHERE sid=$id"))  {
    ...

    Mir fällt auch auf, dass es in der Tabelle 'settings' den gleichen Feldnamen wie in der Tabelle 'auszahlungen' gibt. das ist syntaktisch zwar korrekt, kann aber leicht für Verwirrung sorgen!

    Ich hoffe, dass ich Deine Absicht hinter den SQL-Kommandos so einigermaßen richtig erraten habe.

    Gruß, Carsten ;-)



Login zum Webhosting ohne Werbung!