kostenloser Webspace werbefrei: lima-city


Ajax Daumen-Hoch script realisieren.

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    Guten Morgen,

    Folgendes,
    gere würde folgendes realisieren:
    man hat auf einer Website einen Post, z.B. einen Kommentar, und möchte diessen dann mit Daumen hoch oder runter bewerten.. ähnlich wie bei YT.

    Jetzt könnte ich das ohne Probleme mit PHP und ner mysql datenbank realisieren.. Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss.
    Ich hätte es aber gerne So, dass das nötige script im Hintergrund -->AJAX ausgeführt wird, und der Daumen in eine Datenbank eingetragen wird, ohne die Seite neu zu laden...

    Wie Gesagt mit PHP und der Datenbank is das kein Problem für mich, aber mit AJAX kenn ich mich nicht so aus, und hoffe, dass mir jemand von euch weiterhelfen kann, oder eine Website empfielt, wo soetwas erklärt wird..

    Vielen Dank, und gute Nacht wünscht euch euere Hermine
    :love:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    paddy-herrmy schrieb:
    Wie Gesagt mit PHP und der Datenbank is das kein Problem für mich, aber mit AJAX kenn ich mich nicht so aus, und hoffe, dass mir jemand von euch weiterhelfen kann, oder eine Website empfielt, wo soetwas erklärt wird..
    Das könntest du so machen:
    function createXMLHttpRequest() {
    	if(window.XMLHttpRequest) {
    		// code for IE7+, Firefox, Chrome, Opera, Safari
    		return new XMLHttpRequest();
    	} else {
    		// code for IE6, IE5
    		return new ActiveXObject("Microsoft.XMLHTTP");
    	}
    }
    
    function bewerten(hochrunter) {
    	var request = createXMLHttpRequest();
    	request.open("GET", "bewertungsseite.php?daumen=" + hochrunter, true);
    	request.send();
    }
  4. paddy-herrmy schrieb:
    ... Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss ...
    warum?
    1. daumen-hoch-seite schickt die daten via post mit curl an den server;
    2. je nach ergebnis weiter zur nächten seite oder daumen-hoch-seite wiederholen (wegen fehler?!)
    (ich poste oft so, dass man sich glauben könnte, ich hätte etwas gegen js/ajax. nein. ich will das zeug nur dort haben, wo es angebracht ist.)
  5. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    hemiolos schrieb:
    paddy-herrmy schrieb:
    ... Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss ...
    warum?
    1. daumen-hoch-seite schickt die daten via post mit curl an den server;
    2. je nach ergebnis weiter zur nächten seite oder daumen-hoch-seite wiederholen (wegen fehler?!)
    (ich poste oft so, dass man sich glauben könnte, ich hätte etwas gegen js/ajax. nein. ich will das zeug nur dort haben, wo es angebracht ist.)


    Nehmen wir an, du hast eine Seite, mit 15 Witzen untereinander.. wenn du jetzt dem unterstem einen Daumen hoch gibst, must du nach dem laden wieder genau da hin zurück scrollen, wo du geliked hast... und ja ich weiss, man kann das dann auch mit #hierher machen, aber mit ajax wärs wesentlich eleganter...
  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    hemiolos schrieb:
    1. daumen-hoch-seite schickt die daten via post mit curl an den server;
    Naja, und du möchtest curl beim Client verwenden? Zeig bitte mal ein Beispiel wie das funktioniert...

    paddy-herrmy schrieb:
    Nehmen wir an, du hast eine Seite, mit 15 Witzen untereinander.. wenn du jetzt dem unterstem einen Daumen hoch gibst, must du nach dem laden wieder genau da hin zurück scrollen, wo du geliked hast... und ja ich weiss, man kann das dann auch mit #hierher machen, aber mit ajax wärs wesentlich eleganter...
    Dann schau dir meinen Javascript-Code an, der macht dir genau das...
  7. Das sollte dir auch schon weiterhelfen:
    http://stackoverflow.com/questions/8187588/making-a-like-dislike-ajax-script-not-working

    Generell würde ich aber auch mit jQuery arbeiten:
    http://api.jquery.com/jQuery.ajax/
  8. paddy-herrmy schrieb:
    Nehmen wir an, du hast eine Seite, mit 15 Witzen untereinander.. wenn du jetzt dem unterstem einen Daumen hoch gibst, must du nach dem laden wieder genau da hin zurück scrollen, wo du geliked hast... und ja ich weiss, man kann das dann auch mit #hierher machen, aber mit ajax wärs wesentlich eleganter...
    und ich verstehe es noch immer nicht, warum jedas mal nach daumen hoch die seite neu geladen werden muss¡¿ die 15 witze sind gleichzeitig sichtbar, du liest sie und nach jedem lesen triffst die entscheidung, ob daumen o. nicht. wenn daumen, dann vergibst eben daumen und liest weiter. bist du mit der seite fertig, schickst deine daumen auf einmal an den server und basta. diese art daumen zu vergeben hat nur vorteile:
    1. js fällt weg (was bleibt ist webstandard);
    2. ensteht kein zusätzlicher traffic im netz;
    3. du quälst den sql-server nicht zig-mal;
    4. ohne extra programmieren zu müssen, kannst - vor dem abschicken - jeden vergebenen daumen auch rückgängig machen (die zeit zum überlegen hast du ja, die seite liegt auf, niemand 'verdeckt' sie dir, dass du schnell agieren müsstest).

    ja und ohne ajax geht das dann so und hier der kode:
    <?php
    error_reporting(E_ALL | E_STRICT);
    
    // witze zum testbetrieb
    $jokes = array(
      'joke_1', 'joke_2', 'joke_3', 'joke_4', 'joke_5',
      'joke_6', 'joke_7', 'joke_8', 'joke_9', 'joke_10',
      'joke_11', 'joke_12', 'joke_13', 'joke_14', 'joke_15'
    );
    
    // witz mit checkbox versehen
    $joke_n = null;
    for($i = 1; $i <= count($jokes); $i++) {
      $joke_n .= <<< EOT
            <p>{$jokes[$i-1]}<br />
              daumen: <input type="checkbox" name="joke_$i" /></p>\n
    EOT;
    }
    
    
    // form erzeugen
    $form = <<< EOT
          <form action="./daumenauswerten.php" method="post">
    $joke_n
            <input type="submit" name="action" value="daumen" />
          </form>
    EOT;
    
    
    // ausgeben
    echo <<< EOT
    <!DOCTYPE html>
    <html>
      <head>
        <title>daumen</title>
      </head>
      <body>
    $form
      </body>
    </html>
    EOT;


    hackyourlife schrieb:
    ... Naja, und du möchtest curl beim Client verwenden? Zeig bitte mal ein Beispiel wie das funktioniert...
    lieber nicht ;)
    also die art kompliziertheit der vorgegebenen sache hat mich derart gestört, dass ich mit meinen gedanken einfach davongaloppiert bin. kann jedem mal passieren (aber post stimmt wenigstens :o)

    Beitrag zuletzt geändert: 27.4.2012 2:49:15 von hemiolos
  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    hemiolos schrieb:
    und ich verstehe es noch immer nicht, warum jedas mal nach daumen hoch die seite neu geladen werden muss¡¿
    Dann mal im Eröffnungspost nachlesen...
    paddy-herrmy schrieb:
    Jetzt könnte ich das ohne Probleme mit PHP und ner mysql datenbank realisieren.. Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss.
    Ich hätte es aber gerne So, dass das nötige script im Hintergrund -->AJAX ausgeführt wird, und der Daumen in eine Datenbank eingetragen wird, ohne die Seite neu zu laden...
    Er möchte es also so, dass du auf Daumen hoch/runter drückst und er im Hintergrund das an den Server schickt, ohne die Seite dabei neu zu laden... und dafür braucht er AJAX.
  10. hackyourlife schrieb:
    hemiolos schrieb:
    und ich verstehe es noch immer nicht, warum jedas mal nach daumen hoch die seite neu geladen werden muss¡¿
    Dann mal im Eröffnungspost nachlesen...
    paddy-herrmy schrieb:
    Jetzt könnte ich das ohne Probleme mit PHP und ner mysql datenbank realisieren.. Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss.
    Ich hätte es aber gerne So, dass das nötige script im Hintergrund -->AJAX ausgeführt wird, und der Daumen in eine Datenbank eingetragen wird, ohne die Seite neu zu laden...
    Er möchte es also so, dass du auf Daumen hoch/runter drückst und er im Hintergrund das an den Server schickt, ohne die Seite dabei neu zu laden... und dafür braucht er AJAX.
    klar. jeder kann tun und lassen im netz was er will (bis auf ...). auf spatzen mit kanonen schießen oder was auch immer. man fragt nur, was mag dahinter der sinn sein¿

    zum schluss von mir: ich hätte ihn so zitiert:
    Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss.
    (und das fett gedruckt! weil es ja nicht stimmt. keine seite muss beim klick neu geladen werden. das bilden sich nur einige ein ;)
  11. kleines Beispiel Script mit 3 Dateien

    Datei1: vote_page.php = Seite, auf dem das Voting angeboten wird
    Datei2: vote_result.php = Include-Datei, auf dem das Voting ausgewertet wird
    Datei3: vote_data.txt = Datei, in der das Voting-Ergebnis gespeichert wird


    kann sicherlich noch optimiert werden, aber mal als Beispiel für die Funktionsweise
    ... anstatt in .txt könnte man die Ergebnisse auch in MySQL speichern
    ... das CSS-Style (und Javascript) könnte man auch noch in eigene Dateien "auslagern"
    ... etc.

    zudem sollte man noch eine IP-Sperre machen, um mehrfache Votes zu verhindern


    --------------------------------------------------------------------
    Datei1: vote_page.php

    <html>
    <head>
    <title>Abstimmung</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    
    
    <script type="text/javascript">
    function getVote(usrvote) {
    
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else { // code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      
    xmlhttp.onreadystatechange=function() { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
        document.getElementById("res_poll").innerHTML=xmlhttp.responseText;
        }
      }
    xmlhttp.open("GET","vote_result.php?vote="+usrvote,true);
    xmlhttp.send();
    }
    </script>
    
    <style type="text/css">
    <!--
    .vclick { 
      font-family: Arial, Helvetica, sans-serif; 
      font-size:14px; 
      float:left; 
      margin:2px 6px 2px 6px; 
      padding:4px; 
      cursor:pointer;
      border: 1px solid #AAAAAA;
    }
    
    .bg_green { background:#AAFFCC; }
    .bg_red { background:#FFCCCC; }
    
    -->
    </style>
    
    </head>
    <body>
    
    <p>--- <a href="vote_page.php">Abstimmung</a> --- </p>
    
    <p>&nbsp;</p>
    
    
    <div id="get_poll">
    <h3>Sagst Du Ja oder Nein ... ?</h3>
    <p class="vclick bg_green" onclick="getVote('a')" />JA - Daumen hoch</p>
    <p class="vclick bg_red" onclick="getVote('b')" />NEIN - Daumen runter</p>
    </div>
    
    <p style="clear:both;">&nbsp;</p>
    
    <div id="res_poll">
    <?php include_once('vote_result.php'); ?>
    </div>
    
    <p>&nbsp;</p>
    
    </body>
    </html>


    anstatt dem Link "JA - Daumen hoch" könnte man eine "Daumen hoch Grafik" als Link machen
    und für den Link "NEIN - Daumen runter" entsprechend andere Grafik
    die Styles in den <p> TAGs kann man anpassen


    --------------------------------------------------------------------
    Datei2: vote_result.php

    <?php 
    // -------------------------------------------- 
    
    if (!empty($_REQUEST['vote'])) { 
    $vote = $_REQUEST['vote'];
    }
    else { 
    $vote = ''; 
    }
    
    // -------------------------------------------- 
    
    $filename = "vote_data.txt";
    
    // -------------------------------------------- 
    
    
    // ---- Altes Ergebnis laden---- 
    
    $content = file_get_contents($filename);
    
    //put content in array
    $res_array = explode("|", $content);
    $res_a = $res_array[0];
    $res_b = $res_array[1];
    
    
    // ---- Neues Ergebnis berechnen ---- 
    
    if (!empty($vote)) { 
    
    if ($vote == 'a') {
    $res_a = $res_a + 1;
    }
    
    if ($vote == 'b') {
    $res_b = $res_b + 1;
    }
    
    // ---- Neues Ergebnis speichern ---- 
    
    $insertvote = $res_a."|".$res_b;
    $fp = fopen($filename,"w",0666);
    fputs($fp,$insertvote);
    fclose($fp);
    
    }
    
    
    // -------------------------------------------- 
    
    $gesamt_ab = ($res_b + $res_a); 
    $gesdif_ab = ($res_a - $res_b); 
    
    if (0 < $res_a) { 
    $percent_a = (100*round($res_a/$gesamt_ab,2));
    }
    else { 
    $percent_a = 0;
    }
    
    if (0 < $res_b) { 
    $percent_b = (100*round($res_b/$gesamt_ab,2));
    }
    else { 
    $percent_b = 0;
    }
    
    if (0 < $gesamt_ab) { 
    $rank_a_b = (100*round(($gesdif_ab/$gesamt_ab),2));
    }
    else { 
    $rank_a_b = $res_a; 
    }
    
    $width_a = ($percent_a * 2);
    $width_b = ($percent_b * 2);
    
    // -------------------------------------------- 
    ?>
    
    <h2>Ergebnis:</h2>
    <table width="400" cellpadding="2" cellspacing="2" border="0" bgcolor="#DEDEDE">
      <tr align="left" valign="top">
        <td width="45">Yes:</td>
        <td width="224"><img src="vote1.gif" width="<?php echo $width_a; ?>" height="20" /></td>
        <td width="58"><?php echo $percent_a.'%'; ?></td>
        <td width="71"><?php echo $res_a; ?></td>
      </tr>
      <tr align="left" valign="top">
        <td width="45">No:</td>
        <td width="224"><img src="vote2.gif" width="<?php echo $width_b; ?>" height="20" /></td>
        <td width="58"><?php echo $percent_b.'%'; ?></td>
        <td width="71"><?php echo $res_b; ?></td>
      </tr>
    </table> 
    
    <p>&nbsp;</p>
    
    <p><?php echo 'Stimmen Gesamt: ' . $gesamt_ab; ?></p>
    <p><?php echo 'Verh&auml;ltnis: ' . $res_a .' zu '. $res_b; ?></p>
    <p><?php echo 'Rank-Wert: ' . $rank_a_b; ?></p>
    
    <p>&nbsp;</p>


    Rank-Wert Berechnung, Ergebnis-Ausgabe und Art der Speicherung (z.B. MySQL)
    kann man ja nach Bedarf / Vorlieben ändern und anpassen ...


    --------------------------------------------------------------------
    Datei3: vote_data.txt

    0|0


    hier werden die Ergenisse der Abstimmung gespeichert,
    Alternative wäre Speichern in MySQL, dazu muss Datei2: vote_result.php angepasst werden



    Insgesamt ist das hier nur ein "kleines" Beispiel
    und wie gesagt, Optimierung geht noch einiges

    für Abstimmungen für jeden Kommentar müsste man in AJAX-Übergabe
    noch weitere Werte übergeben (ID vom Post/ Kommentar) und entprechend speichern
    entweder über $filename oder weitere Spalte(n) in MySQL
    damit man auch unterschiedliche Ergebnisse bekommt, je Kommentar / was auch immer

    auch sollte man Mehrfach-Abstimmungen durch IP-Sperre blocken
    aber das ist wieder ein anderes Thema, wäre zuviel für diesen Beitrag

    ich hoffe das hilft schonmal ein bischen weiter

  12. also ok, von mir aus halt ajax (aber noch immer mit unverständnis).
    oindex schrieb:
    ... Insgesamt ist das hier nur ein "kleines" Beispiel und wie gesagt, Optimierung geht noch einiges ...
    leider funktioniert nicht (link zum ansehen [kode unverändert])

    die nötige änderungen:
    1. vote_client.php (link zum testen)
    <?php
    error_reporting(E_ALL | E_STRICT);
    
    $self = basename(__FILE__);
    
    require_once './html.php';
    
    echo $html;


    2. html.php (html-site des clients)
    <?php
    require_once './ajax.php';
    require_once './css.php';
    
    $html = <<< EOT
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset=utf-8">
        <title>Abstimmung</title>
        <meta http-equiv="cache-control" content="no-cache" />
    
    $ajax
    
    $css
    
      </head>
    
      <body>
    
        <p>--- <a href="$self">Abstimmung</a> --- </p>
    
        <p>&nbsp;</p>
    
    
        <div id="get_poll">
          <h3>Sagst Du Ja oder Nein ... ?</h3>
          <p class="vclick bg_green" onclick="getVote('a')" />JA - Daumen hoch</p>
          <p class="vclick bg_red" onclick="getVote('b')" />NEIN - Daumen runter</p>
        </div>
    
        <p style="clear:both;">&nbsp;</p>
    
        <div id="res_poll">
        </div>
    
        <p>&nbsp;</p>
    
      </body>
    </html>
    EOT;


    3. ajax.php (hier ist einer der wesentlichen änderungen)
    <?php
    
    $ajax = <<< EOT
        <script type="text/javascript">
          function getVote(usrvote) {
    
            if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
              xmlhttp=new XMLHttpRequest();
            } else { // code for IE6, IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
    
            xmlhttp.onreadystatechange = function() {
              switch (xmlhttp.readyState) {
                case 4:
                  if (xmlhttp.status != 200) {
                    alert("Fehler:" + xmlhttp.status);
                  } else {
                    //alert(xmlhttp.responseText);
                    //schreibe die antwort in den div container mit der id 'res_poll'
                    var result = '<strong>' + xmlhttp.responseText + '</strong>';
                    document.getElementById('res_poll').innerHTML = result;
                  }
                  break;
             
                default:
                  return false;
                  break;
              }
            };
    
            xmlhttp.open("GET","http://hemiolos.lima-city.de/forum/paddy-herrmy/oindex_mod/vote_server.php?vote="+usrvote,true);
            xmlhttp.send();
            
            document.getElementById("res_poll").innerHTML=xmlhttp.responseText;
          }
        </script>
    EOT;


    4. css.php
    <?php
    
    $css = <<< EOT
        <style type="text/css">
        <!--
          .vclick {
            font-family: Arial, Helvetica, sans-serif;
            font-size:14px;
            float:left;
            margin:2px 6px 2px 6px;
            padding:4px;
            cursor:pointer;
            border: 1px solid #aaa;
          }
          .bg_green { background:#afc; }
          .bg_red { background:#fcc; }
        -->
        </style>
    EOT;


    5. vote_server.php
    <?php
    
    error_reporting(E_ALL | E_STRICT);
    
    $result = null;
    
    header('Expires: Thu, 19 Nov 1981 08:52:00 GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
    header('Pragma: no-cache');
    
    if(!empty($_REQUEST['vote'])) {
    
      $vote     = $_REQUEST['vote'];
      $filename = 'vote_data.txt';
    
      if(!is_file($filename)) {
    
        file_put_contents($filename, '0|0');
    
      }
    
      $content   = file_get_contents($filename);
      $res_array = explode('|', $content);
      $res_a     = trim($res_array[0]);
      $res_b     = trim($res_array[1]);
    
      if ($vote === 'a') {
    
        $res_a = $res_a + 1;
    
      }
    
      if ($vote === 'b') {
    
        $res_b = $res_b + 1;
    
      }
    
      file_put_contents($filename, "$res_a|$res_b");
    
    } else {
    
      $result = '<strong>no user input</strong>';
    
    }
    
    
    // ---- stat -------------------------------------------------------------------
    $gesamt_ab = ($res_b + $res_a);
    $gesdif_ab = ($res_a - $res_b);
    
    if (0 < $res_a) {
      $percent_a = (100*round($res_a/$gesamt_ab,2));
    } else {
      $percent_a = 0;
    }
    
    if (0 < $res_b) {
      $percent_b = (100*round($res_b/$gesamt_ab,2));
    } else {
      $percent_b = 0;
    }
    
    if (0 < $gesamt_ab) {
      $rank_a_b = (100*round(($gesdif_ab/$gesamt_ab),2));
    } else {
      $rank_a_b = $res_a;
    }
    // ---- END stat ---------------------------------------------------------------
    
    
    $width_a = ($percent_a * 2);
    $width_b = ($percent_b * 2);
    
    $result .= <<< EOT
          <h2>Ergebnis:</h2>
          <!-- table width="400" cellpadding="2" cellspacing="2" border="0" bgcolor="#eee" -->
          <table width="175" cellpadding="2" cellspacing="2" border="0" bgcolor="#eee">
            <tr align="left" valign="top">
              <td width="45">Yes:</td>
              <!-- td width="224"><img src="vote1.gif" width="$width_a" height="20" alias="yes" /></td -->
              <td width="58">$percent_a %</td>
              <td width="71">$res_a</td>
            </tr>
            <tr align="left" valign="top">
              <td width="45">No:</td>
              <!-- td width="224"><img src="vote2.gif" width="$width_b" height="20" alias="no" /></td -->
              <td width="58">$percent_b %</td>
              <td width="71">$res_b</td>
            </tr>
          </table>
    
          <p>&nbsp;</p>
    
          <p>Stimmen Gesamt: $gesamt_ab</p>
          <p>Verhältnis: $res_a zu $res_b</p>
          <p>Rank-Wert: $rank_a_b</p>
    
          <p>&nbsp;</p>
    
    EOT;
    
    
    exit(''.$result);

    vorsicht! in vote_server.php wird caching durch header(...)-s verhindert. daher wird das ergebnis am progende nicht mit echo/printf sondern mit exit(...) ausgegeben, sonst kommt der bekannte fehler!

    Beitrag zuletzt geändert: 2.5.2012 3:11:37 von hemiolos
  13. hemiolos schrieb:
    also ok, von mir aus halt ajax (aber noch immer mit unverständnis).
    oindex schrieb:
    ... Insgesamt ist das hier nur ein "kleines" Beispiel und wie gesagt, Optimierung geht noch einiges ...
    leider funktioniert nicht (link zum ansehen [kode unverändert])


    Hallo

    ich habe den Code von oindex auch mal ausprobiert,

    bei mir funktioniert der 1A ... Vote1 Test von oindex code unverändert

    ok, wenn man vergisst die Datei "vote_data.txt" anzulegen,
    dann kommt vor der ersten Abstimmung bei mir auch der Fehler wie bei Dir ... No such file or directory

    aber nach dem ersten Vote ist die Datei dann angelegt und es geht wunderbar
    ... hast Du in den Ordner bei Deinem Test evtl. keine Schreibrechte ?

    gut ist die Idee, die .txt Datei direkt per Script zu erstellen

    im Script von oindex dann bei "vote_result.php" einfügen

    den Teil:
    // -------------------------------------------- 
    
    $filename = "vote_data.txt";
    
    // --------------------------------------------


    ersetzen durch:

    // -------------------------------------------- 
    
    $filename = "vote_data.txt";
    
    // -------------------------------------------- 
    
      if(!file_exists($filename)) {
        file_put_contents($filename, '0|0');
      }
    
    // --------------------------------------------


    keine Ahnung was besser ist, file_exists() oder is_file() ... wird keinen Unterschied machen


    und bei dem Script von oindex sollte man dazu sagen,
    dass man zwei kleine Bilder braucht, um die Ergebnis-Balken anzuzeigen,

    Bild grün 10x10 Pixel - http://plugboard.lima-city.de/test/vote1/vote1.gif
    Bild rot 10x10 Pixel - http://plugboard.lima-city.de/test/vote1/vote2.gif

    wäre vielleicht geschickter, das mit DIVs und css: background-color zu machen


    bei dem Beispiel von hemiolos bekam ich zuerst einen JS Alert ... Fehler: 0 ...

    dann habe ich gesehen,
    dass Du in der "ajax.php" Deine http:// URL für GET eingetragen hast
    xmlhttp.open("GET","http://hemiolos.lima-city.de/forum/paddy-herrmy/oindex_mod/vote_server.php?vote="+usrvote,true);


    .... geht wohl bei anderen nicht mit http:// Adresse wegen Cross-Site-Scripting
    wenn ich den Pfad ändere, ohne die http:// URL (nur zur Datei), dann geht es

    xmlhttp.open("GET","vote_server.php?vote="+usrvote,true);


    ... siehe Vote 2 Test von hemiolos


    Frage:
    wenn man caching durch header(...) verhindert,
    was für ein (mir nicht bekanntes) Problem macht dann echo/printf ??

    habs ausprobiert in "vote_server.php" unten
    ## exit(''.$result);
    echo $result;

    und keinen Fehler gefunden ?!

  14. Autor dieses Themas

    paddy-herrmy

    Kostenloser Webspace von paddy-herrmy

    paddy-herrmy hat kostenlosen Webspace.

    Also erstmal:
    Vielen dank für eure zahlreiche Hilfe:-D
    Ihr habt mir wirklich sehr geholfen..

    Das Beispiel von oindex scheint mir am ausgereiftesten, darum werde ich darauf aufbauen..
    @hemiolos
    Ich weiss nicht, wie ich dir noch erklären soll, warum ich das so besser finde...
    Deine checkbox-variante is ja ganz nett, aber ich finde das ganze nunmal nicht so elegant..

    nehmen wir als Beispiel doch einfach mal YT wäre doch absolut unpraktisch, wenn die seite neu gelden wird, nachdem du einem Video ein daumen hoch vergibst...

    Oder der Google+Button, oder der Like-Button von FB...

    Es ist meiner Meinung nach einfach eleganter und schöner, wenn das ganze im Hintergrund bearbeitet wird..
    Und um den MySQL-Server mach dir mal keine sorgen^^ bei den 50 Besuchern pro tag, wird der nicht zu sehr belastet^^
  15. Hallo

    hier nochmal eine verbesserte Version der Datei vote_result.php

    anstatt der Bilder für die Balken werden jetzt (mit Farbe gefüllte) DIVs verwendet.

    <?php 
    // -------------------------------------------- 
    
    if (!empty($_REQUEST['vote'])) { 
    $vote = $_REQUEST['vote'];
    }
    else { 
    $vote = ''; 
    }
    
    // -------------------------------------------- 
    
    $filename = "vote_data.txt";
    
    // -------------------------------------------- 
    
      if(!file_exists($filename)) {
      	touch($filename,0666); 
        file_put_contents($filename, '0|0');
      }
    
    // -------------------------------------------- 
    
    
    // ---- Altes Ergebnis laden---- 
    
    $content = file_get_contents($filename);
    
    //put content in array
    $res_array = explode("|", $content);
    $res_a = $res_array[0];
    $res_b = $res_array[1];
    
    
    // ---- Neues Ergebnis berechnen ---- 
    
    if (!empty($vote)) { 
    
    if ($vote == 'a') {
    $res_a = $res_a + 1;
    }
    
    if ($vote == 'b') {
    $res_b = $res_b + 1;
    }
    
    // ---- Neues Ergebnis speichern ---- 
    
    $insertvote = $res_a."|".$res_b;
    
    $fp = fopen($filename,"w",0666);
    fputs($fp,$insertvote);
    fclose($fp);
    
    
    }
    
    
    // -------------------------------------------- 
    
    $gesamt_ab = ($res_b + $res_a); 
    $gesdif_ab = ($res_a - $res_b); 
    
    
    // ---- Prozente berechnen ---- 
    
    if (0 < $res_a) { 	$percent_a = (100*round($res_a/$gesamt_ab,2));	}
    		   else { 	 $percent_a = 0;	}
    
    if (0 < $res_b) { 	$percent_b = (100*round($res_b/$gesamt_ab,2));	}
    		   else { 	 $percent_b = 0;	}
    
    
    // ---- Rank-Wert berechnen ---- 
    
    if (0 < $gesamt_ab) { 	$rank_a_b = (100*round(($gesdif_ab/$gesamt_ab),2)); 	}
    			   else { 	 $rank_a_b = $res_a; 	}
    
    
    // ---- Balken Breite (Prozent mal 2) ---- 
    
    $width_a = ($percent_a * 2);
    $width_b = ($percent_b * 2);
    
    
    // ---- Balken DIVs HTML ---- 
    
    $votediv_a = '<div style="margin:2px 0px; padding:0px; width:'.$width_a.'px; height:16px; background:#00CC33;"></div>';
    $votediv_b = '<div style="margin:2px 0px; padding:0px; width:'.$width_b.'px; height:16px; background:#CC0033;"></div>';
    
    
    // -------------------------------------------- 
    
    
    $ergebnis = '
    
    <h2>Ergebnis:</h2>
    
    <table width="410" cellpadding="2" cellspacing="0" border="0">
    
      <tr align="left" valign="top">
        <td width="45">&nbsp;</td>
        <td>&nbsp;</td>
        <td width="65"><small>Prozent</small></td>
        <td width="65"><small>Stimmen</small></td>
      </tr>
      
      <tr align="left" valign="top" bgcolor="#CCCCCC">
        <td width="45">Yes:</td>
        <td>'.$votediv_a.'</td>
        <td width="65">'.$percent_a.'%</td>
        <td width="65">'.$res_a.'</td>
      </tr>
      
      <tr align="left" valign="top" bgcolor="#CCCCCC">
        <td width="45">No:</td>
        <td>'.$votediv_b.'</td>
        <td width="65">'.$percent_b.'%</td>
        <td width="65">'.$res_b.'</td>
      </tr>
      
    </table> 
    
    <p>&nbsp;</p>
    
    <p>Stimmen Gesamt: '.$gesamt_ab.'</p>
    <p>Verh&auml;ltnis: '.$res_a.' zu '.$res_b.'</p>
    <p>Rank-Wert: '.$rank_a_b.'</p>
    
    <p>&nbsp;</p>
    ';
    
    
    // -------------------------------------------- 
    
    echo $ergebnis;
    
    // -------------------------------------------- 
    ?>


    aber nochmal der Hinweis,
    dass man die Erebnisse (Zahlen / Daten) besser in MySQL speichern sollte
    denn das Speichern in .txt kann (bei gleichzeizigem Zugriff) zum Crash führen,
    ... und das kann auch schon bei 50 Besuchern pro Tag passieren ....

  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!