• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datenbankwert verändern

Witschi262

Blogger
Hallo,
da ich mal wieder zur Zeit am Scripten bin, warten auch schon die vorprogrammierten Probleme auf mich. Die erste Hürde mit dem Quiz habe ich ja schon überstanden.

Folgt nun die zweite. Ein Umfragesystem. Da ich eigentlich keine Ahung habe, wie ich das realisieren soll, dachte ich mir das so:
In der Datenbank habe ich 3 Spalten. Eine Für JA eine für NEIN und eine für SONSTIGES. Sie heißen dementsprechen "yes" "no" und "other".

Jede Spalte trägt den Wert 0. Wenn jetzt jemand bei der Umfrage sich für ja entscheidet, soll der Datenbankwert Manipuliert werden und in der Spalte yes +1 gerechnet werden. Am schluss möchte ich dann aber keine Prozentuale Ausgabe haben, sondern ganz einfach, wieviele gestimmt haben.
Gedacht habe ich mir das mal so:

PHP:
$umfrage = $_POST['umfrage'];

if($umfrage == 'yes')
{
$update = + 1;
mysql_query("UPDATE INTO umfrage (yes) VALUES (NULL, '".mysql_real_escape_string($update)."'");
}

Alles ohne Error ohne alles. Allerdings bleibt die Datenbank unverändert. Naja, den Update Befehl hat mir mein Freund und Helfer Google gegeben. Selbst ohne INTO funktioniert es nicht.Ich schätze, es hängt an der Variable $update und am Befehl UPDATE INTO .

Kann mir da jemand weiterhelfen?
 
Dein Datenbankschema macht schlichtweg keinen Sinn. Du legst drei Spalten für einen einzigen Wert an.
Code:
umfrage{
id: int auto_increment,
wert: varchar(5)
}
ist besser.
Für jeden, der abstimmt, wird eine neue Zeile in der tabelle angelegt.
Die Spalte wert kann die Werte yes, no und other annehmen.
Zum Auslesen der Stimmen pro Wert kannst du die SQL-Funktion COUNT() nutzen:
Code:
SELECT COUNT(*) as yesStimmen FROM umfrage WHERE wert = 'yes'
- gibt Ganzzahl mit Stimmen für yes für den Index 'yesStimmen' zurück -

Trotzdem:
Dein Fehler liegt darin, dass du weniger Spaltennamen der Tabelle angegeben hast, als Werte eingefügt werden sollen. INTO kannst du auch weglassen.
Code:
UPDATE umfrage ([COLOR="red"][B]no[/B][/COLOR], yes) VALUES (NULL, '".mysql_real_escape_string($update)."'"
 
Zuletzt bearbeitet:
ZUm erklären ist das etwas kompliziert.

Vielleicht wird es mit einem Beispiel klarer:
1 $update
Soll die Rechung 1+1 bedeuten. Das +1 Soll später zur DATENBANK Abfrage dienen.
 
Ja danke.
Das mit dem Index yesStimmen habe ich nciht verstanden, muss ich diesen vorher noch definieren oder so? ^^

Dazu noch gleich meine nächste Frage:
Wie "zeige" ich die daten? Schon dann mit echo?
Ich weiß, bin heute Gedanklich nicht so ganz dabei..
 
Mit AS lassen sich Spalten für die Dauer der Abfrage neue Bezeichner geben.
Dein weiteres PHP-Script sähe etwa so aus:
PHP:
$result = mysql_fetch_assoc($query);
echo $result['spalte'];

// bei diesem Fall mit COUNT(*) etwa so:
echo $result['COUNT(*)'];
// bei komplexeren Abfragen kann es allerdings Probleme damit geben, deshalb
// gebe ich dieser Spalte den Namen yesStimmen mit AS
echo $result['yesStimmen'];

Ausgabe erfolgt mit echo, genau. ;)

Ich wollte dich nicht unnötig verwirren, sehe es nur als übersichtlicher an.
 
Verwirrt hast du mich nciht, das war ich vorher schon :D

Habe jetzt mal folgendes stehen:
PHP:
mysql_query("SELECT COUNT(*) as yesStimmen FROM umfrage WHERE wert = 'yes'");

$result = mysql_fetch_assoc($query);
echo $result['spalte'];
echo $result['COUNT(*)'];
echo $result['yesStimmen'];

Aber folgender Error kommt:
mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in
 
Gibt es einen MySQL-Error? Versuche
PHP:
mysql_query("SELECT COUNT(*) as yesStimmen FROM umfrage WHERE wert = 'yes'") or die(mysql_error());

$result = mysql_fetch_assoc($query);
echo $result['yesStimmen'];
 
Du musst den Rückgabewert von mysql_query() natürlich in $query speichern.

PHP:
$query = mysql_query("SELECT COUNT(*) as yesStimmen FROM umfrage WHERE wert = 'yes'");
$result = mysql_fetch_assoc($query);
 
Die Namen der Variablen sind übrigens "einen Schritt zurück".

PHP:
$query = "SELECT COUNT(*) as yesStimmen FROM umfrage WHERE wert = 'yes'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
 
Ich komme garnicht mehr mit?!
Also ich habe bei threadi's antwort per echo $result versucht etwas auszugeben, naja es kam nur "array"
Und bei mermshaus genauso..

Irgendwas verstehe ich hier völlig falsch
 
Was hast Du denn programmiert? Das hier?

Code:
$query = mysql_query("SELECT COUNT(*) as yesStimmen FROM umfrage WHERE wert = 'yes'");

$result = mysql_fetch_assoc($query);
echo $result['spalte'];
echo $result['COUNT(*)'];
echo $result['yesStimmen'];

Dann solltest Du (vorausgesetzt, das SQL-Statement ist korrekt) nur bei "yesStimmen" eine Ausgabe bekommen.

Wie Du in dem SQL-Statement sehen kannst, wird dort nur eine Spalte ausgelesen. Nämlich "yesStimmen". Nicht "COUNT(*)" (was auch gar nicht so geht) und auch nicht "spalte". "array" dürfte in dem Fall eigentlich gar nicht ausgegeben werden.

Aber ohne deinen aktuell verwendeten Code kann man dir auch nicht aus deinem Durcheinander heraus helfen ...
 
Ich denke ich habe für etwas Durcheinander gesorgt, deshalb habe ich die Scriptstückchen nun nochmal zusammengefasst.
Zum Eintragen einer Stimme in die Db nutzt du das:
PHP:
$umfrage = $_POST['umfrage'];

if($umfrage == 'yes')
{
mysql_query("INSERT INTO umfrage (id, wert) VALUES(NULL, 'yes')") or die(mysql_error());
}
Zum Auslesen der Ganzzahl an yes-Stimmen nutzt du dieses Script:
PHP:
$query = mysql_query("SELECT COUNT(*) as yesStimmen FROM umfrage WHERE wert = 'yes'") or die(mysql_error());

$result = mysql_fetch_assoc($query);
echo $result['yesStimmen']; // Gibt die Anzhal an Stimmen mit 'yes' aus
So sollte das ganze funktionieren.
 
Zuletzt bearbeitet:
Zurück
Oben