Allora... puoi creare tre files in cui ogni riga rappresenta un record fatto in questo modo:
oggetti.txt
id:Nome dell'oggetto
quesiti.txt
id:Quesito o caratteristica
voti.txt
id_oggetto:id_quesito:media:n_voti
A questo punto, puoi utilizzare questo codice (da mettere per esempio in un file "funzioni_voti.php") per leggere o scrivere sul "database":
Codice PHP:
$objects_file = "oggetti.txt";
$questions_file = "quesiti.txt";
$votes_file = "voti.txt";
function ReadObjects () {
global $objects_file;
$oggetti = file ($objects_file);
$result = array ();
for ($i=0;$i<count($oggetti);$i++) {
if ($oggetti[$i] == "") continue;
$oggetti[$i] = explode (":", $oggetti[$i]);
$result[] = array ("id" => $oggetti[$i][0], "name" => $oggetti[$i][1]);
}
return $result;
}
function ReadQuestions () {
global $questions_file;
$domande = file ($questions_file);
$result = array ();
for ($i=0;$i<count($domande);$i++) {
if ($domande[$i] == "") continue;
$domande[$i] = explode (":", $domande[$i]);
$result[] = array ("id" => $domande[$i][0], "question" => $domande[$i][1]);
}
return $result;
}
function ReadVotes () {
global $votes_file;
$voti = file ($votes_file);
$result = array ();
for ($i=0;$i<count($voti);$i++) {
if ($voti[$i] == "") continue;
$voti[$i] = explode (":", $voti[$i]);
$result[] = array ("object_id" => $voti[$i][0], "question_id" => $voti[$i][1], "media" => $voti[$i][2], "n_voti" => $voti[$i][3]);
}
return $result;
}
function VotesPerObject ($object_id) {
global $votes_file;
$domande = ReadQuestions();
$oggetti = ReadObjects();
$voti = ReadVotes();
$result = array ();
// Cerco il nome dell'oggetto
for ($i=0;$i<count($oggetti);$i++) {
if ($oggetti[$i]["id"] == $object_id) {
$result["oggetto"] = $oggetti[$i]["name"];
break;
}
}
$result["questions"] = array();
for ($i=0;$i<count($voti);$i++) {
if ($voti[$i]["object_id"] == $object_id) {
for ($j=0;$j<count($domamde);$j++) {
if ($domande[$j]["id"] == $voti[$i]["question_id"]) {
$result["questions"][] = array ("domanda" => $domande[$j]["$question"], "id" => $domande[$j]["id"], "media" => $voti[$i]["media"], "n_voti" => $voti[$i]["n_voti"]);
break;
}
}
}
}
return $result;
}
function AddVote ($object_id, $question_id, $voto) {
global $votes_file;
$voti = ReadVotes ();
for ($i=0;$i<count($voti);$i++) {
if ($voti[$i]["object_id"] == $object_id && $voti[$i]["question_id"] == $question_id) {
$totale = $voti[$i]["media"] * $voti[$i]["n_voti"];
$totale += $voto;
$voti[$i]["media"] = $totale / (++$voti[$i]["n_voti"]);
break;
}
}
if ($i == count($voti)) {
$voti[] = array ("question_id" => $question_id, "object_id" => $object_id, "media" => $voto, "n_voti" = 1);
}
$stream = fopen ($votes_file, "w");
if ($stream == false) die ("Impossibile aprire il file $votes_file in scrittura");
for ($i=0;$i<count($voti);$i++) {
fwrite ($stream, $voti[$i]["object_id"].":".$voti[$i]["question_id"].":".$voti[$i]["media"].":".$voti[$i]["n_voti"]);
}
fclose ($stream);
}
Ok, con questo potrai inserire dei quesiti nel file apposito come indicato prima, che potrai richiamare per ogni oggetto... gli oggetti vanno nel loro file e il file dei voti dovresti lasciarlo vuoto inizialmente. Puoi utilizzare la funzione ReadObjects() per ricavare l'elenco degli oggetti in un array di array associativo disponibili nel formato:
"id" => id dell'oggetto
"name" => nome dell'oggetto
cioè, puoi estrarli in questo modo:
$oggetti = ReadObjects();
for (...) {
$nome = $oggetti[$i]["name"];
$id = $oggetti[$i]["id"];
}
dove $i è l'indice dell'elemento (che però non conta nulla). Puoi poi leggere le domande nello stesso modo, sostituendo a "name", "question". Poi puoi leggere i voti di un oggetto con la funzione VotesPerObject a cui devi passare come parametro l'id dell'oggetto. Questa funzione restituisce il seguente array:
array (
"oggetto" => "Nome dell'oggetto",
"questions" => array (
0 => array (
"domanda" => "Testo del quesito",
"id" => ID del quesito,
"media" => La media dei voti,
"n_voti" => Numero dei voti per questo quesito
),
1 => stessa cosa di 0, per tutti i quesiti inseriti nel file
)
);
Infine, puoi utilizzare la funzione AddVote ($object_id, $question_id, $voto) che ti permette di aggiungere un voto per il quesito con id $question_id all'oggetto con id $object_id.
Questo è tutto, spero che funzioni perchè non l'ho testato, ma dovrebbe andare... hai tutto ciò che ti serve per costruirti il sistema di voti... fammi sapere se va, in bocca al lupo, ciao :-D