• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bestimmte Stelle aus dem Quelltext auslesen

Witschi262

Blogger
Hallo,
ich habe eine Fansite erstellt zu einem MMORPG. Diese Haben eine Funktion, seinen eigenen Avatar anzeigen zu lassen. Jetzt möchte ich auf meiner Fanseite den Avatar Des spiels mit dem Konto auf meiner Fanseite Verknüpfen. Das geht so:

Der Spieler schreibt auf seine Pinwand einen bestimmten Code. Danach seinen Spielernamen auf meine Website. Dann geht mein Script auf sein Profil und prüft ob dieser Code exestiert.

HTML:
$mission = ' WH-3g5a8d6ged8a6s5';
$page = file_get_contents('http://habbo.'.$land.'/home/'.$habbo.'');
if(eregi($mission, $page, $result)) {

Jetzt ist es aber so, wenn ich aber den Code in das dazgehörige Gästebuch auf dem Profil schreibe, wo jeder zugriff hat, wird das auch erkannt. Somit kann sich jmd. als jmd. ausgeben, der er nicht ist.

Dann habe ich versucht, den DivContainer, inder der Code normalerweise, wenn man ihn auf die Pinwand schreibt, einfügt, mit anzuhängen, doch dasklappt nicht.

Wie geht das sonst?
 
Moin,
Also deine Beschreibung ist dir irgendwie missglückt :D
Du musst bedenken, dass keiner von uns den Vorgang kennt.
Deswegen hast du folgende Sachen vergessen zu erklären:

- Was für eine Funktion soll implementiert werden?
Bzw wie sieht so eine Verknüpfung aus?

- Wieso hast du die Befürchtung, dass sich jemand als jemand Anderes ausgeben kann?

- Welcher Div Container?

Bitte beschreib mal ganz genau wie das Ganze ablaufen soll :)
 
Du meinst, es darf sich niemand als jemand anders ausgeben? Hol dir doch einfach den Username aus dem Session Array und pack ihn in die file_get_contents Funktion.

Grüße
Nico
 
Hi,
@Tip:
Er ist ja nicht registriert. Dieser verifizierungsvorgang ist extra dfür geeignet, damit ich die Person eindeutig identifizieren kann.

Dann etwas genauer. Also. Ein User erstellt sich seinen Avatar. Mit diesem kann er sich in der Virtuellen Welt bewegen. Er hat sein eigenes Profil etc.
Außerdem hat er eine sog. Mission, die er definieren kann, die dann auf seinem Profil erkennbar ist.

Nehmen wir an, ein Benutzer hat sich auf meiner Fanseite registriert. Jetzt hat er die Möglichkeit einen code, in seine Mission einzugeben und abzuspeichern. Das Script geht auf sein Profil und sucht nach dem Code. Findet er ihn werfe ich ihn per if() abfrage einfach weiter.
Jetzt ist das Problem, dass viele ein Gästebuch auf ihrem Profil haben. Das heißt, ein "Hacker" tippt diesen Code, in das Gästebuch des Opfers ein und kann sich somit, als dieses opfer ausgeben, da das Script ja nur sieht: Okay da steht der Code GRÜNES LICHT.

So, jetzt habe ich folgendes Scriptum gefunden:
HTML:
$habbo = $_POST['name_'];
        $mission = "WH-3g5a8d6ged8a6s5";
        $page = file_get_contents('http://habbo.de/home/'.$habbo.'');
        eregi('<div class="profile-motto">(.*)<div class="profile-friend-request clearfix">', $page, $result);
        $search[0] = '<div class="clear">';
        $search[1] = '</div>';
        $result = str_replace($search, "", $result[1]);
        $result = preg_replace("/\s+/", "", $result);
        if($result === $mission) {
Das funktioniert aber nicht.

Klick :D.
Im Quelltext Zeile 277 befindet sich die Betroffene stelle.
 
Am besten immer mit DOMDocument und DOMXPath.

- PHP: DOMDocument - Manual
- PHP: DOMXPath - Manual
- Vielleicht auch Suche nach „site:html.de mermshaus domdocument domxpath“. Ich habe im Laufe der Zeit einige Snippets gepostet.

PS: eregi bitte nicht mehr verwenden, das ist veraltet. Für reguläre Ausdrücke sind die preg_*-Funktionen geeignet.
 
Tschuldige, dass ist jetzt etwas verwirrend. Wie gesagt, den obigen Codeschnipsel habe ich von Google. DOMDocument und COMXPath sind jeweils Klassen? Ich verstehe das garnicht was auf PHP.net steht. Die gefunden Snippets von dir sind leider ziemlich knapp und ohne beschreibung. Wie fange ich jetzt am besten an?

Wie gesagt, bin ja doch recht ziemlich neu in Klassen ich google mich mal ein D:
 
Witschi262 schrieb:
Tschuldige, dass ist jetzt etwas verwirrend.

Ja, deshalb habe ich auch erst nicht geantwortet.

PHP:
<?php

/**
 * Send a GET requst using cURL
 *
 * @see http://www.php.net/manual/en/function.curl-exec.php#98628
 *
 * @param string $url to request
 * @param array $get values to send
 * @param array $options for cURL
 * @return string
 */
function curlx_get($url, array $get = NULL, array $options = array())
{
    if ($get === null) {
        $get = array();
    }

    $defaults = array(
        CURLOPT_URL => $url. (strpos($url, '?') === FALSE ? '?' : ''). http_build_query($get),
        CURLOPT_HEADER => 0,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_TIMEOUT => 4
    );

    $ch = curl_init();
    curl_setopt_array($ch, ($options + $defaults));
    if( ! $result = curl_exec($ch))
    {
        trigger_error(curl_error($ch));
    }
    curl_close($ch);
    return $result;
}

/**
 * @see http://www.php.net/manual/en/class.domelement.php#86803
 */
function domx_getInnerHtml($elem)
{
    $innerHtml = '';

    foreach ($elem->childNodes as $child) {
        $tmp_doc = new DOMDocument();
        $tmp_doc->appendChild($tmp_doc->importNode($child,true));
        $innerHtml .= $tmp_doc->saveHTML();
    }

    return $innerHtml;
}

/**
 *
 * @param string $user
 * @param string $missionTag
 * @return bool
 */
function habbo_userHasMissionTag($user, $missionTag)
{
    $url = 'http://www.habbo.de/home/' . $user;

    $htmlCode = curlx_get($url);

    // Suppress "invalid markup" warnings
    libxml_use_internal_errors(true);

    $doc = new DOMDocument();
    $doc->loadHTML($htmlCode);
    $xpath = new DOMXPath($doc);

    $dataToSearch = '';

    foreach ($xpath->query('//div[@class="profile-motto"]') as $node) {
        $dataToSearch .= domx_getInnerHtml($node);
    }

    $found = (strpos($dataToSearch, $missionTag) !== false);

    return $found;
}



$user = 'town!!!';
$missionTag = "WH-3g5a8d6ged8a6s5";



$userHasTag = habbo_userHasMissionTag($user, $missionTag);

if ($userHasTag) {
    echo 'Verifiziert';
} else {
    echo 'Nicht verifiziert';
}
 
Zurück
Oben