Klick auf Button soll + 1 zählen

  • Hallo :)


    Ich will einen Button programmieren, welcher beim drücken plus eins erzeugt.
    Also ganz einfach 1,2,3,4,5...
    Also ich hatte es schonmal mit GET versucht, allerdings steht dann in der Adresszeile, counter=1,[2,3,4,5 ..] usw.
    So kann man ja schnell die Anzeige manipulieren und das soll nicht der Sinn der Sache sein.


    Also habe ich mir überlegt, wie ich es mit POST hinbekomme, allerdings scheitere ich gerade an allem.. :(


    Könnte mir da jemand helfen? Oder gibt es einfachere Methoden?



    Noch so nebenbei.
    Wenn ich es irgendwann mal zum laufen gebracht habe, möchte ich den counter in eine Datenbank speichern.


    Schonmal vielen Dank für eure Hilfe! :)


    Lg

  • Hallo!


    Warum machst du es dir so kompliziert?
    Warum nicht einfach mit einem Get-Wert + Link arbeiten?


    Was hälst du von folgendem Beispiel:


    Hoffe ich konnte dir helfen.


    Zu deinem Code:
    - Formular ist zu umständlich für soeine Sache, finde ich

  • GET ist für einen Zähler leider eher unbrauchbar (wie er oben auch schon geschrieben hat..), da ich einfach beliebige Werte über die URL übergeben kann.
    Formular macht da schon Sinn, allerdings nur wenn der Wert dauerhaft irgendwo gespeichert wird, sonst ist er bei jedem Neuaufruf wieder weg.

  • Zitat

    Also ich hatte es schonmal mit GET versucht, allerdings steht dann in der Adresszeile, counter=1,[2,3,4,5 ..] usw.
    So kann man ja schnell die Anzeige manipulieren und das soll nicht der Sinn der Sache sein.

    Achsoo.. das ist also der Sinn, das Leute was präsentiert werden, was "einfach" ist, aber Ihnen 0,0% weiterhilft, weil sie diesen Vorschlag schon hatten und für "ungut" befunden haben.


    Um mal eine Lösung zu präsentieren:
    (natürlich wäre es mit Datenbanken logischer)

  • Danke für eure Antworten!


    Mir ist nun auch in den Sinn gekommen, den Wert in einer DB speichern zulassen.



    Absolut unübersichtlich, aber es macht was ich will..
    Außer immer wieder eine weitere Spalte mit ID, Name etc. .. anlegen ^^
    Aber das werde ich noch auseinander friemeln, damit ich schonmal den Log in Bereich habe :)


    Mit der Session ist auch eine coole Idee :D
    Allerdings muss der Wert für immer da sein :D


    Danke euch!

  • Was möchtest du denn? Möchtest du dass immer eine neue Zeile erstellt wird oder möchtest du dass eine Zeile immer geupdated wird?
    Da du mit E-Mail-Adressen arbeitest sieht es so aus als ob du irgendwas pro E-Mail-Adresse zählen möchtest - da könntest du per UPDATE und WHERE Klausel die entsprechende Zeile updaten. Die E-Mail-Adresse musst du natürlich irgendwo herbekommen, wenn du jemanden einloggst hast du die z.B. in einer Session:


    SQL
    1. UPDATE userdaten
    2. SET zahlen='$int_count'
    3. WHERE email='{$_SESSION['email']}'


    Bitte die einfachen Anführungszeichen um die Variablen nicht vergessen :)


    Grüße

  • Habe es geschafft, auch ohne deine Hilfe :)
    Schon gestern ^^ Aber trotzdem vielen lieben Dank! :)


    Es ist echt toll mal eine Community zu finden wo einem auch geholfen wird...


    Als nächstes erstelle ich ein log in system.


    Kann ich das so machen:


    User melden sich an..
    Dann vergleiche ich bei Benutzername und Passwort ob diese Einträge in der DB vorhanden sind und richtig sind und dann gebe ich die Anweisung via Action="" weiter?! :p

  • Wie meinst du via action=""?


    Falls du action als Attribut im Formular meinst:

    HTML
    1. <form action="">


    das wird eigentlich dazu benutzt, die Seite anzugeben, an die deine Formulardaten gesendet werden.
    Hast du z.B. ein Login-Formular, das du in jede Seite einbindest, so kannst du über action z.B. jedes der Formulare einfach auf eine login.php verweisen lassen, die dann die gesendeten Daten auswertet und entsprechend reagiert.


    Im Normalfall funktioniert ein (einfaches) Loginsystem folgendermaßen:


    - Je nachdem wie viel Feedback du dem User geben möchtest überprüfst du, ob Benutzername und Passwort vorhanden sind und gibst falls nicht eine Fehlermeldung aus. Da kannst du dann entscheiden, ob du erst überprüfst ob der Benutzername vorhanden ist (so könnte man dem Benutzer bei nicht vorhanden signalisieren dass er sich vielleicht vertippt hat) und wenn ja überprüfst ob das Passwort stimmt, oder du kannst gleich beides überprüfen.
    - Stimmen Benutzername und Passwort überein, werden Benutzerdaten in eine SESSION geschrieben. Meist ist das z.B. mindestens der Benutzername und die ID des Benutzers (über die man ja dann später alle anderen Sachen abfragen kann).
    - Danach braucht der Benutzer natürlich noch irgendeine Reaktion, meist ist das irgendwas wie "Du wurdest erfolgreich eingeloggt" und dann irgendwas mit Link oder einer automatischen Weiterleitung.


    Grüße

  • Dann teste mal. Ich empfehle dir, deine DB-Konfiguration in eine externe Datei auszulagern, somit musst du jedesmal nur die Datei einbinden :)


    z.B. so:
    config.php:


    (error_reporting hilft dir auch dann bekommst du alle Fehler/Notices angezeigt :))
    Und dann immer wenn du die Datenbank in einer Datei brauchst per


    PHP
    1. <?php require_once ("config.php"); ?>


    einbinden.


    Grüße :)

  • Das habe ich schon :)
    Viel zu mühsam immer alles reinzuschreiben :p



    Ich habe einfach DB Spalten angegeben $name und $pw .. natürlich klappt es nicht :D


    Habe mir gerade noch paar Sachen durchgelesen..
    Muss ich vielleicht sowas machen?

    PHP
    1. $sql = "SELECT * FROM name";


    So jetzt hätte ich alle namen in $sql und könnte das mit einer IF Anweisung abfragen? Oder bin ich gerade total auf einem Holzweg? :p

  • Also, der Code der oben steht ist ja schonmal richtig. Nun hast du natürlich die beiden Variablen $name und $pw da drin noch gar nicht gesetzt.
    Eine Variable ist was anderes, als eine Spalte in einer Tabelle (schließlich sind PHP und MySQL ja zwei verschiedene Sachen).


    Dein zweiter Ansatz ist allerdings richtig, was du brauchst ist eine Datenbankabfrage, wo du deine Variablen rausholst. Da hast du zwei Möglichkeiten:


    1. Du überprüfst für jede einzelne Zeile in deiner Tabelle, ob die beiden Werte drinstehen. Das ist aber eher unperformant, da bei größeren Systemen dann Unmengen an Daten durchsucht werden müssen.


    2. Du suchst nach einer Zeile, wo der eingegebene Benutzername drinsteht und schaust dann nach, ob das Passwort der entsprechenden Zeile stimmt. Du hast dann in etwa so eine Abfrage:

    SQL
    1. SELECT * FROM deinetabelle
    2. WHERE name='{$_POST['benutzername']}'


    Das ganze ist das, was in deiner Variable $sql (die du aber prinzipiell nennen kannst wie du möchtest) steht.
    Wie du dann weitermachst, findest du hier:
    http://www.php-kurs.com/mysql-datenbank-auslesen.htm


    Mal testen - dazu kannst du dir auch einfach mal die WErte ausgeben lassen ohne irgendwas zu überprüfen und schaun ob das rauskommt was rauskommen sollte - dann wunderst du dich hinterher nicht falls etwas nicht funktioniert :)


    Grüße + viel Spaß

  • Also ich habe das mal so eingegeben.
    Hier mein ganzer Quellcode.



    Jetzt habe ich zwei Probleme.


    1. $_SESSION['eingeloggt'] == true


    Da bekomme ich eine Fehlermeldung, dass "eingeloggt" nicht definiert sei.. Tu ich auch nirgends, allerdings ging es bei einem Tutorial auch, obwohl es nicht definiert wurde ^^


    2. Wenn ich das so eingebe, bekomme ich eine weiße Seite.. Formatierungsfehler?!
    Wenn ich dieses Stück rausnehme, sehe ich wieder was :p


  • Hi,


    1. Ist es eine Fehlermeldung oder eine Notice? ;)


    2. Kein Wunder ;)


    Lass mich dir kurz die Grundlage von einer MySQL-Abfrage erklären:
    Du schreibst EINE Abfrage. In deinem Fall ist das

    SQL
    1. SELECT * FROM userdaten
    2. WHERE name='{$_POST['benutzername']}'


    Ich drösel dir mal auf:
    SELECT bedeutet, dass du lediglich liest - im Vergleich dazu gibt es z.B. INSERT (fürs Erstellen neuer Datensätze) oder UPDATE (zum Updaten von schon vorhandenen Datensätzen)
    * dieses Sternchen sagt, dass ALLE Spalten ausgelesen werden. Du kannst dieses z.B. in deinem Fall auch durch name, pw ersetzen, weil du ja nur diese benötigst. Bei kleineren Tabellen kann man aber in der Regel auf das Sternchen zurückgreifen ohne dass die Abfrage signifikant länger braucht.
    FROM userdaten bezeichnet die Tabelle, aus der innerhalb der per mysql_select_db ausgewählten Datenbank gelesen werden soll.
    WHERE gibt hier eine Bedingung an und ist im Gegensatz zu den bisherigen Dingen nicht Pflicht. Man benutzt es, wenn man die Zeilen, die man ausliest einschränken möchte. Gibt man kein WHERE an, werden ALLE Zeilen ausgelesen. Was du jetzt ja brauchst, ist dass nur die Zeilen ausgelesen werden, wo der eingegebene Benutzername drinsteht. Das sollte im Normalfall nur eine sein, da es jeden Benutzernamen ja normalerweise nur einmal gibt. Wichtig ist, dass nach WHERE immer folgender Aufbau kommt:
    name_der_spalte='wert_der_da_sein_soll'
    Du siehst, da gibt es einfache Anführungszeichen, die bitte auch bei Variablen setzen :) Bei solchen mit eckigen Klammern drin kommen dann noch zusätzlich die geschweiften dazu.


    So. Übersetzt heißt das also so viel wie:
    SELEKTIERE (alle Spalten) AUS userdaten
    DA WO spalte_name den Wert aus POST[benutzername] hat.


    Diese Anfrage (und nur diese!) wird jetzt bearbeitet.
    Dazu gibt es erstmal mysql_query:


    PHP
    1. $db_erg = mysql_query($sql);


    (Natürlich vorher die Abfrage in die Variable $sql packen).


    Das Ergebnis was da rauskommt, wird nun in ein Array gelesen, womit du dann in PHP wieder was anfangen kannst:


    PHP
    1. $zeile = mysql_fetch_array($db_erg);


    Da du nur ein Ergebnis hast, kannst du die while-Schleife (die jede Zeile einzeln durchläuft) weglassen, schließlich hast du ja nur eine Zeile als Ergebnis (außer den Benutzernamen gibt es mehrmals aber davon gehen wir jetzt mal nicht aus).


    Jetzt hast du deine Variable $zeile. Diese Variable $zeile ist ein Array, die Spaltennamen sind die Indizes (das was in den eckigen Klammern steht). Sprich du hast jetzt den Benutzernamen aus der Datenbank in $zeile['name'] und dein Passwort in $zeile['pw']. Die SQL-Abfrage liefert also die KOMPLETTE Zeile zurück (jedenfalls wenn du das Sternchen angibst).
    Jetzt kannst du einfach mit

    PHP
    1. $name = $zeile['name'];
    2. $pw = $zeile['pw'];


    deinen Variablen diese Werte zuweisen. Ob du den Benutzernamen dann nochmal mit POST-Benutzername vergleichen musst ist fraglich - schließlich ist das ja der Wert, anhand dem du selektiert hast ;) Also reicht es eigentlich auf das Passwort zu prüfen.


    Der Rest des Codes müsste passen - teste mal :)


    Grüße

  • Also ich habe alles verstanden was du mir großzügigerweiße geschrieben hast :)


    zu pkt. 1.


    Notice: Undefined index: benutzername in /usr/export/www/vhosts/funnetwork/hosting/nippi01/test/login_test.html on line 33 -> wird wohl wegfallen, wenn ich das mit der Variable etc. mache ^^


    Notice: Undefined index: eingeloggt in /usr/export/www/vhosts/funnetwork/hosting/nippi01/test/login_test.html on line 55


    zu pkt. 2.



    Ich habe das mal für die Variable "$name" gemacht. Muss ich für das PW auch nochmal genau das gleiche machen? WENN nein, dann bin ich gerade zu doof, weil mein Bildschirm weiß ist :D Aber das teste ich mal :p


    @edit:


    Habe nun herrausgefunden, dass es aufjedenfall an der Abfrage liegt.
    $sql = SELECT * FROM userdaten
    WHERE name='{$_POST['benutzername']}';


    Wenn ich diese rausnehme, bekomme ich Fehlermeldungen, dass $zeile keinen Inhalt hat..


    -So userdaten ist richtig geschrieben
    -Verbindung zur DB besteht auch
    -WHERE name .. name ist auch in meiner Tabelle drin.

  • Nein, musst du nicht ;)
    Das Passwort hast du doch in $zeile['pw'] ;)
    Was du machst ist, dass du das Passwort ausliest aus deiner Datenbank, welches zum eingegebenen Benutzernamen gehört. Und das vergleichst du dann mit dem eingegebenen ;)


    edit: Liegt nicht an der Abfrage - und das $zeile leer ist wenn du keine Abfrage hast ist klar. Lass dir mal nach der Abfrage $zeile per print_r ausgeben.


    Warum du ne weiße Seite hast kann ich dir ohne kompletten Code nicht sagen ;)


    Und die notices kannst du erstmal igonieren - das sind keine Fehler (sonst stünde da error)


    Grüße


    PS: Das grün tut aua.


  • Das ist der komplette Code..
    Eben fehlte das stück oben für die DB