Php - Dubbele update query mislukt
Waarschijnlijk heb ik een domme fout gemaakt in mijn code. Hopelijk kan iemand mij helpen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
date_default_timezone_set('UTC+1');
if (isset($_POST['formsubmitted'])) {
$lastloggedin = NOW();
$query_insert_loggedins = "UPDATE members SET Timesloggedin = Timesloggedin+1 WHERE (email='$email')";
$query_insert_loggedins .= "UPDATE members SET Lastloggedin = $lastloggedin WHERE (email='$email')";
$result_insert_loggedins = mysqli_query($dbc, $query_insert_loggedins);
if (!$result_insert_loggedins) {
echo 'Query mislukt';
}
if (mysqli_affected_rows($dbc) == 1) { //Succes.
}
?>
date_default_timezone_set('UTC+1');
if (isset($_POST['formsubmitted'])) {
$lastloggedin = NOW();
$query_insert_loggedins = "UPDATE members SET Timesloggedin = Timesloggedin+1 WHERE (email='$email')";
$query_insert_loggedins .= "UPDATE members SET Lastloggedin = $lastloggedin WHERE (email='$email')";
$result_insert_loggedins = mysqli_query($dbc, $query_insert_loggedins);
if (!$result_insert_loggedins) {
echo 'Query mislukt';
}
if (mysqli_affected_rows($dbc) == 1) { //Succes.
}
?>
Mvg,
Thijs
Gewijzigd op 26/10/2012 17:34:20 door Thijs anoniem
Je kan er gewoon één query van maken.
- SanThe - op 26/10/2012 17:58:31:
Je kan er gewoon één query van maken.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$query_insert_loggedins = "UPDATE members SET Timesloggedin = Timesloggedin+1, $lastloggedin WHERE (e-mail='$email')";
?>
$query_insert_loggedins = "UPDATE members SET Timesloggedin = Timesloggedin+1, $lastloggedin WHERE (e-mail='$email')";
?>
Zo?
waarom gebruik je () in je WHERE statement
Jaron T op 26/10/2012 18:05:24:
waarom gebruik je () in je WHERE statement
Dat had ik eerder ook al gebruikt voor een query met dubbele "SELECT".
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$query_insert_loggedins = "UPDATE members
SET Timesloggedin = Timesloggedin+1,
Lastloggedin = '" . $lastloggedin . "'
WHERE email = '" . $email . "'";
?>
$query_insert_loggedins = "UPDATE members
SET Timesloggedin = Timesloggedin+1,
Lastloggedin = '" . $lastloggedin . "'
WHERE email = '" . $email . "'";
?>
Gewijzigd op 26/10/2012 18:12:47 door - SanThe -
- SanThe - op 26/10/2012 18:11:40:
Bedankt voor je voortdurende support, maar helaas werkt het nog niet.
Is er misschien een manier waardoor ik kan controleren waar de fout inzit?
Dan zal er geen record zijn gevonden lijkt mij.
Toevoeging op 26/10/2012 18:24:27:
Echo de query eens.
Ik krijg géén error, maar ik zie dat er niks in de database wordt gezet (database connection werkt wél).
- SanThe - op 26/10/2012 18:23:54:
Echo de query eens.
Thijs anoniem op 26/10/2012 17:31:52:
Waarschijnlijk heb ik een domme fout gemaakt in mijn code. Hopelijk kan iemand mij helpen.
Aangezien de oorspronkelijke vraag nog niet is beantwoord:
mysqli_query() kan slechts 1 query tegelijk uitvoeren. Als je toch twee queries wilt uitvoeren, zul je iets anders moeten doen:
1) mysqli_query() twee keer aanroepen.
2) mysqli_multi_query() gebruiken. Let op dat er dan wel een puntkomma tussen de queries moet staan, anders wordt de string als 1 query naar mysql gestuurd en dat is een garantie voor foutmeldingen.
Neemt niet weg dat ik het in dit geval ook beter vind om de twee queries samen te voegen tot 1 query.
Overigens is het ook nog van belang of Lastloggedin een integer (epoch) is of een string-datatype. In het laatste geval zullen er '' om de waarde van $lastloggedin moeten staan.
Toevoeging op 27/10/2012 01:23:12:
Thijs anoniem op 26/10/2012 18:24:58:
Ik krijg géén error, maar ik zie dat er niks in de database wordt gezet (database connection werkt wél).
Even voor de volledigheid: het update-statement werkt alleen op records die al bestaan. Als een record nog niet bestaat in de database (en dat zou kunnen worden gesuggereerd door bovenstaande quote) dan zul je eerst een insert moeten doen.
Gewijzigd op 27/10/2012 01:20:37 door Willem vp
$lastloggedin = NOW();
gaat het nooit werken. NOW() is onbekend in php ( is sql )
tussen quotes, maar ze t maar (zonder quotes) gelijk in query !
Wordt dan zelfs wat leesbaarder
$query_insert_loggedins = "UPDATE members
SET Timesloggedin = Timesloggedin+1,
Lastloggedin = NOW()
WHERE email = '" . $email . "'";
Edit/toevoeg:
Omdat NOW sql FUNCTIE is (en geen value) moet het dus zonder quotes
Gewijzigd op 27/10/2012 11:00:32 door - Roland -
Code (php)
Is dit de beste oplossing? Je zegt <quote>puntkomma</quote> Maar het moet toch gewoon een komma zijn? Ik heb het in beide gevallen geprobeerd, maar er is nog niks in de db veranderd.
Maar maakt niet uit. Begin eerst eens jezelf te controleren:
echo $query
In 90% van gevallen ZIE je dan waar het fout gaat ......
Warning: mysqli_multi_query() expects parameter 1 to be mysqli, string given in /home/a9598527/public_html/login.php on line 13
UPDATE members SET Timesloggedin = Timesloggedin + 1, WHERE e-mail =''UPDATE members SET Lastloggedin = NOW() WHERE e-mail =''
Waarschijnlijk pakt die de e-mail niet. Ik weet alleen niet wat de bovenste regel exact betekent.
Toevoeging op 27/10/2012 12:46:38:
Ik heb de eerste regel opgelost door de volgende code:
en waarschijnlijk mag je weg laten. Je ZIET nu dat hij geen email value heeft !!
En ik zie ook niet waar die vandaan zou moeten komen. $email !!??
misschien bedoel je iets met $_POST['email']
- Roland - op 27/10/2012 12:54:18:
En ik zie ook niet waar die vandaan zou moeten komen. $email !!??
En ik zie ook niet waar die vandaan zou moeten komen. $email !!??
Ik heb de queries nu helemaal op het einde gezet.
Bij echo krijg ik nu wél mijn e-mailadres, maar ik zie in de database niet de UPDATE!
UPDATE members SET Timesloggedin = Timesloggedin + 1, WHERE e-mail ='MIJNEMAIL'UPDATE members SET Lastloggedin = NOW() WHERE e-mail ='MIJNEMAIL'
Toevoeging op 27/10/2012 12:59:42:
Hier is mijn dbstructure:
Timesloggedin varchar(100) latin1_swedish_ci
Lastloggedin varchar(100) latin1_swedish_ci
Is dit goed?
Lastloggedin is een datum (?!) --> waarom dan varchar (en geen date)?
Je wilt in 1 tabel twee velden muteren. Maak dan van je beide query's 1. Dat is naar mijn idee veel logischer / overzichtelijker.
Obelix en Idefix op 27/10/2012 13:19:49:
Timesloggedin is een getal --> waarom dan varchar (en geen int)?
Done!
Obelix en Idefix op 27/10/2012 13:19:49:
Lastloggedin is een datum (?!) --> waarom dan varchar (en geen date)?
Inderdaad. Het is een date ;)
Obelix en Idefix op 27/10/2012 13:19:49:
Je wilt in 1 tabel twee velden muteren. Maak dan van je beide query's 1. Dat is naar mijn idee veel logischer / overzichtelijker.
Ik heb je raad dus opgevolgd, maar zonder resultaat. :(
Hier is mijn volledige php code voor de login pagina.
http://pastebin.com/0WuLxr2h
1 query:
UPDATE table_name
SET column1=value1, column2=value2,...
WHERE some_column=some_value
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$query1 = "UPDATE members SET Timesloggedin = Timesloggedin + 1, Lastloggedin = NOW() WHERE e-mail ='$Email'";
mysqli_query($dbc, $query1);
?>
$query1 = "UPDATE members SET Timesloggedin = Timesloggedin + 1, Lastloggedin = NOW() WHERE e-mail ='$Email'";
mysqli_query($dbc, $query1);
?>
Dit werkt niet.
Kun je me helpen via teamview? Dan is het waarschijnlijk wel sneller geregeld.