Seite 1 von 1
Abstimmung über html Formular, php Datei, Datenbank
Verfasst: 25.03.2008 23:31
von porfavor
Hallo,
ich habe ein paar Probleme. Und zwar wollte ich ein kleines Votingscript erstellen.
-Der User hat drei Button zum Absenden zur Verfügung
"Button1""Button""Button3"
Dies werden jeweils mit <input type="submit"... gesteuert.
-Ich habe jetzt in einer php-Datei das irgendwie versucht zu übergeben und in eine Tabelle schreiben zu lassen. Kann ich das irgendwie mit einer if-Abfrage realisieren?
Beispiel:
Falls:Button 1 wurde gedrückt => nur Feld1 in Tabelle1 wird um 1 Eintrag erweitert
Falls:Button 2 wurde gedrückt => nur Feld1 in Tabelle2 wird um 1 Eintrag erweitert
Falls:Button 3 wurde gedrückt => nur Feld1 in Tabelle3 wird um 1 Eintrag erweitert
Muss ich außerdem beim Feldtyp in der DB-Tabelle etwas beachten. Ich lasse ja nacher nur die Einträge in den Tabellen zählen, ist also egal, oder?
Verfasst: 26.03.2008 12:33
von gn#36
Da du ja schon was probiert hast: Wie wäre es wenn du den Code einfach mal zur Verfügung stellst (wenn es nur ein paar Zeilen sind, hier rein posten, ansonsten verlinken per KB:datei).
Wenn du hinterher keine weiteren Informationen aus dem Voting brauchst, dann reicht es eigentlich eine Tabelle mit genau 3 Zeilen und zwei Feldern zu machen, ein Feld, das die Option die gewählt wurde bestimmt und ein Feld, wo der aktuelle Wert drinsteht.
Verfasst: 26.03.2008 13:07
von porfavor
Kannst du mir vielleicht genaue Answeisungen was die Felder angeht geben?
Ich habe eigentlich keine Erfahrung mit Sql.
Habe die Dateien mal komplett zum Download bereitgestellt.
http://talkparty.de/us-wahl.rar
Nicht wundern, der Code ist nicht ausgereift und enthält sicher noch überflüssige Fragmente.
Verfasst: 26.03.2008 15:59
von gn#36
Hm... Ich sehe nicht so ganz was das ganze tun soll, da ist auch nichts irgendwie wirklich komplett (und üblicherweise habe ich da nicht so gerne Archive mit unnötigen Dateien, besser wäre es wenn du nur die wesentlichen raussuchst).
Also generell: Sehr viele Sicherheitslücken drin. Benutze NIE direkt $_POST in Ausgaben oder SQL Queries. Für Queries gibt's [php:mysql_real_escape_string], für Ausgaben [php:htmlspecialchars].
Die Ausgabereihenfolge des HTML Codes ist auch durcheinander. Um alles drumherum muss <html>, der <head> Teil ist der, der sämtliche nicht sichtbaren Dinge umschließt, also auch das <title> Element und <script>. Alles was nicht im <head> landet, kommt in den <body>, vorher ganz am Anfang des Dokuments eine doctype-Angabe nicht vergessen.
Formatierungen mit & nbsp; sind nicht unbedingt das gelbe vom Ei, vor allem wenn man die in derartigen Massen verkettet.
Verbesserungsvorschlag für das Formular: Nenn alle Buttons gleich (name) und vergleiche dann in der PHP Datei den Wert (der sich ja unterscheidet). Du kannst auch alle in das gleiche Formular setzen, es wird immer nur ein Submit Button mitgeschickt (mit value).
Tabellenform:
Dann alle drei von Hand anlegen und per IF oder SWITCH prüfen, was gewählt wurde. Dann
Code: Alles auswählen
UPDATE tabelle set stimmen = stimmen + 1 WHERE person = $person
Wichtig, dass du NICHT nur $person = $_POST['submit'] oder was ähnliches machst, sondern die Daten prüfst (eben per IF oder SWITCH)!
Abfrage dann logischerweise mit
und dann Ausgabe in einer Schleife, jede Zeile enthält die Daten von jemand anderem.
Verfasst: 26.03.2008 17:28
von porfavor
Wie gesagt, das stammt auch von etwas anderem von mir und ich habe es halt etwas umgebaut. Hätte vielleicht nochmal gleich alles komplett von Anfang an machen sollen.
Das mit den Sicherheitslücken werde ich mir merken. Mal schauen, was ich damit jetzt anfangen kann.
Die Ordnung ist mir jetzt nicht so wichtig, da es sich nur um ein Seite handelt und ich dort danach nicht mehr viel mache.
Verfasst: 27.03.2008 13:30
von porfavor
Also nochmal Nachfrage:
In der DB sollte es so aussehen.
Tabelle: us (z.B.)
Felder: 1.person
2.stimmen
In diese felder wird dann jeweils der Wert der durch den Button übermittelt wurde eingetragen?
Sprich in person entweder "personA" , "personB" oder "personC"?
Und was ist dann mit Stimmen? Kommt da dann kein Wert oder 1 rein?
Ich verstehe nicht ganz wie das gehen soll.
Oder soll ich für jede Person eine extra Tabelle mit 2 Feldern anlegen?
Verfasst: 27.03.2008 13:41
von gn#36
Nein. Es wäre unsinnig für jede Person eine Tabelle haben zu müssen wenn du nur die Zahl der Stimmen speichern willst. Es steht alles oben im Post wie das geht. Der UPDATE befehl setzt den Stimmenzähler um 1 hoch. Über das WHERE darin steuerst du, welche Person hochgesetzt werden soll. Beispiel:
Code: Alles auswählen
person | stimmen
Karlheinz | 1
Karlotto | 3
Karlfritz | 4
Jetzt stimmt jemand für Karlheinz.
Du bekommst dies mitgeteilt, da $_POST['submit'] (oder wie auch immer du deinen Button nennst) den Wert "Karlheinz" besitzt.
Also
Dann
Code: Alles auswählen
UPDATE tabelle set stimmen = stimmen + 1 WHERE person = '$person'
und schon sieht die Tabelle so aus:
Code: Alles auswählen
person | stimmen
Karlheinz | 2
Karlotto | 3
Karlfritz | 4
An die Daten kommst du mit
,
wobei du die dann etwa so durchläufst:
Code: Alles auswählen
while($row = mysql_fetch_assoc($result))
{
echo $row['person'];
echo $row['stimmen'];
}
Verfasst: 27.03.2008 14:02
von porfavor
ah ok dankeschön.
Ich wollte nur wissen, wie die Tabelle aussehen muss;)
Also
Tabelle mit 2 Feldern: 1.stimmen
2.person
und dann wird der jeweilige Wert als Eintrag gespeichert.
welchen Feldtyp muss ich für stimmen nehmen?
INT und dann als AutoIncrease?
Verfasst: 27.03.2008 21:50
von gn#36
Nein bloß nicht Auto-Increment. Du bearbeitest die Werte manuell. Auto-Increment kannst du nur auf den Primärschlüssel legen (sofern dieser eine Zahl ist) und dann wird bei jedem Tabelleneintrag (also jeder Zeile) beim Neueintrag automatisch eine ID generiert die einen größer ist als die letzte generierte.
Ich vermute dass varchar für die Person (Feldlänge je nach Länge der Namen) und mediumint ausreichen (kannst natürlich auch int nehmen)
Verfasst: 27.03.2008 22:08
von porfavor
gut werde ich nacher oder morgen mal versuchen.
Danke