een variabele optellen bij het huidige aantal in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Clown

clown

18/02/2008 11:14:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
UPDATE phpbb_users
SET
user_geld= '((SELECT user_geld FROM phpbb_users WHERE user_id = " . $_GET['user_id'] .")+(" . $_POST['user_stars'] . " * 1000000))',

user_stars = '((SELECT user_stars FROM phpbb_users WHERE user_id = " . $_GET['user_id'] . ")+ " . $_POST['user_stars'] . ")',
user_warnings = '" . $_POST['user_warnings'] . "'

WHERE
user_id = " . $_GET['user_id']) or die (mysql_error());


ik heb deze code maar het wil niet echt werken, ik krijg geen foutmelding, maar het aantal user_stars en user_geld wordt gewoon op 0 gezet.

de fout zit nergens anders, maar hier
 
PHP hulp

PHP hulp

29/03/2024 03:02:04
 
Frank -

Frank -

18/02/2008 12:32:00
Quote Anchor link
clown schreef op 18.02.2008 11:14:
maar het aantal user_stars en user_geld wordt gewoon op 0 gezet.
Tja, jij kiest voor MySQL, moet je niet zeuren dat er dingen fout gaan. Dat is een logisch gevolg.

Oorzaak: De subquery zet jij als een string in je query. Wanneer je een string in een veld van het type INT (of een broertje daarvan) probeert te stoppen, zal MySQL (by default) jouw resultaten keurig naar de klote helpen.

Ik heb het al vaker gezegd, ben de tel inmiddels kwijt, maar MySQL is ***beeeeeep***. Een normale database geeft een foutmelding! En dat is wat je hebben wilt als je iets fout doet. Niet dat jouw data naar de bliksem wordt geholpen.

Kortom, schiet MySQL af, help hem naar de eeuwige jachtvelden en ga bv. met PostgreSQL aan de slag.

Al zul je ook dan jouw query moeten aanpassen, je krijgt dan een foutmelding op jouw huidige query... Kortom, zet geen quotes om een subquery.

Ps. De hele query lijkt nergens op...
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Robert Deiman

Robert Deiman

18/02/2008 12:35:00
Quote Anchor link
@pgFrank

Wat de TS wil kan prima met MySQL, alleen moet hij meer controleren op de invoer. Aanpassen van de query is voldoende in principe.
 
Frank -

Frank -

18/02/2008 12:42:00
Quote Anchor link
Robert_Deiman schreef op 18.02.2008 12:35:
@pgFrank

Wat de TS wil kan prima met MySQL, alleen moet hij meer controleren op de invoer. Aanpassen van de query is voldoende in principe.
Weet ik, maar dat je geen foutmeldingen krijg en dat je data naar de bliksem wordt geholpen, dat is wel typisch MySQL. Dat is tegen alle regels, wetten en ongeschreven wetten van een DBMS in!

Vandaar dat ik deze kans niet laat liggen en MySQL nog even een schop na geef.

En het mooiste is nog dat ook jij weet dat dit topic wordt veroozaakt door een brakke "database" en niet door de brakke SQL van de gebruiker. Hij had namelijk gewoon een foutmelding moeten krijgen.

;)
 
Robert Deiman

Robert Deiman

18/02/2008 12:47:00
Quote Anchor link
Klopt, en op dat punt ben ik het ook met je eens. Ik ken de nukken van MySQL zo ondertussen wel.. als m'n host naar pgSQL overstapt of deze aanbied maak ik daar ook meteen gebruik van.

Maar het gaat er in dit topic dus om dat die query voor geen meter klopt. (Zal wel weer een gedownloade crimi zijn :( )

@TS
had er nog meer achteraan moeten komen, in het stukje code dat jij post wordt helemaal geen update gedaan!
 
Lode

Lode

18/02/2008 13:00:00
Quote Anchor link
yay weer rauwe $_POST in de database...
Ruikt naar het 100.000ste criminals script verder... kan aan mijn neus liggen...
 
Clown

clown

18/02/2008 13:05:00
Quote Anchor link
nope kheb et script net zelf gemaatk ik ben bezig aan een admin voor iemand en het heeft niets met criminals of een dergelijk kut spel te maken ;)

ik gebruik in mijn database idd INT's voor stars, warnings en geld

hoe zou de code wel goed zijn :P?
Gewijzigd op 01/01/1970 01:00:00 door clown
 
Frank -

Frank -

18/02/2008 13:17:00
Quote Anchor link
Tja, het blijft een beroerd verhaal, maar volgens mij klopt deze syntax en wordt er beveiligd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
$query
= "
UPDATE
    phpbb_users
SET
    user_geld = (
        (SELECT user_geld FROM phpbb_users WHERE user_id = "
. mysql_real_escape_string($_GET['user_id']).")
        +
        ("
. mysql_real_escape_string($_POST['user_stars']). " * 1000000)
    ),
    user_stars = (
        (SELECT user_stars FROM phpbb_users WHERE user_id = "
. mysql_real_escape_string($_GET['user_id']) . ")
        +
        "
. mysql_real_escape_string($_POST['user_stars']) . "),
    user_warnings = '"
. mysql_real_escape_string($_POST['user_warnings']) . "'
WHERE
    user_id = "
. mysql_real_escape_string($_GET['user_id']);
mysql_query($query) or die (mysql_error(). ' met query: '.$query);
?>

Tip: Ga eens met PostgreSQL aan de slag, je bent er nu al achter dat data in MySQL niet kan worden vertrouwd. De database verknalt zomaar jouw data.
 
Clown

clown

18/02/2008 13:27:00
Quote Anchor link
Ik krijg dan deze foutmelding:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
You can't specify target table 'phpbb_users' for update in FROM clause
met query:
UPDATE phpbb_users SET user_geld = ( (SELECT user_geld FROM phpbb_users WHERE user_id = 2) + (2 * 1000000) ),
user_stars = ( (SELECT user_stars FROM phpbb_users WHERE user_id = 2) + 2),
user_warnings = '5' WHERE user_id = 2


P.S.

is dit niet mogelijk?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
mysql_query("UPDATE user_stars = user_stars + " . $_POST['user_stars'] . " FROM phpbb_users WHERE user_id = " . $_GET['user_id'] . ") or die (mysql_error());

mysql_query("UPDATE user_geld = user_geld + (" . $_POST['user_stars'] . " * 1000000) FROM phpbb_users WHERE user_id = " . $_GET['user_id'] . ") or die (mysql_error());

mysql_query("UPDATE user_warnings = " . $_POST['user_warnings'] . " FROM phpbb_users WHERE user_id = " . $_GET['user_id'] . ") or die (mysql_error());
Gewijzigd op 01/01/1970 01:00:00 door clown
 
Frank -

Frank -

18/02/2008 13:33:00
Quote Anchor link
Dat zal de enige oplossing zijn, MySQL heeft namelijk nogal moeite met subqueries. Vooral de oudere versies gaan hiermee op hun bek.

MySQL zuigt!!!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.