Zur Navigation

Klicks auf Radiobuttons in Datenbank hochzählen

1 kaheti

Hallo und guten Tag
Eigentlich ist meine Frage im Titel schon gestellt. Ich versuche nun schon seit Tagen eine Lösung zu finden ...aber nix will wirklich funktionieren.
Ich habe ein Script mit welchem per Formular schonmal grundsätzlich ein Voting für etwas vorgenommen wird. Dieses Voting findet immer dann statt, wenn dieses Formular abgesendet wird - in der Datenbank wird jedes Voting dann um 1 Zähler erhöht. Soweit so gut.

Jetzt möchte ich aber genau dieses Script um die Möglichkeit erweitern, per Radiobuttongruppe noch zusätzliche Auswahlmöglichkeiten zu treffen, die dann exakt eben mit diesem Script, in der Datenbank die jeweilige Auswahl ebenfalls um einen Zähler erhöht.

Da die Radiobuttons gruppiert sind (damit man immer nur EINE Wahl treffen kann) steht das Attribute "name" ja nicht mehr zur Verfügung sondern eben nur noch value.

gewurschtelt hab ich bisher sowas:
$design=$design+1;
$inhalte=$inhalte+1;
$nutzen=$nutzen+1;
$navigation=$navigation+1;
$performance=$performance+1;

if ($_POST['submit']) {
  // Wenn die Checkbox gesetzt wurde hat sie den value-Wert ansonsten ist sie leer und erhält eine 0 als Wert
  if ($_POST['bewertung']) $design = $_POST['design+'];
  else $design = 0;
  if ($_POST['bewertung']) $inhalte = $_POST['inhalte+'];
  else $inhalte = 0;
  if ($_POST['bewertung']) $nutzen = $_POST['nutzen+'];
  else $nutzen = 0;

	if(mysql_query('update topsite set design="'.$design.'", inhalte="'.$inhalte.'", nutzen="'.$nutzen.'", navigation="'.$navigation.'", performance="'.$performance.'" where id="'.$id.'"'))
		{
		echo '<p>Bewertung wurde abgeben</p>';
	}
}	
}	
else
{

und (Auszug aus dem Formular)

<input type="radio" name="bewertung[]" value="design" /><label>Design</label>  
<input type="radio" name="bewertung[]" value="inhalte" /><label>Inhalte</label>
<input type="radio" name="bewertung[]" value="nutzen" /><label>Nutzen</label>
<input type="radio" name="bewertung[]" value="navigation" /><label>Navigation</label>
<input type="radio" name="bewertung[]" value="performance" /><label>Performance</label>

Ich hoffe sehr, das es irgendwie verständlich ist. Meine php -kenntnisse sind erschreckend schlecht. Vielleicht kann mir jemand dabei mal helfen - wäre sehr nett.

nette Grüße

Kalle



21.12.2016 19:37

2 Jörg Kruse

<input type="radio" name="bewertung[]" value="design" /><label>Design</label>

Die [] führen dazu, dass der Wert in einem Array gespeichert wird, das du dann auch entsprechend auswerten musst. Das macht bei Radio Buttons, wo du nur einen Button auswählen kannst, keinen Sinn. Falls du eine Mehrfach-Auswahl ermöglichen möchtest, kannst du stattdessen Checkboxen verwenden. In so einem Fall würde eine Speicherung in ein Array Sinn machen. Ansonsten würde ich die [] weglassen, so dass du $_POST['bewertung'] als einfache Variable auswerten kannst

Wenn der Zähler nur für das Feld erhöht werden soll, welches ausgewählt wurde, würde ich so vorgehen (vorausgesetzt $_POST['bewertung'] ist kein Array!):

if (isset($_POST['submit']) && ! empty($_POST['bewertung'])) {
    switch ($_POST['bewertung']) {
    case 'design':
        $design += 1;
        break;
    case 'inhalte':
        $inhalte += 1;
        break;
    case 'nutzen':
        $nutzen += 1;
        break;
    }
    // Datenbank-Query
}

21.12.2016 21:15

3 kaheti

Vielen herzlichen Dank erstmal.... werd die Klammern rausnehmen ... waren noch vom versuch mit einem Array über (hatte aber auch nicht geklappt)

Das von Dir jetzt werd ich mal testen. Ich werde berichten !!!

erstmal nette Grüße

Kalle

22.12.2016 00:30

4 kaheti

Also: kurz hinterher...
Ich hab das getestet. Allerdings wird der der jeweilige Wert pro Kriterie nur EINMAL in die Datenbank eingetragen und dann nie wieder .... wähle ich eine andere Kriterie (also einen anderen radiobutton) wird der vorherige Eintrag wieder gelöscht.
Da bleibt also nix gespeichert in der Datenbankspalte. Und das sollte eigentlich und beim nächsten Klick auf den entsprechenden Radiobutton den jeweiligen Kriterien-Wert (also immer 1) hinzu zählen. Macht er aber leider nicht.

nette grüße

kalle

22.12.2016 03:05

5 Jörg Kruse

Da du $design etc. nicht initialisiert hattest, war ich davon ausgegangen, dass du vorher eine Datenbankabfrage gemacht und die aktuellen Werte in $design etc. gespeichert hast. Wenn das nicht der Fall ist, nimmt PHP 0 als Wert an, und dann ist klar, dass die Datenbank-Werte nicht hochgezählt sondern jedesmal zurückgesetzt werden.

Man kann das ganze aber auch mit einer einzelnen Abfrage bewerkstelligen:

if (isset($_POST['submit']) && ! empty($_POST['bewertung'])) {
    $design_plus = 0;
    $inhalte_plus = 0;
    $nutzen_plus = 0;
    switch ($_POST['bewertung']) {
    case 'design':
        $design_plus = 1;
        break;
    case 'inhalte':
        $inhalte_plus = 1;
        break;
    case 'nutzen':
        $nutzen_plus = 1;
        break;
    }
    mysql_query("
        UPDATE topsite
        SET design = design + " . $design_plus . ",
            inhalte = inhalte + " . $inhalte_plus . ",
            nutzen = nutzen + " . $nutzen_plus . "
        WHERE id= " . $id . "
    ")
}

Ich würde zudem empfehlen, von mysql() auf mysqli zu wechseln. Ersteres ist veraltet und funktioniert ab PHP 7.0 nicht mehr! Die Migration von mysql nach mysqli hatten wir in diesem Thread schonmal behandelt

22.12.2016 08:58 | geändert: 22.12.2016 09:03

6 kaheti

Hallo Jörg
jetzt klappt alles einwandfrei. Ich musste mich mit dem bereits bestehenden Code zwar etwas mit den Klammersetzungen rumzanken, aber am Ende habe ich nun exakt DAS was ich wollte und hierfür möchte ich mich recht herzlich bei Dir bedanken. Du bist der Beste !!!

Jetzt kommt erst mal Weihnachten ... und so wünsche ich Dir und auch allen anderen gleichermaßen (die dies hier lesen) ein frohes Weihnachtsfest.

nette Grüße

Kalle

22.12.2016 19:53

7 kaheti

Hallo
Ich hätte da noch einmal eine Frage dazu:
WAS müsste ich ändern um von radiobuttons auf checkboxen umzusteigen um somit mehrfach-Antworten (also ein Hochzählen in allen Bereichen) möglich zu machen?

nette Grüße

kalle

12.01.2017 01:53

8 Jörg Kruse

In dem Fall kannst du $_POST['bewertung'] als Array übermitteln, welches die Optionen enthält, die hochgevotet wurden:

<input type="checkbox" name="bewertung[]" value="design" /><label>Design</label>  

Das Array kannst du dann in einer Schleife auswerten:

if (isset($_POST['submit']) && ! empty($_POST['bewertung'])) {
    $design_plus = 0;
    // ...
    foreach ($_POST['bewertung'] as $plus) {
        switch ($plus) {
        case 'design':
            $design_plus = 1;
            break;
        // ...
        }
    }
    // Query
}

12.01.2017 11:34

9 kaheti

Auch DAS hat wunderbar funktioniert ! Ich sage DANKE !!!

nette Grüße

Kalle

14.01.2017 05:16

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]