Abstimmung über html Formular, php Datei, Datenbank
Abstimmung über html Formular, php Datei, Datenbank
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?
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?
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
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.
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.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
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.
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.
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
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
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.
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:
Code: Alles auswählen
person | stimmenCode: Alles auswählen
UPDATE tabelle set stimmen = stimmen + 1 WHERE person = $personAbfrage dann logischerweise mit
Code: Alles auswählen
SELECT * FROM tabelleBegegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
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.
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.
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?
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?
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
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:
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 und schon sieht die Tabelle so aus:
An die Daten kommst du mit ,
wobei du die dann etwa so durchläufst:
Code: Alles auswählen
person | stimmen
Karlheinz | 1
Karlotto | 3
Karlfritz | 4Du bekommst dies mitgeteilt, da $_POST['submit'] (oder wie auch immer du deinen Button nennst) den Wert "Karlheinz" besitzt.
Also
Code: Alles auswählen
$person = 'Karlheinz';Dann
Code: Alles auswählen
UPDATE tabelle set stimmen = stimmen + 1 WHERE person = '$person'Code: Alles auswählen
person | stimmen
Karlheinz | 2
Karlotto | 3
Karlfritz | 4Code: Alles auswählen
SELECT * FROM tabellewobei du die dann etwa so durchläufst:
Code: Alles auswählen
while($row = mysql_fetch_assoc($result))
{
echo $row['person'];
echo $row['stimmen'];
}Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
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)
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)
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.