Bewertungssystem umsetzten, aber wie?

Richtig, ich habe dort nur das Formular gepostet um es zu verdeutlichen was gemeint ist...

So ich könnte natürlich ein 30000 Zeiliges Javascript hinpacken was die Radiobuttons DIsabled...

Aber sowas muss man doch auch Dynamischer hinbekommen per Schleifen etc..
Ich hätte dafür gerne ein kompaktes Script was die Funktion hat, die oben am Anfang beschrieben wurde...

Jedes mal ne If abfrage für jeden einzelnen Radiobutton scheint mir doch ein wenig "dumm..."
 
Wozu 30000 Zeilen?

Du musst ja nur 2 Sachen sicherstellen:
1. Das pro Foto nur 1 Bewertung abgegeben wird
2. Das jede Bewertung nur 1x abgegeben wird.

Eines davon kannst du HTML erledigen lassen über die Benennung der Buttons, das andere per JS.

Bsp.:
Code:
<?php
  if(isset($_POST['rank'])){ksort($_POST['rank']);echo '<pre>'.print_r($_POST['rank'],true).'</pre>';}
?>

<form action="javascript:senden()" method="post" name="bewertung">

<table border="1" >
  <thead>
    <tr>
      <th colspan="4">Bewertung <noscript><br />nur mit aktiviertem JS möglich</noscript></th>
    </tr>
  </thead>
  <tfoot>
    <tr>
      <th colspan="4"><input type="submit"></th>
    </tr>
  </tfoot> 
  <tbody onclick="unique(event)">
    <tr>
      <th>&nbsp;</th>
      <th> Platz 1</th>
      <th> Platz 2</th>
      <th> Platz 3</th>
    </tr>
    <tr>
      <th>Foto1</th>
      <td><input type="radio" name="rank[1]" value="foto1"></td>
      <td><input type="radio" name="rank[2]" value="foto1"></td>
      <td><input type="radio" name="rank[3]" value="foto1"></td>
    </tr>
    <tr>
      <th>Foto2</th>
      <td><input type="radio" name="rank[1]" value="foto2"></td>
      <td><input type="radio" name="rank[2]" value="foto2"></td>
      <td><input type="radio" name="rank[3]" value="foto2"></td>
    </tr>
    <tr>
      <th>Foto3</th>
      <td><input type="radio" name="rank[1]" value="foto3"></td>
      <td><input type="radio" name="rank[2]" value="foto3"></td>
      <td><input type="radio" name="rank[3]" value="foto3"></td>
    </tr>
  </tbody>
</table>
</form>
<script type="text/javascript">
<!--
function senden()
{
  document.bewertung.action='';
  document.bewertung.submit();
}

function unique(e)
{
  btn=(window.event)?e.srcElement:e.target;//worauf wurde geklickt
  if(btn.tagName=='INPUT')//wenn es ein INPUT war....
    {
      row=btn.parentNode.parentNode;//Eltern-TR
      for(i=0;i<row.getElementsByTagName('INPUT').length;++i)//inputs durchlaufen
        {
          row.getElementsByTagName('INPUT')[i].checked=(btn==row.getElementsByTagName('INPUT')[i]);//checked setzen
        }
    }
}

//-->
</script>

5 Zeilen, 1 Schleife, eine Eventüberwachung...das wars:egal wieviele Bilder oder Bewertungspunkte du hast ;)
 
Ja gut, das Javascript verstehe ich so gut wie garnicht...

Aber wie kann ich nun abfragen, welche Bewertung Foto 1 bekommen hat? Welche Foto 2 etc?

Weil die Datenbak sieht so aus, das jede Bewertung einen eigenen Insert bekommt.
Und am Ende der Bewertungsphase berechnet ein Script den Gewinner.

Aussehen würde die DB so:

User | Foto1 | Foto2 | Foto3 | ...
Nick | 3 | 2 | 1 |
Nick2 | 2 | 3 | 1 |
Nick3 | 1 | 2 | 3 |

Am ende errechnet der Server das Foto mit der niedrigsten Summe aus allen Bewertungen und schon weiß er platz 1.

Hoffe so ist das verständlich

Also ich verstehe nun gerade bei deinem Script garnichts.
 
Zuletzt bearbeitet:
PHP:
<?php
  if(isset($_POST['rank'])){ksort($_POST['rank']);echo '<pre>'.print_r($_POST['rank'],true).'</pre>';}
?>

Dort siehst du zur Kontrolle, was gesendet wurde...$_POST['rank'] musst du verarbeiten...dieser Array enthält die abgegebenen Bewertungen :
Schlüssel=>der Rang
Wert=>das Bild
 
Ja das hatte ich gesehn, trotzdem bringt es mir leider wenig bei dieser Datenbank struktur. Ich bin dir ja sehr dankbar für deine Hilfe aber es bringt mich nicht weiter oder ich denke zu kompliziert
 
Ja, aber es geht doch darum, das ich diese Daten auch in die Datenbank bekommen und das ganze so, das ich aus allen Bewertungen (die alle einzeln einen Insert haben) dann die absolute nummer 1 ausrechnen lassen kann...

Daher hatte ich ja auch eben die DB Struktur gepostet, weil bei der Struktur weiß ich, wie ich daraus den absoluten Platz 1 berechnen lassen kann, anders leider nicht =(
 
Ich glaub ich bin doof (Darauf brauch ich jetzt auch keine Antwort ;) )

Wie bekomme ich das array, was durch das absenden des Formulares entsteht, in die Datenbank?

Mit

PHP:
$rank_1 = $_POST["rank[1]"]
$rank_2 = $_POST["rank[2]"]
....

geht es leider nicht. Wie bekomme ich jetzt die einzelnen platzierungen in jeweils eine Extra spalte der Datenbank?!

:confused:
 
OK, ich habe es über einen Umweg hinbekommen.

PHP:
 ksort($_POST["rank"]);
 $plaetze = array();
 foreach ($_POST["rank"] as $value)
 {
  $array_fuelle = array_push($plaetze, $value);
 }

und so kann ich die Datensätze über

PHP:
$platz_1 = $plaetze[0];
$platz_2 = $plaetze[1];
...

ohne weiteres in die Datenbank schreiben.
 
Zurück