PHP Datenbankeintrag nach Submit um 1 erhöhen

11/21/2012 21:45 DasPrinzip.#1
Hallo liebe Community,

ich hab mich mit PHP noch nicht viel beschäftigt. Kann die Basics und so weiter aber komme einfach nicht auf ein passendes Script:

Wenn jemand den Submitbutton betätigt, wird er auf eine 2. Seite weitergeleitet. Dort soll der Datenbankeintrag des jeweiligen Nutzers um 1 erhöht werden. Ein kleines Schema:

Datenbanktabelle:

id | Username | Passwort | E-Mail | Nr.
1 | hans | md5 | ..@.. | 0

nachdem er den Submit Button klickt sollte es so aussehen:

id | Username | Passwort | E-Mail | Nr.
1 | hans | md5 | ..@.. | 1

Falls ihr versteht was ich meine.

Achso, ich weiß nicht ob das was zur Sache tut, aber der User ist mit einer Session angemeldet.

Vielen Dank schonmal für Antworten!

Und bitte nicht Hart zu mir sein :/
11/21/2012 21:50 .Mystic#2
Ziehe dir den Script von vote4coins ist ein pub prg. für metin2 hp´s da ist es auch so in irgeneiner zeile das es um einensteigt oder du machst es nach dem vote prinzip immer wen er draufklickt halt als vote anlegen und deswegen steigt das mehr weis ich leider auch nicht weil ich php einlich nur zum questen nutze
11/21/2012 21:56 DasPrinzip.#3
Danke schomal.. Ich hab das jetzt so mal geschrieben:

PHP Code:
        $verbindung mysql_connect("localhost""***" "****")
            or die(
"Verbindung zur Datenbank konnte nicht hergestellt werden");
            
mysql_select_db("****") or die ("Datenbank konnte nicht ausgewählt werden");
            
$session $_SESSION['username'];    
            
mysql_query("UPDATE user SET bilder = 'bilder+1' WHERE username = '$session'" or die ('Fehlgeschlagen')); 
Aber da erhöht sich nichts -.-
11/21/2012 22:01 マルコ#4
Code:
UPDATE user SET user.bilder = user.bilder + 1 WHERE user.username = '$session';
11/21/2012 22:06 DasPrinzip.#5
Quote:
Originally Posted by マルコ View Post
Code:
UPDATE user SET user.bilder = user.bilder + 1 WHERE user.username = '$session';
Klappt trotzdem nicht.. :/

`bilder` int(20) NOT NULL,

Das ist der Eintrag. Muss ich da was an der Tabelle ändern?

Wenn ich den Username der Session ausgebe, steht der Username da. Also wählt er den richtigen ja aus.
An was kann das noch liegen?
11/21/2012 23:15 yym3#6
bilder = bilder+`1` ?
11/22/2012 03:30 Steini00#7
Ich kenne da auch so ein Spiele bei dem die Kinder herum hüpfen und raten welche Türe ihnen das Gesicht verbrennen könnte :rolleyes:

Man kann während UPDATE auch ein REPLACE verwenden.

PHP Code:
mysql_query("UPDATE user SET bilder = REPLACE(bilder, bilder,bilder+1) WHERE username = $session"); 
Alles Andere würde wenig Sinn machen.

PS:
Quote:
mysql_query("UPDATE user SET bilder = 'bilder+1' WHERE username = '$session'" or die ('Fehlgeschlagen'));
Wer solche Zeilen schreibt, hat entweder keine Ahnung von PHP, ErrorReporting oder beidem.
versuch es doch mal mit
PHP Code:
mysql_query($parameter) OR DIE ($paramter
davon abgesehen ist eine Fehlerausgabe erst dann Sinnvoll, wenn sie dir auch einen Fehler ausgibt. Das würde dir dann Stundenlanges rätseln ersparen. Und eine richtige Fehlerausgabe wäre ein
PHP Code:
OR DIE ( '['.mysql_errno().'] ->  '.mysql_error()); 
an der Stelle von Fehlgeschlagen
11/22/2012 09:03 DasPrinzip.#8
Quote:
Originally Posted by Steini00 View Post
Ich kenne da auch so ein Spiele bei dem die Kinder herum hüpfen und raten welche Türe ihnen das Gesicht verbrennen könnte :rolleyes:

Man kann während UPDATE auch ein REPLACE verwenden.

PHP Code:
mysql_query("UPDATE user SET bilder = REPLACE(bilder, bilder,bilder+1) WHERE username = $session"); 
Alles Andere würde wenig Sinn machen.

PS:


Wer solche Zeilen schreibt, hat entweder keine Ahnung von PHP, ErrorReporting oder beidem.
versuch es doch mal mit
PHP Code:
mysql_query($parameter) OR DIE ($paramter
davon abgesehen ist eine Fehlerausgabe erst dann Sinnvoll, wenn sie dir auch einen Fehler ausgibt. Das würde dir dann Stundenlanges rätseln ersparen. Und eine richtige Fehlerausgabe wäre ein
PHP Code:
OR DIE ( '['.mysql_errno().'] ->  '.mysql_error()); 
an der Stelle von Fehlgeschlagen
Erstmal danke dir für die Hilfe.
Mal eine kleine Info an dich: Was gibt dir das Recht einfach zu sagen, weil jemand das so gelernt hat, dass derjenige keine Ahnung von PHP hat?
Ich denke niemand hier ist perfekt, und nach 6 Stunden Code schreiben, geht die Konzentration ein wenig verloren.
2. Lern ich PHP seit Neuestem erst. Konntest du am Anfang alles perfekt?

Tut mir leid, dass ich das schreiben musste, aber sowas kann bitte nicht sein.

Trotzdem nochmal danke für die Hilfestellung. Ich werde es jetzt mal ausprobieren.
11/22/2012 09:40 Steini00#9
Quote:
Originally Posted by DasPrinzip. View Post
Erstmal danke dir für die Hilfe.
Ich helfe doch gerne :D
Quote:
Originally Posted by DasPrinzip. View Post
Mal eine kleine Info an dich: Was gibt dir das Recht einfach zu sagen, weil jemand das so gelernt hat, dass derjenige keine Ahnung von PHP hat?
Du kannst das so nicht gelernt haben, weil das so nicht funktioniert. Es geht hierbei nicht um Schönheitsfehler oder falsche Schreibform. Sondern um ganz grobe Fehler, die so auf keinen Fall funktionieren können.
Quote:
Originally Posted by DasPrinzip. View Post
Ich denke niemand hier ist perfekt, und nach 6 Stunden Code schreiben, geht die Konzentration ein wenig verloren.
Ich arbeite täglich mehr als 12 Stunden am PC und mir ist klar, dass man da mal Fehler machen kann. Aber sowas ist einfach kein "hab mich verschrieben"-Fehler sondern ein ganz klarer "mir fehlt die Erfahrung"-Fehler.

Quote:
Originally Posted by DasPrinzip. View Post
2. Lern ich PHP seit Neuestem erst. Konntest du am Anfang alles perfekt?

Tut mir leid, dass ich das schreiben musste, aber sowas kann bitte nicht sein.

Trotzdem nochmal danke für die Hilfestellung. Ich werde es jetzt mal ausprobieren.
Versteh ich jetzt nicht... Also entweder du kannst PHP oder ich hatte Recht mit meiner Aussagen, dass du keine Ahnung von PHP und ErrorReporting hast.

Du solltest dir wirklich einen besseren Editor zulegen. Dein Syntax-Highlighter hätte dir einen solchen Fehler knall rot um die Augen schleudern müssen.
11/22/2012 09:58 DasPrinzip.#10
Quote:
[1054] -> Unknown column '***' in 'where clause'
Der Fehler kommt dabei raus.. '***' steht wohlmöglich der Session Username
11/22/2012 10:16 boxxiebabee#11
Was willst denn eig. erreichen? Wieviele Bilder der User hochgeladen hat?
Wenn ja, dann mach ne neue Table und für jedes Bild nen neuen Eintrag, dazu seine user id eintragen, und über COUNT(*) dann die Anzahl ermittlen.


Quote:
Originally Posted by Steini00 View Post
Ich kenne da auch so ein Spiele bei dem die Kinder herum hüpfen und raten welche Türe ihnen das Gesicht verbrennen könnte :rolleyes:

Man kann während UPDATE auch ein REPLACE verwenden.

PHP Code:
mysql_query("UPDATE user SET bilder = REPLACE(bilder, bilder,bilder+1) WHERE username = $session"); 
Alles Andere würde wenig Sinn machen.

PS:


Wer solche Zeilen schreibt, hat entweder keine Ahnung von PHP, ErrorReporting oder beidem.
versuch es doch mal mit
PHP Code:
mysql_query($parameter) OR DIE ($paramter
davon abgesehen ist eine Fehlerausgabe erst dann Sinnvoll, wenn sie dir auch einen Fehler ausgibt. Das würde dir dann Stundenlanges rätseln ersparen. Und eine richtige Fehlerausgabe wäre ein
PHP Code:
OR DIE ( '['.mysql_errno().'] ->  '.mysql_error()); 
an der Stelle von Fehlgeschlagen
Wer im Glashaus sitzt sollte nicht mit Steinen werfen. Da Fehlen die Hochkommas bei dir ;)
11/22/2012 10:51 DasPrinzip.#12
Quote:
Originally Posted by boxxiebabee View Post
Was willst denn eig. erreichen? Wieviele Bilder der User hochgeladen hat?
Wenn ja, dann mach ne neue Table und für jedes Bild nen neuen Eintrag, dazu seine user id eintragen, und über COUNT(*) dann die Anzahl ermittlen.




Wer im Glashaus sitzt sollte nicht mit Steinen werfen. Da Fehlen die Hochkommas bei dir ;)
Schön das du mitdenkst und wusstest was ich machen wollte :D Hat so super funktioniert ;)
Ich lebe eher immer gerne auf einer Datenbank .. Aber naja 2 Schaden auch nie ;)

Problem erledigt.
11/22/2012 10:56 Cr4nkSt4r#13
Quote:
[1054] -> Unknown column '***' in 'where clause'
Der Fehler kommt dabei raus.. '***' steht wohlmöglich der Session Username
Wieso wohl möglich?
Du musst schon genau wissen und sagen was dort steht. Wie soll man dir sonst helfen?


Gibt viele Varianten die man testen kann, alles schön einklammern damit auch nie SQL bei einem Wert denken könne es gehöre zu SQL o.Ä., den vorherigen Wert auslesen und abändern, dann abspeichern, vernünftige Fehler ausgeben lassen und nicht zensieren -.-, und und und...



PHP Code:
mysql_query("UPDATE `user` SET `bilder` = bilder + 1 WHERE `username` = '".$session."'"); 

PHP Code:
$bilder mysql_query("SELECT `bilder` FROM `user` WHERE `username` = '".$session."'");

$bilder $bilder 1;

mysql_query("UPDATE `user` SET `bilder` = ".$bilder." WHERE `username` = '".$session."'"); 


~ regards
11/22/2012 12:26 Steini00#14
Zum Thema Glashaus und Steine - Ich habe es nicht als Ziel gesehen, eine fertige Lösung zu präsentieren, sondern wollte mit meinem Beispiel lediglich einen Lösungsansatz bieten.
PHP Code:
mysql_query($parameter) OR DIE ($paramter
Auch das hier ist nur ein Ansatz und kann so nicht verwendet werden.

Zum Thema extra Tabelle und COUNT - Mir entzieht sich der Lösungsansatz von boxxiebabee jeglicher Logick. (Bitte nicht persönlich nehmen)
Wenn du mit SELECT Spaltenname an Stelle von SELECT * arbeitest, stört es eigentlich nicht, wenn du es sogar in der selben Tabelle hast. Du kannst es aber auch gerne in einer extra Tabelle machen. Auf jeden Fall würde ich dir aber von 1 Eintrag pro Bild abraten. Und somit auch von COUNT. Ich kann dir auch an einem kleinen Rechenbeispiel zeigen warum.

Situation: 1.000 User laden täglich ein Bild hoch. Dauer - 3 Jahre
Somit hast du 1000 x 1 x 3 x 365 = ~ 1.000.000 Bilder
Das entspricht etwa 1.000 Bilder pro User.
Weiter hat es zur Folge, dass deine Tabelle 1 Mio Datensätze hat. Ein COUNT müsste also für jeden Aufruf, bei dem die Bilderanzahl eines Users abgefragt werden, 1 Mio Datensätze durchsuchen und auf 1.000 hochzählen.
Ein weiterer Punkt wäre noch etwas wie die "Top 5". Hast du mal daran gedacht, wie ein Script aussehen könnte, das dir die Top 5 User mit den meisten Bildern anzeigt? Am Ende läuft es dann darauf hinaus, dass du 1.000 User durchzählen musst, was 1.000 x 1.000.000 Datensätze bedeutet.

Mein Ansatz:
Neue Tabelle - Ein Eintrag pro User (nicht pro Bild) - hoch zählen
Warum?
1. Die Tabelle hat somit 1.000 statt 1 Mio Datensätze
2. Abfrage nach Bildermenge läuft schneller und verbraucht weniger Leistung
3. Sortierfunktion (Order BY Bilderanzahl oder oder BY Username/UserID)
4. Top 5 Funktion ganz einfach durch ORDER BY und LIMIT 5

Ich kenne dein Projekt nicht, habe keine Ahnung wie viele User du dir in 10 Jahren anlachen wirst und wie viele Bilder es werden. Aber ich halte meinen Lösungsweg für deutlich Sinnvoller, da er einfach flexibler und performanter ist.
11/22/2012 12:35 Cr4nkSt4r#15
Für ORDER BY und LIMIT 5 etc. brauchst man dennoch nicht zwangsweise eine neue Tabelle, er kann einfach die behalten die er hat.
Ich denke nicht dass dort irgendwann so viele User angemeldet sein werden oder das Script "nutzen" dass es dann dank Performance nicht mehr zügig weiter geht. Da braucht er schon ne Menge User bis es an fängt langsam zu werden.
Außerdem wären nach deinem Vorhaben auch wieder zwei Abfragen notwendig bzw. eine JOIN Abfrage um an alle Daten zu kommen wenn man sie denn möchte.
Nimmt sich bei so wenig Spalten eig. nichts, egal wie man es macht.

Ich für meinen Teil würde lieber sehen wie es nun um den Fehler steht und ob der TS schon weiter gekommen ist ohne die COUNT Methode zu nutzen.


~ regards