Abstimmung über html Formular, php Datei, Datenbank

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Abstimmung über html Formular, php Datei, Datenbank

Beitrag 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?
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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.
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.
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag 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.
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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:

Code: Alles auswählen

person | stimmen
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

Code: Alles auswählen

SELECT * FROM tabelle
und dann Ausgabe in einer Schleife, jede Zeile enthält die Daten von jemand anderem.
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.
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag 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.
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag 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?
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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

Code: Alles auswählen

$person = 'Karlheinz';

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

Code: Alles auswählen

SELECT * FROM tabelle
,
wobei 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.
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag 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?
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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)
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.
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag von porfavor »

gut werde ich nacher oder morgen mal versuchen.

Danke
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
Antworten

Zurück zu „Coding & Technik“