Problem mit css Rating

[quote=“hoffmann”]Eine Datei, wo die Anzahl und der Durchschnitt drinsteht?

Jeweils eine anzulegen, ist da vermutlich die einfachste
Möglichkeit. [/quote]

Das meinte ich.
Das o. g. Beispiel heisst rater1.php
Für ein zweites Spiel erstelle ich also rater2.php, für ein drittes Spiel rater3.php usw.
Und man sieht ja die Anzahl der Bewertungen, die dann durch die Sterne angezeigt wird, z.B. 4,5 nach 3 Stimmen.

Die PHP-Datei ist ja eher jene, welche die Formulardaten
auswertet, nich wo die Daten abgespeichert werden.
Da ist es eher günstiger, du sendest bei dem Formular einen
verdeckten Parameter mit, der identifiziert, um welche
Abstimmung es sich handelt, wertest den Parameter im Skript
aus und speicherst dann jeweils nur in einer anderen Datei,
welche dem Identifizierungsparameter eindeutig zugeordnet ist.

Weitere PHP-Skripte sind mit der kleinen Modifikation also
überflüssig. Machst du das dennoch, müßtest du ohnehin drauf
achten, daß die den Kram in jeweils anders benannte Dateien
speichern, sonst bringen die verschiedenen Skripte gar nichts ;o)

Ansonsten, die Anzahl der Bewertungen ist schon eine gute und
relevante Information.
Wie bereits anderweitig erläutert, wenn nun ein
Abstimmungsobjekt oder -autor kritiklose Fans und gnadenlose
Gegner hat, bekommt man nur die höchste und niedrigste
Wertung, sieht das aber nicht am Mittelwert. Bei so einem
Abstimmungsverhalten sagt der Mittelwert also wenig darüber
aus, was die Leute über das Abstimmungsobjekt wirklich denken.
Deswegen lohnt es sich immer, die Verteilung anzugucken oder
mindestens die Standardabweichung.
In der Physik ist ein Meßwert ohne Angabe der
Standardabweichung (des Fehlers) sogar ziemlich bedeutungslos,
weil man den Meßwert nicht einordnen kann - man kann so einen
Meßwert auch als eine Bewertung auffassen, die Messung stimmt
quasi darüber ab, wie groß die Meßgröße ist. Der Mittelwert über
viele Messungen sagt nicht mehr aus als eine einzige Messung.
Mit Verteilungsfunktion oder Standardabweichung hingegen weiß
man, was der Mittelwert wert ist ;o)

Im Beispiel wird eine Rating-Datei erwähnt:

http://gr0w.com/articles/code/php_5_star_rating_system_using_hreview/index.php

Ich vermute mal, das, was unter //Output angegeben ist, kommt in die einzelnen Rating-Dateien, die hier Item1, Item2 usw. heissen.

Zum Einbiden steht dort dieses:

<? $rater_id=1; $rater_item_name='Item 1'; include("rater.php"); ?>

Ich versuche gerade, das hinzukriegen. Meine rater.php heisst ja rater1.php, aber der Pfad wird nicht erkannt, bei mir erscheint gar nichts.

Der verdeckte Parameter ist da schon eingebaut, meine ich
auf die Kürze verstanden zu haben, das wird dort als $rater_id
verwendet, das muß man gegebenenfalls konkret setzen, wenn
man das Formular ausgibt.
Wenn man das Skript also per include in eine andere Datei
einbindet, sollte man in der anderen Datei diesen Parameter
einfach zuvor auf den gewünschten Wert (eine Zahl wohl am
besten) setzen können.

Also konkret für eine zweite Abstimmung:

<?php
$rater_id=2;
$rater_item_name='Item 2';
include("rater.php");
?>

Hier ist die komplette rater1.php:

<? // User settings $rater_ip_voting_restriction = true; // restrict ip address voting (true or false) $rater_ip_vote_qty=1; // how many times an ip address can vote $rater_bereits_bewertet_msg="Bereits bewertet "; $rater_not_selected_msg="Nichts ausgewählt."; $rater_danke_msg="Danke"; $rater_generic_text=""; // generic item text $rater_end_of_line_char="\n"; // may want to change for different operating systems if(!isset($rater_id)) $rater_id=1; if(!isset($rater_item_name)) $rater_item_name=$rater_generic_text; // DO NOT MODIFY BELOW THIS LINE $rater_filename='item_'.$rater_id.".rating"; $rater_rating=0; $rater_stars=""; $rater_stars_txt=""; $rater_rating=0; $rater_votes=0; $rater_msg=""; // Rating action if(isset($_REQUEST["rate".$rater_id])){ if(isset($_REQUEST["rating_".$rater_id])){ while(list($key,$val)=each($_REQUEST["rating_".$rater_id])){ $rater_rating=$val; } $rater_ip = getenv("REMOTE_ADDR"); $rater_file=fopen($rater_filename,"a+"); $rater_str=""; $rater_str = rtrim(fread($rater_file, 1024*8),$rater_end_of_line_char); if($rater_str!=""){ if($rater_ip_voting_restriction){ $rater_data=explode($rater_end_of_line_char,$rater_str); $rater_ip_vote_count=0; foreach($rater_data as $d){ $rater_tmp=explode("|",$d); $rater_oldip=str_replace($rater_end_of_line_char,"",$rater_tmp[1]); if($rater_ip==$rater_oldip){ $rater_ip_vote_count++; } } if($rater_ip_vote_count > ($rater_ip_vote_qty - 1)){ $rater_msg=$rater_bereits_bewertet_msg; }else{ fwrite($rater_file,$rater_rating."|".$rater_ip.$rater_end_of_line_char); $rater_msg=$rater_danke_msg; } }else{ fwrite($rater_file,$rater_rating."|".$rater_ip.$rater_end_of_line_char); $rater_msg=$rater_danke_msg; } }else{ fwrite($rater_file,$rater_rating."|".$rater_ip.$rater_end_of_line_char); $rater_msg=$rater_danke_msg; } fclose($rater_file); }else{ $rater_msg=$rater_not_selected_msg; } } // Get current rating if(is_file($rater_filename)){ $rater_file=fopen($rater_filename,"r"); $rater_str=""; $rater_str = fread($rater_file, 1024*8); if($rater_str!=""){ $rater_data=explode($rater_end_of_line_char,$rater_str); $rater_votes=count($rater_data)-1; $rater_sum=0; foreach($rater_data as $d){ $d=explode("|",$d); $rater_sum+=$d[0]; } $rater_rating=number_format(($rater_sum/$rater_votes), 2, '.', ''); } fclose($rater_file); }else{ $rater_file=fopen($rater_filename,"w"); fclose($rater_file); } // Assign star image if ($rater_rating <= 0 ){$rater_stars = "./00star1.gif";$rater_stars_txt="Not Rated";} if ($rater_rating >= 0.5){$rater_stars = "./05star1.gif";$rater_stars_txt="0.5";} if ($rater_rating >= 1 ){$rater_stars = "./1star1.gif";$rater_stars_txt="1";} if ($rater_rating >= 1.5){$rater_stars = "./15star1.gif";$rater_stars_txt="1.5";} if ($rater_rating >= 2 ){$rater_stars = "./2star1.gif";$rater_stars_txt="2";} if ($rater_rating >= 2.5){$rater_stars = "./25star1.gif";$rater_stars_txt="2.5";} if ($rater_rating >= 3 ){$rater_stars = "./3star1.gif";$rater_stars_txt="3";} if ($rater_rating >= 3.5){$rater_stars = "./35star1.gif";$rater_stars_txt="3.5";} if ($rater_rating >= 4 ){$rater_stars = "./4star1.gif";$rater_stars_txt="4";} if ($rater_rating >= 4.5){$rater_stars = "./45star1.gif";$rater_stars_txt="4.5";} if ($rater_rating >= 5 ){$rater_stars = "./5star1.gif";$rater_stars_txt="5";} // Output echo '
'; echo ''; echo '

'.$rater_item_name.'

'; echo '
'; echo ''.$rater_stars_txt.' stars '.$rater_stars_txt.'nach '.$rater_votes.' Stimmen.'; echo '
'; echo '
'; echo '1'; echo '2'; echo '3'; echo '4'; echo '5'; echo ''; echo ''; echo '
'; if($rater_msg!="") echo "
".$rater_msg."
"; echo ''; echo '
'; ?>

So müsste ich also unter //Output überall als id item1 setzen.
Ich verstehe doch richtig, dass alles unter //Output in die Rating Datei kommt?

Warum nennst du das überhaupt um?
Die von mir angegebene Änderung der einen Zahl sollte doch
reichen.

Wenn du das wirklich in der Datei festlegen willst, sollte es
reichen, oben unter ‘// User settings’
$rater_id=2; anzugeben oder eben eine andere Zahl für eine
andere Abstimmung.

In dem Skript steht ja auch extra:
’// DO NOT MODIFY BELOW THIS LINE’
daran hält mann/frau sich besser, solange man das Skript nicht
komplett verstanden hat ;o)

[quote=“hoffmann”]Warum nennst du das überhaupt um?
Die von mir angegebene Änderung der einen Zahl sollte doch
reichen.
[/quote]

Ich will gar nichts umändern, aber ich dachte, es müsste was geändert werden, deshalb habe ich zum besseren Verständnis (und weil das Einbinden bei mir nicht klappte, es kamen Fehlermeldungen) das komplette Script hier noch mal aufgeführt.
Doch jetzt scheint es endlich zu funktionieren.
Ich habe eine Datei erstellt (item7)
mit deinen Angaben:

<? $rater_id=7; $rater_item_name='item7'; include(".//rater1.php"); ?>

Das ist das Ergebnis:

Ich glaube, jetzt funktioniert es endlich richtig.
Nun kann ich jeweils eine Datei für jedes Spiel erstellen.

So, alles funktioniert ja nun.
Aber das Problem ist das Einbinden.
Wenn man auf meiner Seite die Bewertung anklickt, wird die Seite gewechselt.
Ich habe schon versucht, den Pfad zu ändern, aber es kommen immer Fehlermeldungen.
Aber der Seitenwechsel ist auch nicht Sinn der Sache.
Ich habe schon gegoogelt, aber auch dort zum Einbinden nur

<?php include("view.php"); ?>

gefunden.
Langsam sehe ich wohl den Wald vor lauter Bäumen nicht mehr…

So, ich habe weiter recherchiert und festgestellt, dass es ein Problem sein kann, php in html-Seiten einzubinden.
In der Anleitung steht auch, dass man den Code in jede php-Seite einbinden kann, doch ich habe nur html-Seiten…
Das einzige, was mir spontan einfällt wäre, die einzelnen Bewertungen für die Spiele in i-Frames einzubinden.

Wenn du aktuell eine Seite hast, die beispiel.html heißt, so
nennst du sie um in beispiel.php (und entsprechend auch alle
Verweise auf die Seite natürlich).

Das Skript ist so gebastelt, daß das Absenden des Formulars
auf die Seite zurückführt, wo das Skript samt Formular
eingebunden ist.
Wenn du das anders brauchst, so müßtest du genau angeben,
welche Zielseite da erscheinen soll. Das kann man dann in der
Tat umbauen. Die Zielseite ist wieder eine Datei, die auf '.php’
endet und das Skript zur Auswertung beinhaltet.

Genau das ist das Problem, meine Seiten heissen alle …html und ich möchte sie ungern umbenennen, da ich bei meiner Suchaktion entdeckt habe, das Endungen auf…php weniger suchmaschinenfreundlich sind.
Also wollte ich es so belassen, aber die aktuelle Seite soll nicht verlassen werden, wenn jemand ein Spiel bewertet.
Wie weiter oben schon erwähnt, fällt mir da nur das Einbinden per i-frame ein.
Ich denke mal, das ist nicht die beste Lösung?

Wer behauptet, daß die Suchmaschinenfreundlichkeit von der
Dateiendung abhängt?
Den Robotern der Suchmaschinen ist die Dateiendung egal,
Hauptsache da kommt Inhalt in einem ihnen bekannten Format
raus.

Was suboptimal sein kann, ist wenn man GET-Parameter hinten
dranhängt. Machen inzwischen aber sehr viele Leute und die
Roboter indexieren sowas auch, mag ja sein, daß sie das vor
zehn Jahren noch nicht getan haben, weil das eigentlich
gefälschte Formularübermittlungen sind - hat sich mittlerweile
aber in der Form etabliert, um PHP-Projekte zu betreiben. Man
kann es bei einfachen Projekten indes auch anders machen,
ohne GET-Parameter oder mit gewissen Einschränkungen kann
man die auch vor den Robotern verstecken (per .htaccess).
Deine Bewertung wird aber per POST gesendet, dem folgt sowieso
kein anständiger Roboter und es gibt keine GET-Parameter.

Wenn die URIs deiner Seiten bereits weitbekannt sind, so kann
eine Umbenennung auch unschön sein. Nur in dem Falle kann
man auch sinnvoll ebenfalls per .htacess angeben, daß auch
Dateien mit der Endung .html wie solche mit der Endung .php
interpretiert werden sollen. Sollte man sich aber sorgsam
überlegen, ob das wirklich Not tut, in den allermeisten Fällen
nicht.

Ich habe meine Seite(n) in Suchmaschinen als …html angemeldet, ebenso bin ich auf anderen Seiten als Partnerseite eingetragen, natürlich ebenfalls per…html.
Das würde bedeuten, ich müsste alles auf …php umändern, richtig?
Ach ja, meine Suchmaschine auf der Seite läuft auch per php, und das funktioniert, wird per Javascript ausgegeben, wenn ich das richtig gesehen habe.

Hast du bei den anderen Seiten wirklich auch jene angegeben,
wo du dieses Bewertungssystem verwenden willst oder nur
die Startseite? (letzteres ist ja normal). Wenn die Startseite mit
einem Seitenindex unverändert bleibt (oft gibt man da ja
sowieso nur die URI vom Verzeichnis an), sollten die Roboter
von Suchmaschinen wie Goggle eigentlich schnell mitbekommen,
daß sich was verändert hat. Notfalls kann man da auch eine
Weiterleitung mit einem Hinweis (permanent verzogen) mit
der aktuellen Adresse ausliefern lassen.

Wenn du wirklich die Dateien mit der Endung .html durch den
PHP-parser jagen willst (ist nicht meine Empfehlung …), so
schreibt man folgendes in die Datei .htaccess, die man in das
Verzeichnis legt, für welches samt Unterverzeichnis dies gelten
soll:

AddType application/x-httpd-php .php .html

Damit wird der PHP-parser auf Dateien mit der Endung .php und
.html angewendet, bei Bedarf kann man da noch andere
mit Leerzeichen separiert anhängen.

Weiterleitungen mit Hinweis permanent verzogen, ich weiss nicht, ob das so gut wäre…
Es gibt also zwei Möglichkeiten:

  1. Alles in php umändern

  2. Per AddType application/x-httpd-php .php .html

Was bedeutet das /x?
Muss dort der Link meiner Bewertung rein?

Entschuldigung, ich bin gerade etwas von der Rolle.

[quote=“Engel”]AddType application/x-httpd-php .php .html

Was bedeutet das /x?[/quote]
Das ist ein alleinstehendes x, sondern x-httpd-php - ein für PHP festgelegter, aber inoffizieller (deswegen mit x- beginnender) Mime-Type.

Nein, gar nichts weiter.

Das weist nur den Server an, mit .php und mit .html endende Dokumente durch den PHP-Parser zu schicken - so dass PHP-Code auch in Dateien mit Endung .html auasgeführt wird.

Also müsste AddType application/x-httpd-php .php .html in dieser Form eingebaut werden, ohne jede Veränderung.
Wenn ich das richtig verstanden habe, müsste dieser Code vor meinem eigentlichen Code stehen, damit bei der Bewertung eines Spiels der Besucher nicht
weitergeleitet wird.

Nein, das ist eine Konfigurationsanweisung für den Apache-Webserver, und gehört in eine .htaccess-Datei in dem Verzeichnis, in dem das ganze wirksam sein soll.

Um noch mal den Sinn des Spielchens in Erinnerung zu rufen:

Du möchtest in irgendeiner HTML-Datei ein PHP-Skript von
zum Beispiel folgender Form notieren und dann vom server
ausgeführt haben:

<?php
$rater_id=2;
$rater_item_name='Item 2';
include("rater.php");
?>

Damit der server dies zur Kenntnis nimmt, legt man in dem
Verzeichnis, wo diese Datei drinsteht eine Datei namens
’.htaccess’ an in der steht (möglicherweise neben anderen
Dingen) in einer separaten Zeile:

AddType application/x-httpd-php .php .html

Wenn nun eine Datei mit einer solchen Endung angefordert
wird, veranlaßt dies den server dazu, diese Datei nicht direkt
auszuliefern (was er sonst täte bei einer Endung .html), sondern
vielmehr wird die Datei von einem sogenannten PHP-parser
interpretiert, der erkennt obiges Segment und interpretiert es
und bindet so dieses Bewertungssystem an der Stelle ein,
wonach dann der server das Resultat dieser Interpretation
statt des angeforderten Dokumentes ausliefert, mit dem
Ergebnis, daß plötzlich (naja … :o) in deiner HTML-Datei ein
funktionierendes Bewertungssystem erscheint.

Hallo,

danke für deine Geduld, aber der Anfang ist wohl immer besonders schwer.
Ich habe versucht zu testen, ob ich es nun endlich begriffen habe, aber im Moment kann ich mal wieder nichts hochladen. :cry:
Die Datei ist angelegt und im richtigen Verzeichnis, nun bin ich gespannt.