Brauche Banner-Klick-counter-script!!!



  • 1.) du solltest anstelle von $url besser $_GET['url'] verwenden
    2.) dein if-else syntax ist so nicht ganz richtig (ein if kann immer nur ein else haben -> elseif oder gleich mit switch)
    3.) du solltest versuchen das ganze zu abstrahieren, sodass du nicht die ganzen URLs im Code aufführen musst
    4.) ich würde dir empfehlen, nicht für jede URL eine extra Datei anzulegen, sondern (wenn schon nicht DB) alles in einer Datei abzulegen. z.B. könntest du ein Array anlegen, mit der URL als Schlüssel und den clicks als Wert. Um dieses dann in eine Datei zu schreiben kannst du es einfach mit serialize in einen String überführen - nach dem Auslesen dann wieder unserialize.
    5.) vor dem Aufruf von header darf keinerlei Ausgabe erfolgen (nicht einmal Leerzeichen)



  • 😃

    Hier soweit kann ich dir folgen:

    <?php
    $url=$_GET['url']
    
    switch(Was kommt hier rein??)
    {
    case ""
    

    Is warscheinlich jetzt schon falsch...
    Kansnte net einfach des script schreiben??? plzz



  • Zum Erhöhen des Zählers:

    $file = 'link_stats.dat';
    $fp = fopen($file,'r+'); 
    $inhalt = fread($fp, filesize($file));
    $link_stats = unserialize($inhalt);
    $link_stats[$_GET['url']]++;
    $inhalt = serialize($link_stats);
    rewind($fp);
    fwrite($fp,$inhalt);
    fclose($fp); 
    header('Location: '.$_GET['url']);
    

    bzw. zum Auslesen:

    $file = 'link_stats.dat';
    $fp = fopen($file,'r'); 
    $inhalt = fread($fp, filesize($file));
    $link_stats = unserialize($inhalt);
    fclose($fp);
    foreach($link_stats as $url => $clicks) {
     echo 'Die URL '.$url.' wurde bereits '.$clicks.' mal aufgerufen!<br />';
    }
    

    Der Code ist nicht getestet (evtl. macht die URL als Key Probleme 🙄 ), aber ehrlich gesagt frage ich mich, warum du nicht gleich die DB nimmst, wenn du schon eine hast 😕



  • Hab ich dir doch gesagt ich hab keine Ahnung wie ich des machen soll, sag mir wies geht und ich nehm die DB...

    sers Mc



  • Ich hab dir doch schon den fast kompletten Code gepostet, wenn du damit nicht zurechtkommst kann ich nur sagen: "Tutorials lesen" (Link dazu hab ich ja auch gepostet) - wenn du davon zumindest den MySQL Teil gelesen hast solltest du keine Probleme mit meinem Code mehr haben 😉
    Ein bisschen Eigeninitiative kann man ja wohl noch verlangen :p



  • K, dann les ich mir mal die MySQL Tuts durch...

    sers



  • Welchen Spaltentyp soll ich denn für die 3 spalten nehmen???



  • CREATE link_table(
    ID INT AUTO_INCREMENT PRIMARY KEY,
    url VARCHAR(50),
    clicks INT,
    );

    Passt des so??



  • Also die DAtensätze hab ich jetzt mit PHPmyAdmin erstellt...
    So jetzt hab ich mir ne go.php erstellt mit folgendem code:

    <?
    $sql = 'SELECT url, clicks FROM link_table WHERE id = "'.$_GET['id'].'"'; 
    $result = mysql_query($sql); 
    list($url,$clicks) = mysql_fetch_row($result); 
    $clicks++; 
    $sql = 'UPDATE link_table SET clicks = "'.$clicks.'" WHERE id = "'.$_GET['id'].'"'; 
    mysql_query($sql); 
    header('Location: '.$url); 
    exit();
    ?>
    

    So dann rufe ich die in DAtensätzen gespeicherten URLs mit deren IDs auf:

    .../go.php?id=1

    Dann kommen folgende Fehlermeldungen:

    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /usr/local/httpd/htdocs/mc/go.php on line 4
    
    Warning: Cannot modify header information - headers already sent by (output started at /usr/local/httpd/htdocs/mc/go.php:4) in /usr/local/httpd/htdocs/mc/go.php on line 8
    

    Wie kann ich die denn beheben?



  • bau mal nach dem result=mysql_query(result = mysql\_query(sql); ein echo mysql_error(); ein

    und für url würde ich schon mind. ein VARCHAR (255) nehmen



  • No Database Selected
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /usr/local/httpd/htdocs/mc/go.php on line 5
    
    Warning: Cannot modify header information - headers already sent by (output started at /usr/local/httpd/htdocs/mc/go.php:4) in /usr/local/httpd/htdocs/mc/go.php on line 9
    

    Mh ja, würd sagen der findet die datenbank net oder die wurde net ausgewählt...

    sers Mc



  • Du hast die Tutorials offenbar nicht richtig gelesen. Du musst natürlich noch vorher zur Datenbank connecten und eine DB auswählen:

    mysql_connect($db_server, $db_user, $db_pass);
    mysql_select_db($db_name);
    


  • Ja lol hab ich ja gesagt... 😃
    Ne weil bei dir der Code vom auslesen stand, und des conecten net dabei war hab ich gedacht des brauch man net. 🙂

    Naja ich probs jetzt nochmal mit conecten



  • K es funtzt! 😃
    So nur noch ein Prob.. Mit dem auslesen... Wie soll ich des machen? da hilft mir des tut glaub ich net viel weiter:

    http://tut.php-q.net/mysql-select-php.html#u1

    sers Mc



  • k funtzt jetzt, thx nochmal für deine großen bemühungen!!!

    sers Mc



  • so es gibt ein script weis aber ne wie es richtig geht das ist mit admin bereich aber leider alles englisch aber zum glück gibt es google chrome der das über setzt. also ich habe das Script auf meiner download seite aber hier ist erstmal meine demo seite under http://erzcommunity.er.funpic.de/links/ gebe da name demo und pw:demo ein zum testen bei fragen auf contakt zur download seite statt /links/ einfach /files/ eingeben.



  • Mc schrieb:

    <?
    $sql = 'SELECT url, clicks FROM link_table WHERE id = "'.$_GET['id'].'"'; 
    $result = mysql_query($sql); 
    list($url,$clicks) = mysql_fetch_row($result); 
    $clicks++; 
    $sql = 'UPDATE link_table SET clicks = "'.$clicks.'" WHERE id = "'.$_GET['id'].'"'; 
    mysql_query($sql); 
    header('Location: '.$url); 
    exit();
    ?>
    

    Hallo,

    das ist soooo unschön 😞 Ein SQL-Statement reicht vollkommen aus:

    $stmt = "UPDATE link_table SET clicks=clicks+1 WHERE id='".$_GET['id']."'";
    mysql_query($sql);
    

    LG



  • hmmz|off schrieb:

    sql=SELECTurl,clicksFROMlinktableWHEREid=".sql = 'SELECT url, clicks FROM link_table WHERE id = "**'._GET['id'].'**"';

    Und sowas wie das Fettgedruckte bitte GANZ schnell vergessen ... !



  • Für z.B. so Dinge würde sich mein PHP-ORM sehr gut eignen.

    Will mich damit auch jetzt hier nicht profilieren, wollte es nur mal erwähnen, denn es gibt ja nicht nur (m)ein ORM 😉 !!

    Aber SQL Kenntnisse würde ich mir dennoch Aneignen, falls da noch nich so viel Wissensbasis/Erfahrung vorhanden ist!

    So könnte zb. ein Counter aussehen der Daten über MySQL speichert mit meinem ORM.
    (verbindung zur Datenbank aufbauen, und setzen des Connectors wären nur 3 Zeilen mehr!)

    <?php
    
    $CDS= "counter extends stdID{ name text(1024);
                          calls bigint;
                        }";
    
    counter::$ormpc = new ORMC($CDS);
    
    class counter extends component {
    
      static $ormpc;
    
      static function Increment ($name) {
    
        $counter = counter::GetObject (array("name"=>$name));
    
        if(!$counter) {
            $counter = counter::NewObject ();
            $counter->name  = $name;
        }
    
        $counter->calls=$counter->calls+1;
    
      }
    
      static function Reset ($name) {
        $counter = counter::GetObject (array("name"=>$name));
        if($counter)
          $counter->calls=0;
      }
    
      static function Get ($name) {
        $counter = counter::GetObject (array("name"=>$name));
        if($counter)
          return $counter->calls;
        else
        return 0;
      }
    
    }
    
    ?>
    

    Wenn du mein PHP-ORM nutzen magst würde mich das unbestritten freuen, hilft mir ja auch bei der Weiterentwicklung.

    Und wenn garkein ORM in Frage kommt auch OK! War ja nur ein Vorschlag 😉 !

    mfg. Patrick


Anmelden zum Antworten