PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Bewerung gut/schlecht für Artikel (http://www.selfphp.de/forum/showthread.php?t=1894)

kogi1 07.08.2002 10:53:29

Bewerung gut/schlecht für Artikel
 
Tja, bin immer noch Laie im Umgang mit PHP.

Habe einen Onlineshop mit ca. 1500 Artikeln.
Jeder Artikel wird dynamisch angezeigt (aus einer Datenbank gelesen).
Möchte nun ein Script einbauen, das jeden Artikel Bewerten läst.

Das Ergebnis soll in Form einer Sternreihe angezeigt werden !
* schlecht
** besser
***** am Besten

Problem:
Aufgrund des Aufbaus der Artikelausgabe muss ich einen Einheitlichen Code für alle Artikel haben.

Artikel positiv Bewerten: votepositiv.php?[NR]
Artikel negativ Bewerten: votenegativ.php?[NR]
Wobei vom Shop aus immer die entsprechende Artikelnummer ergänzt wird !

Das Ergebnis soll unter jedem Artikel per include-Befehl angezeigt werden und in einer text-Datei (kein mysql) gespeichert werden !

Ist sowas möglich ?
Wie sieht der Lösungsansatz dafür aus ?

Ben20 07.08.2002 11:40:18

Natürlich ist sowas möglich. Ich liefer erstmal einen Lösungsansatz. Poste falls Du quelltextnähere Hilfe brauchst.

Zuerst mußt Du dem User ermöglichen über ein Formular den Artikel zu bewerten. Z.B. mit einem Radiobutton oder einem Dropdownlistenfeld.


im Antwortscript öffenst Du zuerst die "Bewertungsdatei" des Artikels. Z.B. [nr].txt

In der Datei sollte drin stehen, viele Sternchen der Artikel hat und wieviele User schon gevotet haben (letztes ist nötig um herauszufinden, wieviel Einfluß die neue Bewertung auf das Gesamtergebniss hat.

Dann teilst Du die Anzahl der vom Besucher gevoteten Sternchen durch die Anzahl der Stimmen. (ich nenne das Ergebniss jetzt mal $erg)

Wenn die Anzahl der Sternchen die der Besucher vergeben hat größer ist als die vorhandenen Sternchen zählst Du $erg zu den vorhanden Sternchen dazu, ansonsten ziehst Du's ab.

Jetzt das Ganze mathematischer:

v = Anzahl der Besucher die diesen Artikel bewertet haben.
x = Anzahl der Sternchen die der Besucher vergeben hat.
z = Anzahl der Sternchen die der Artikel schon hat.

t = x / v

Wenn
v > z dann z = z + t
sonst
z = z - t



Ich hoffe mein Ansatz ist trotz der Theorie verständlich (und logisch richtig ;-) )


edit:

Da fällt mir ein da ist noch ein Fehler drin. Bei jedem abstimmen mußt nicht die "Anzahl der Besucher" sondern die "Anzahl der Besucher + 1" verwenden. Sonst erhälst Du beim ersten besucher eine Divison durch null und die Stimme des Zweiten hätte soviel Gewicht wie wenn keiner gevotet hätte usw.

Außerdem mußt Du hinterher natürlich wieder alles in die Datei speichern, aber das war ja sowieso klar


kogi1 07.08.2002 12:38:58

Gut aber ?
 
sieht gut aus, was Du da schreibtst !
Aber das bedeutet auch, dass ich 1500 nr.txt Dateien anlegen muss !
Oder würden diese Dateien sich selbst erstellen, wenn ich einen Ordner mit CHMOD 777 bereit stelle ?

Leider habe ich, wie gesagt noch kaum Erfahrung im Erstellen von Scripten und kann nur vorhandene etwas durchschauen und evt. umbauen !

Es gibt ja zahlreiche Counter und Bewertungs-Scripts die man sich hier und da runter laden kann, aber die treffen leider alle nicht das, was ich will und erfordern meisten pro Artikel ein eigenes Script das wiederum 1500x anlegen ?

Ben20 07.08.2002 17:27:59

Wenn Du eine Datei zum Schreiben aufmachst, die nicht vorhanden ist, legt er automatisch eine neue an. Du mußt nur noch dafür sorgen, dass die Anfangswerte eingerichtet werden.

Matt 07.08.2002 18:11:47

bringt doch nichts...
du hast eine artikelnr, oder?
mach EINE datei, öffne sie in einem schreibmodus, der am ende der datei weiterschreibt, und füge dann immer nach schema:
artikelnr;bewertung werte hinzu, dass das ganze so aussieht:

Code:

2231;2
234;4
91;5
...

jetzt kannst du dann ein php script schreiben, welches die dinger der reihe nach einliest und alle mit der gleichen artikelnummer zusammenzählt, und durch die anzahl der gesamten bewertungen zu dem artikel dividiert. Dann hast du eine durchschnittsbewertung, wenn du nur selbst die bewertung machen willst, brauchst du dasselbe, nur ohne durchschnittsbildung.
du musst dann allerdings eine datei includieren und eine funktion aufrufen, der du sagst, was du willst...

Ben20 07.08.2002 18:22:46

Ich würde für jeden Artikel 1 Datei öffnen. bei 1500 Artikel kann es leicht passieren das die Datei sonst zweimal geöffnet wird und da kann's zu Problemen kommen (z.B. wird eine Bewertung nicht gezählt).

kogi1 07.08.2002 22:17:28

JA ABER
 
Das mit dem gleichzeitigen Zugriff bei nur 1. Datei habe ich befürchtet.
Jedoch bin ich immer noch nicht weiter was das konkrete Script angeht !

Wie lege ich automatisch (falls zum 1. mal bewertet wird) eine entsprechende Datei an ?

Wie greife ich drauf zu ?
usw.

Matt 08.08.2002 11:01:11

das ganze ist recht unrealistisch, vor allem kannst du die datei mit einem schreibschutz versehen, flock() beispielsweise, und dann überprüfen, ob die datei geschützt ist, wenn ja, nochmals überprüfen, bis sie frei ist, und dann selbst öffnen und schützen..
nur als so ne idee, ausserdem verliert man bei 1500 Dateien schnell den überblick und sie erzeugen einen gigantischen overhead.

bLizZ@WORK 08.08.2002 11:10:54

Die Datei wird automatisch vom fopen() angelegt, wenn Sie nicht existiert.


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:02:08 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.