Brauche Banner-Klick-counter-script!!!



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



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


Anmelden zum Antworten