Frage von Muehlsencrafter, 244

Int in einer MySQL durch Buttonklick um 1 erhöhen?

Hallo,

habe noch nicht so viel Erfahrung mit MySQL Datenbanken und nun ein Problem. Ich würde gerne Administratoren meiner Seite die Möglichkeit bieten andere User freizuschalten. Hierfür habe ich "rank" in der Datenbank angelegt und in Betrieb genommen. Funktioniert auch alles User mit 1 kommen nicht auf die Seite User mit 2 schon. Nun soll es die Funktion geben, dass, wie schon erwähnt, diese Administratoren die mit dem Rang 1 freischalten können. Ich habe alles mögliche probiert und stundenlang das Internet durchforstet, leider habe ich nicht wirklich das gefunden was ich brauche...

<form method="post">
    <input type="submit" value="Freischalten" name="freischalten"> 
     </form>

Als Informationen dazu: Ich habe vorher eine Tabelle mit 3 Spalten wo die Daten aus der MySQL Db angezeigt werden Username, Rang, Funktionen. In Username und Rang werden die Daten aus der MySQL Db genommen. In etwa: $row["Username"]

In der dritten Spalte Funktionen ist oben genannter Code um dort den Knopf zum freischalten darzustellen. Nun was genau kann ich machen um durch einen einfachen Knopfdruck den Rang um eins zu erhöhen. Gedacht hab ich mir, dass ich mir zu nutzen mache den Usernamen schon abgefragt zu haben, aber weiter komme ich einfach nicht.

Hoffe meine Beschreibung was ausführlich genug und ich hoffe auf schnelle Antwort. Vielen Dank im voraus.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von ikinikin, 81

Wenn du per Formular auf den Knopf drückst, kannst du erst die Rang Spalte auslesen (nicht unbedingt anzeigen) und den Wert (1 wahrscheinlich ) in einer Variable(z.B $rang) speichern. Dann kannst du mit $sql = 'UPDATE tabelle SET spalte WHERE username(?): "'.$rang++.'"';

Bin aber nicht ganz sicher gerade ob das mit Update genau so ist(die Syntax). Die kannst du ja Googeln. Aber vom Prinzip geht das so

Kommentar von Muehlsencrafter ,

Danke erstmal. Kann ich irgendwie den Usernamen übernehmen der 2 spalten weiter links steht. Vlt mir WHERE Username = irgendeine Abfrage oder muss ich letztendlich doch ein Formular mit Username Eingabe erstellen?

Kommentar von ikinikin ,

Ist bei jedem User ein Knopf oder auf einer Seite nur ein Knopf um zu erhöhen? Man könnte ja z.B auch noch ei. Text-Input ins Formular machen für den Name, der dann bei der Ausgabe der DB bei 'SELECT rang FROM tabelle WHERE nickname = "'.Variable mit Gesuchtem Name.'"' so gesucht wird

Kommentar von Muehlsencrafter ,

Habe hier mal einen Screenshot gemacht. Vlt ist es dann besser: http://prntscr.com/ao7wq8 

echo $row["Username"];   So rufe ich den Usernamen auf

Und auf dem Screenshot habe ich die Zahlen schon in Namen umgewandelt, aber es bleibt trz bei 1 und 2

Kommentar von ikinikin ,

Ja aber 'UPDATE' muss ja wissen welchen Rang es Updaten soll also muss es ja eigentlich per Name passieren

Kommentar von Muehlsencrafter ,

Hmmm ich glaube wir kommen der Lösung näher. Nun noch eine weitere Frage wie genau kann ich durch den Klick auf den Button etwas aufrufen, wo ich die sql Sache hin schreiben kann. Ich probiere es gleich parallel mal aus aber funktioniert es dass ich oben eine Variable für den $row["Username"] erstelle und diese dann im Update verwende? Es ist immer so schön den ganzen Tag mit so nem Problem zu verbringen 

Kommentar von ikinikin ,

Das mit den Usern auflisten machst du ja in einer Schleife. Und dort machst du ja auch die Tabelle und das Formular. Wenn du dann in dein Formular ein Hidden-"Input" machst (

) mit der Value von deinem Name, könntest du den Wert vom Hidden einer Funktion per Parameter übergeben, die dann die Datenbank updatet (so: $sql = 'UPDATE tabelle SET rang = "'.$hiddenFeld(mit name drin).'"'; )

Kommentar von Muehlsencrafter ,

Stimmt, okey das mache ich
Vielen Dank 

Kommentar von ikinikin ,

Mist, da hat mir gutefrage.net wieder was geklaut. Das nach Hidden-Input in Klammern sollte sein: < input type="hidden" / > (natürlich ohne Leerzeichen)

Kommentar von Muehlsencrafter ,

Hab mal Zeile für Zeile durchprobiert und tatsächlich kommt der Fehler von der $sql = usw

Kommentar von ikinikin ,

Sag dann bitte ob es klappt oder wenn es noch ein Problem gibt :D

Kommentar von Muehlsencrafter ,

Mach ich

Kommentar von Muehlsencrafter ,

Hab mal weiter gemacht bin zu dem gekommen: http://prntscr.com/ao8a8l Aber da ist irgendwo ein Fehler, es läuft gar nicht - weiße Seite

Kommentar von Schrubberx ,

Die Zeile "$sql = " ist fehlerhaft. Die Variable hinten musst du von den anderen beiden Strings mit einem PUNKT trennen. also "[....] Username = '.$userpre.'';".

Kommentar von Muehlsencrafter ,
$sql = "UPDATE benutzerdaten SET trank = '2' WHERE Username = '.$userpre.';".


Hab das jetzt so, hab ich deinen Tipp da richtig verstanden? So funktioniert es jedenfalls nicht.

Kommentar von Sarkophator ,

In deniem Screenshot benutzt du außen einfache Anführungszeichen, hast aber beim Einsetzen der Variable $userpre keine Konkatenationsoperator (die Punkte) gesetzt. Wenn du doppelte Anführungszeichen benutzt, brauchst du die auch nicht. D.h.:

$sql = "UPDATE benutzerdaten SET trank = '2' WHERE Username = '$userpre';"

Bzw.

$sql = "UPDATE benutzerdaten SET trank = '2' WHERE Username = '".$userpre."';"
Kommentar von Muehlsencrafter ,

http://prntscr.com/aofo1n - Das funktioniert auch wieder nicht. Komische Sache

Kommentar von ikinikin ,

Ja aber ich hätte das Update in eine Funktion geschrieben also: function rangAendern($Nutzernname){ .... } Geht aber auch so wie du das hast

Kommentar von ikinikin ,

Im Input Hidden ist keine value (da muss

rein) Dann: sicher das deine spalte die geupdate wird "trank" heisst?

Kommentar von Muehlsencrafter ,

Gute Frage hat dir was geklaut glaube ich :D 
Und ja das heißt trank 
Das f von freischalten hab ich jetzt klein ist aber weiterhin alles weiß

Kommentar von Muehlsencrafter ,

Hab jetzt was geändert und der übernimmt die $userpre nicht habe jetzt meinen eigenen Rang auf 2 gesetzt :D Habe da hinter noch nen Punkt gesetzt an die SQL Zeile 

Kommentar von ikinikin ,

Und bei deinem if(isset()) ist Bei der Post Variable die Value angegeben und nicht der Name. Also musst du das "F" klein schreiben

Kommentar von ikinikin ,

Und in die value deine $userpre Variable? Dann passt es ja jetzt :)

Kommentar von Muehlsencrafter ,

Komisch habe das gemacht aber er setzt einfach nur die User 1, 3 und 5 auf Rang 2 ändert aber nichts an der 2 komisch
In welche Value die userpre? Die vom Hidden Feld?

Kommentar von ikinikin ,

Ach ja du hast das ";" vergessen

Kommentar von Muehlsencrafter ,

An welcher Stelle?

Kommentar von ikinikin ,

Nach dem $sql aber das meintest du glaube ich

Kommentar von Muehlsencrafter ,

Jetzt setzt der alle User auf 2 xD

Kommentar von ikinikin ,

Schick nochmal einen Screenshot bitte

Kommentar von Muehlsencrafter ,
Kommentar von ikinikin ,

Ersetz mal den Punkt nach dem $sql durch ein ; 

Kommentar von ikinikin ,

Und beim hidden input:

<input type="hidden" value="<?php echo $userpre; ?>" name="username"/>
Kommentar von ikinikin ,

http://pastebin.com/ Kopier mal alles hier rein und schick mir dann einen Link

Kommentar von Muehlsencrafter ,

http://pastebin.com/4ef17d6J

Habe da noch den Punkt, der ist mittlerweile ein ; deshalb setzt er auch alle user auf 2

Kommentar von ikinikin ,
$sql = 'UPDATE benutzerdaten SET trank = 2 WHERE Username = "'.$userpre.'"';

Ersetz mal deine Zeile durch die obrige.

Dann kannst du auch noch überall wo du etwas wie mysql_query hast ein mysqli aus dem mysql machen.

Du könntest dir auch mal zur sicherheit deine $userpre ausgeben lassen, um zu sehen ob es auch der richtige Name ist oder ein Array

Kommentar von Muehlsencrafter ,

Hab das jetzt gemacht mit dem mysqli geht nicht, dann macht der gar nichts mehr. Userpre ausgabe funktioniert korrekt. Aber er setzt trotzdem weiterhin alle User auf 2

Kommentar von ikinikin ,

Ok. Das mit Mysqli ist nicht schlimm. Ich schau nochmal.

Kommentar von ikinikin ,

Hast du die $sql Zeile ausgetauscht?

Kommentar von Muehlsencrafter ,
$sql = 'UPDATE benutzerdaten SET trank = 2 WHERE Username = "'.$userpre.'"';

Jop so richtig?

Kommentar von ikinikin ,

normal schon. Geh mal wenn du Chrome hast bei deinem Button auf RechtsKlick und dann Prüfen(Mozilla heisst es Element untersuchen) und schau ob beim Hidden-Feld auch der richtige Name als Value steht.

Kommentar von Muehlsencrafter ,

Jop der hat die richtige Value drinne

Kommentar von ikinikin ,

Ich probier das gerade auf meinem Server aber da wird auch nichts angezeigt

Kommentar von Muehlsencrafter ,

Hängt das vlt damit zusammen, dass das ganze in ner Schleife steht? So übergibt der zwar den richtigen Namen macht es aber durch die Schleife einmal für alle? 

Kommentar von ikinikin ,

Ja ich schau mir das mal bei mir an und geb dir dann Bescheid Ok?

Kommentar von Muehlsencrafter ,

Alles klar, danke dir

Kommentar von ikinikin ,

Gut, habe es jetzt gelöst.

Ich habe jetzt eine FUnktion gemacht(ganz unten), die die Datenbank updatet.

Da wo du die DB updaten wolltest funktioniert das nicht. Deshalb habe ich das if(isset()) nach oben verschoben und rufe dort dann die Funktion auf und übergebe das Parameter $nutzername (also $_POST['username'] (das Hidden-Feld)).

Ich schicke dir gleich den Link von Pastebin.

Kommentar von Muehlsencrafter ,

Ahhhh, funktionen hatte ich bisher noch nicht wirklich raus. respekt 

Kommentar von ikinikin ,

http://pastebin.com/D7PFSYph

Du musst ein paar Sachen ändern:

  1. Zeile 4 & Zeile 117: Deine MySql-Daten eingeben (oder wie vorher mit der anderen Datei)
  2. Falls es nicht gehen sollte mit mysqli_(...) einfach wieder die "i" entfernen (Zeile 4, 5, 35, 36, 117, 118, 121)
Kommentar von Muehlsencrafter ,

Funktioniert perfekt! Danke vielmals, auch dafür, dass du hier ne Menge Zeit investiert hast!! 

Kommentar von ikinikin ,

Gerne :) Übrigens bei mir funktioniert das mit mysql_(...) nicht. Also muss man eigentlich schon mysqli_(...) nutzen (ist auch moderner). Aber es funktioniert ja anscheindend mit mysqli :D

Kommentar von ikinikin ,

Du kannst mir auch gerne schreiben wenn es nochmal probleme gibt ;D

Kommentar von Muehlsencrafter ,

Da kannste dich drauf verlassen :D

Kommentar von ikinikin ,

Gut :D Bis dann!

Antwort
von ikinikin, 135

Hab auf dem 2ten Screenshot noch gesehen das du beim hidden Feld was vergessen hast. Es müsste sein: value=""

Keine passende Antwort gefunden?

Fragen Sie die Community