PHP Variabeln Problem mit der Übergabe

  • Ich bin z.z. grad ein kleines Plugin für den WBB 2.2 am coden, und eine Variable macht mir da furchtbar Ärger, hier der PHP Source Schnipsel:


    PHP
    if(!$wbbuserdata['userid']) access_error();
    $visited=0;
    $besucht=0;
    $visited=$db->unbuffered_query("SELECT visits FROM bb".$n."_guthaben_shop WHERE link='$filename'");
    $db->query("UPDATE bb".$n."_guthaben_shop SET visits=visits+1 WHERE link='$filename'");
    $visited=$visited++;
    $besucht=$visited;
    eval("\$tpl->output(\"".$tpl->get(" .......... usw usw


    Es geht um die Variable $visited, bzw $besucht, die in der SQL Datenbank visits heißt, da ist sie vom Typ bigint[20].
    Im Template übergebe ich die so :


    Code
    <if($wbbuserdata['can_see_it'])><then>$besucht times visited | </then></if>


    Wenn ich im phpmyadmin nachschaue, ist die richtig hochgezählt, die End-Ausgabe auf der Page ist aber immer 42 times visited ! Und zwar egal was ich in der SQL Datenbank eintrage.
    Muss dabei sagen, ich programmiere noch nicht so lage PHP, hab ich vllt eine Datentyp-Einstellung übersehen? :confused:

    c ya

  • Ich bin mir nicht ganz sicher, weil ichs grad nicht ausprobieren kann, aber evtl. macht deine Inkrementierung mitten im SQL-tag Probleme. Versuch die mal vor die Datenbankabfrage zu ziehen.
    Ein anderer Ansatz wäre die Funktion "unbuffered_query"; schau mal nach, was die Funktion da mit deinem Datensatz treibt. Rückgabewert isr evtl. nicht konform mit deiner Weiterbearbeitung. Im Extremsrfall einfach mal probeweise die sql-Abfrage ohne die db-Klasse des Skripts schreiben.


    hmmm... ich kenn leider WBB 2.0 nicht.


    Gruß

    „Meine Mutter zog Mützchen über die Klopapierrollen, der Hund trug Pullover, auf der Couch lagen Schondeckchen. Ich brauchte keine Drogen, die Realität war verrückt genug."
    (Jerry Seinfeld)

  • es könnte auch sein, dass PHP eine Übergabe a la


    $visited=$visited++;


    nicht mag... versuch es doch einfach mit


    $visited++;


    das langt zum incrementieren...

    Galaxy S8 on Oreo

  • bei nochmaligem durchlesen ist mir aufgefallen, dass nicht das schreiben in die Datenbank das Problem ist (er kontrolliert ja direkt im table und da wird richtig gezählt), sondern die Ausgabe stellt das Problem dar.


    viper: kontrolliere mal die Funktion unbuffered_query (müsste in der Klasse "db" definiert werden!)


    Gruß


    edit: warum eigentlich die aufsplittung von $besucht und $visited?

    „Meine Mutter zog Mützchen über die Klopapierrollen, der Hund trug Pullover, auf der Couch lagen Schondeckchen. Ich brauchte keine Drogen, die Realität war verrückt genug."
    (Jerry Seinfeld)

  • ich hab nun stat unbuffered_query die normale db-> query genommen, der fehler bleibt leider. die aufsplittung mit $besucht war weil ich dachte es läge an $visited, dem war aber nicht so. $visited++ hab ich auch auskommentiert, bringt auhc nichts ... irgendwo hapert es mit der variabelnübergabe von sql nach php, wie kann ich das prüfen?

    c ya

  • probier mal direkt nach deiner Datenbank abfrage folgende Zeile einzufügen:

    PHP
    print_r($visited);


    das sollte dir das Datenformat und den Inhalt der Abfrage zeigen.


    Gruß

    „Meine Mutter zog Mützchen über die Klopapierrollen, der Hund trug Pullover, auf der Couch lagen Schondeckchen. Ich brauchte keine Drogen, die Realität war verrückt genug."
    (Jerry Seinfeld)

  • Resource id #42‹K¹Y¢›îsû§XA�2š ºù…JNP^H2ÿoHæÏ’ÌK$Ó}‰dz”‘üÕb& ÏSÂ�;÷EŠ'[Ü


    :confused:

    c ya

  • oh, ich glaub da läuft ganz schön was schief....


    probier mal statt der Zeile:

    PHP
    $visited=$db->unbuffered_query("SELECT visits FROM bb".$n."_guthaben_shop WHERE link='$filename'");


    folgende Zeilen zu probieren:

    PHP
    $server = localhost;
    $username = "dein sql username";
    $password = "dein sql passwort";
    $database = "deine Datenbank";
    $query = "SELECT visits FROM bb".$n."_guthaben_shop WHERE link='$filename'";
    $SQL = mysql_connect($server, $username, $password);
    mysql_select_database($database, $SQL);
    $visited = mysql_query($query, $SQL)


    deine Daten musst du halt einfach ersetzen.
    Das einfach mal asl Versuch, die db-Klasse zu umgehen und die Anfrage direkt zu stellen. Das sollte natürlich nicht so bleiben, aber zur Fehlersuche evtl. ganz hilfreich; denn der Datenmüll, den print_r liefert sieht etwas eigenartig aus.


    Gruß

    „Meine Mutter zog Mützchen über die Klopapierrollen, der Hund trug Pullover, auf der Couch lagen Schondeckchen. Ich brauchte keine Drogen, die Realität war verrückt genug."
    (Jerry Seinfeld)

  • hehe, der datenmüll kam zustande da ich das print vor dem rendern der htmls eingefügt hab. da ich mod_gzip auf dem apache laufen hab, hab ich nach dem print die komprimierte html seite geliefert bekommen, damit kommt kein browser klar...


    ich habe eine lösung gefunden : und zwar hat das WBB vorgefertigte query funktionen für die datenbank ; das war bei mir des rätsels lösung :

    PHP
    function query_first($query_string, $limit = 0, $offset = 0, $type = MYSQL_BOTH, $showerror = 1) {
    $this->query($query_string, $limit, $offset, $showerror = 1);
    $returnarray = $this->fetch_array($this->query_id, $type);
    return $returnarray;
    }


    $visits ist nun ein array mit der gesamten sql zeile und ich musste nur eine zeile in meinem code ändern :

    PHP
    $besucht=$visited[visits];



    trotzdem danke für eure bemühungen!

    c ya

  • lag ich gar nicht so falsch mit dem Problem in der db-Klasse....


    nun gut, viel Erfolg noch

    „Meine Mutter zog Mützchen über die Klopapierrollen, der Hund trug Pullover, auf der Couch lagen Schondeckchen. Ich brauchte keine Drogen, die Realität war verrückt genug."
    (Jerry Seinfeld)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!