Brauche Banner-Klick-counter-script!!!



  • Hi ich bräuchte ein Script, denke mal das das mit PHP am besten geht, das die klicks auf einen Link-Button zählt! Am besten wäre es das man in so nem Admin Control Panel einfah neue Buttons//links hinzufügen kann. Mehr muss es gar nicht sein! Ein Beispiel:

    http://www.head-graphics.com/links_personal.php

    plzz help me!!!

    sers Mc



  • Jeder Link bekommt eine. Jetzt musst du einfach in einer Textdatei oder einer DB speichern, wie oft dieser Link angeklickt wurde. Dazu darf der Link aber nicht direkt auf sein Ziel verlinken, sondern muss ein Script von dir aufrufen (zusammen mit seiner id). Jetzt erhöhst du den entsprechenden Zähler und machst per header('Location: http://...'); eine Weiterleitung zum eigentlichen Ziel - du musst also neben der anzahl der hits für jede id die dazugehörige url hinterlegen.

    Die konkrete Umsetzung hängt aber von deinen Möglichkeiten (DB, oder nicht?) ab - und von deinen Programmierkünsten 😉



  • Db=Ja
    Programierkünste=eher nein!

    Kann mir jemand son script schreiben???

    sers Mc



  • Moin!

    Ich habe es mit Java-Script und PHP gelöst:

    <html>
    <head>
    <title>Test Weiterleitung+Klickzähler</title>
    <body>
    <?php
    ### hier ggF. den Pfad anpassen, wenn relativ:
     $hFile = fopen("counter.txt", "r+");
     $counter = fgets($hFile, 10);
     if ($counter == "") {
      $counter = 0;
       }
       $counter++;
       rewind($hFile); 
       fwrite($hFile, $counter);
       fclose($hFile);
    ?>
    <script type="text/javascript"> 
       <!-- 
          window.location="http://Www.c-plusplus.net" 
       //--> 
    </script> 
    
    Sollte Ihr Browser kein Java-Script unterst&uuml;tzen, so klicken Sie bitte <a href="http://www.c-plusplus.net" target="_self">hier</a>, um zur Startseite zu gelangen! 
    </body>
    </html>
    

    Die Anzahl der Klicks steht dann in der Datei "counter.txt". Natürlich muss dein Webspace PHP unterstützen.

    mfg



  • Erstmal danke für deine Hilfe!!!!!!
    Dann muss ich aber immer für jeden Link eine neue Textdatei erstellen?

    sers Mc



  • Moin!

    Um genau zu sein: Ja!
    Es lässt sich zwar auch mit ner MySQL-Datenbank realisieren, dazu habe ich aber im Moment keine Zeit. Vielleicht findet sich hier ja ein netter, der das zeigt.



  • Also Tabelle mit 3 Spalten (id, url, clicks)!
    id entweder also Autoinkrement, oder selber erzeugen

    Zum einfügen:

    INSERT INTO link_table SET url = '$url';
    

    und in dem Script, auf das du verlinkst:

    $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();
    

    wenn du die URL nicht mehr auslesen musst kannst du es auch gleich so machen:

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


  • ? 😕

    Sry, kannst du mir das auch ausfürhlicher erklären, das schwerste was ich bis jetzt gemacht hab war ein GB aus ner SB gebastelt!!

    sers Mc thx im voraus!



  • Was soll ich dir ausführlicher erklären? Was verstehst du denn nicht?



  • Sagen wir so, n README wär net schlecht 😉

    Also wie soll ich des machen?? So wie
    Schritt 1:blabla
    Schritt2:blubblub

    Vielleicht nochn paar daten??
    Ich hab PHP, MYSQL, PHPMyAdmin...
    Also daran sollte es net scheitern nur ich hab keinen blassen schimmer wie ich des anstellen soll?? sry

    sers Mc



  • Falls du ein richtig professionelles (und schönaussehndes) System mit ACP nehmen willst, dann empfehle ich dir http://www.phpadsnew.com/one/ bzw. http://sourceforge.net/projects/phpadsnew/



  • Wenn du noch so wenig Ahnung hast solltest du dir am Besten erst mal ein gutes Tutorial durchlesen (oder ein Buch)



  • Also ich ha des jetzt mal so gemacht:

    <?php
    if($url=="http://www.doom3maps.de"){
      $file="www.doom3maps.de.dat"; // datei in der der stand gespeichert wird
      $data = fopen($file, "r+");
      $inhalt = fread($data, filesize($file));
      if(empty($inhalt)){$inhalt=0;} // wenn die datei leer ist, ist der stand 0
      $inhalt++;
      rewind($data);
      fwrite($data, $inhalt);
      fclose($data);
      header("location:".$url.""); // weiterleitung
    }
    else{
      if($url=="http://www.doom3.de")
      {
      $file="www.doom3.de.dat"; // datei in der der stand gespeichert wird
      $data = fopen($file, "r+");
      $inhalt = fread($data, filesize($file));
      if(empty($inhalt)){$inhalt=0;} // wenn die datei leer ist, ist der stand 0
      $inhalt++;
      rewind($data);
      fwrite($data, $inhalt);
      fclose($data);
      header("location:".$url.""); // weiterleitung
    }
    else{
      if($url=="http://www.doom3genetic.de"){
      $file="www.doom3genetic.de.dat"; // datei in der der stand gespeichert wird
      $data = fopen($file, "r+");
      $inhalt = fread($data, filesize($file));
      if(empty($inhalt)){$inhalt=0;} // wenn die datei leer ist, ist der stand 0
      $inhalt++;
      rewind($data);
      fwrite($data, $inhalt);
      fclose($data);
      header("location:".$url.""); // weiterleitung
    }
    else{
      echo "Keinen Eintrag in der Datenbank gefunden!";
    }
    }
    }
    ?>
    

    Den hab ich ganz am Anfang der Seite eingefügt! Also für jede URL eine If-Abfrage wenn die URL nicht dem IF-WErt Entspricht gehts weiter zur nächsten Url! Wenn keine entsprechende *.dat-DAtei da ist wird die Meldung :Kein Eintrag in DB gefunden! Ausgeworfen.
    So dann hab ich noch ein script das die jeweilige *.dat-Datei ausliest:

    <?php
    $file="www.doom3maps.de.dat"; // datei
    $data = fopen($file, "r");
    $inhalt = fread($data, filesize($file));
    if(empty($inhalt)){$inhalt=0;}
    fclose($data);
    echo $inhalt; // darstellen
    ?>
    

    Die wird dann bei jedem neuen Link angepasst.

    Ich rufe die links mit diesem befehl auf:

    links.php?url=http://www.doom3maps.de
    

    So da gibts nur ein Prob! Irgendwas stimmt da net! DA wird ein neues Fenster geöffnet und diese Meldung angezeigt:

    Warning: Cannot modify header information - headers already sent by (output started at /usr/local/httpd/htdocs/mc/links.php:1) in /usr/local/httpd/htdocs/mc/links.php on line 11
    

    könnt ihr mir da helfen??



  • 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??


Anmelden zum Antworten