timestamp lukt niet
Heb 2 tables in mijn database
1 users, met user_id, username, email password adres tel_nummer type_login en geboortedatum
2 test, met username - varchar
insert_time - timestamp
Nu wil ik iedere keer een user inlog, dat in de test tabel de naam en inlogdatum van de betreffende user wordt vermeld
In mijn script staat de volgende regel:
$update_query =
"UPDATE test SET insert_time=NOW() WHERE username='" .$user."'";
de user die inlogt heeft dabn de variabele $user.
Kan iemand uit de brand helpen.
Wat lukt er niet dan?
Gewijzigd op 18/07/2016 20:51:27 door Ben van Velzen
NOW() geeft een DATETIME ('YYYY-MM-DD HH:MM:SS') en moet dus ook worden opgeslagen in een DATETIME veld.
UNIX_TIMESTAMP() geeft de tijd in seconden en moet worden opgeslagen in een TIMESTAMP veld.
Quote:
NOW()
Returns the current date and time as a value in 'YYYY-MM-DD HH:MM:SS' or YYYYMMDDHHMMSS.uuuuuu format, depending on whether the function is used in a string or numeric context. The value is expressed in the current time zone.
mysql> SELECT NOW();
-> '2007-12-15 23:50:26'
mysql> SELECT NOW() + 0;
-> 20071215235026.000000
Returns the current date and time as a value in 'YYYY-MM-DD HH:MM:SS' or YYYYMMDDHHMMSS.uuuuuu format, depending on whether the function is used in a string or numeric context. The value is expressed in the current time zone.
mysql> SELECT NOW();
-> '2007-12-15 23:50:26'
mysql> SELECT NOW() + 0;
-> 20071215235026.000000
Quote:
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
If called with no argument, returns a Unix timestamp (seconds since '1970-01-01 00:00:00' UTC) as an unsigned integer. If UNIX_TIMESTAMP() is called with a date argument, it returns the value of the argument as seconds since '1970-01-01 00:00:00' UTC. date may be a DATE string, a DATETIME string, a TIMESTAMP, or a number in the format YYMMDD or YYYYMMDD. The server interprets date as a value in the current time zone and converts it to an internal value in UTC. Clients can set their time zone as described in Section 10.6, “MySQL Server Time Zone Support”.
mysql> SELECT UNIX_TIMESTAMP();
-> 1447431666
mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19');
-> 1447431619
When UNIX_TIMESTAMP() is used on a TIMESTAMP column, the function returns the internal timestamp value directly, with no implicit “string-to-Unix-timestamp” conversion. If you pass an out-of-range date to UNIX_TIMESTAMP(), it returns 0.
If called with no argument, returns a Unix timestamp (seconds since '1970-01-01 00:00:00' UTC) as an unsigned integer. If UNIX_TIMESTAMP() is called with a date argument, it returns the value of the argument as seconds since '1970-01-01 00:00:00' UTC. date may be a DATE string, a DATETIME string, a TIMESTAMP, or a number in the format YYMMDD or YYYYMMDD. The server interprets date as a value in the current time zone and converts it to an internal value in UTC. Clients can set their time zone as described in Section 10.6, “MySQL Server Time Zone Support”.
mysql> SELECT UNIX_TIMESTAMP();
-> 1447431666
mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19');
-> 1447431619
When UNIX_TIMESTAMP() is used on a TIMESTAMP column, the function returns the internal timestamp value directly, with no implicit “string-to-Unix-timestamp” conversion. If you pass an out-of-range date to UNIX_TIMESTAMP(), it returns 0.
komt elke user standaard voor in de tabel Test?
zo niet: dan zorgen dat hij alsnog geinsert wordt als er niets te updaten bleek te zijn.
Toevoeging op 19/07/2016 15:04:16:
(affected rows = 0
Nu heb ik er date/time van gemaakt en werkt het nog steeds niet.
Hieronder mijn code van login.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
$email=$_POST['email'];
$password=$_POST['password'];
$login=$_POST['login'];
if(isset($login)){
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}
$res = $mysqli->query("SELECT * FROM users where email='$email' and password='$password'");
$row = $res->fetch_assoc();
$name = $row['name_login'];
$user = $row['username'];
$email = $row['email'];
$pass = $row['password'];
$type = $row['type_login'];
if($email==$email && $pass=$password){
session_start();
mysqli_query($link, $upd);
$update_query =
"UPDATE test SET insert_time=NOW() WHERE username='" .$user."'";
if($type=="moderator"){
$_SESSION['mysesi']=$user;
$_SESSION['mytype']=$type;
echo "<script>window.location.assign('muziek_moderator.php')</script>";
} else if($type=="admin"){
$_SESSION['mysesi']=$user;
$_SESSION['mytype']=$type;
echo "<script>window.location.assign('muziek_admin.php')</script>";
} else if($type=="user"){
$_SESSION['mysesi']=$user;
$_SESSION['mytype']=$type;
echo "<script>window.location.assign('muziek.php')</script>";
} else{
?>
$email=$_POST['email'];
$password=$_POST['password'];
$login=$_POST['login'];
if(isset($login)){
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}
$res = $mysqli->query("SELECT * FROM users where email='$email' and password='$password'");
$row = $res->fetch_assoc();
$name = $row['name_login'];
$user = $row['username'];
$email = $row['email'];
$pass = $row['password'];
$type = $row['type_login'];
if($email==$email && $pass=$password){
session_start();
mysqli_query($link, $upd);
$update_query =
"UPDATE test SET insert_time=NOW() WHERE username='" .$user."'";
if($type=="moderator"){
$_SESSION['mysesi']=$user;
$_SESSION['mytype']=$type;
echo "<script>window.location.assign('muziek_moderator.php')</script>";
} else if($type=="admin"){
$_SESSION['mysesi']=$user;
$_SESSION['mytype']=$type;
echo "<script>window.location.assign('muziek_admin.php')</script>";
} else if($type=="user"){
$_SESSION['mysesi']=$user;
$_SESSION['mytype']=$type;
echo "<script>window.location.assign('muziek.php')</script>";
} else{
?>
Verder een paar opmerkingen:
- De ene keer gebruik je de OO-variant met $mysqli-> en de andere keer gebruik je mysqli_query(). Gebruik één van beiden, en bij voorkeur de OO-variant.
- Wachtwoorden ongecodeerd opslaan is doodzonde
- Variabele overkopiëren is onnodig
Gewijzigd op 19/07/2016 15:21:38 door - Ariën -
en wat in het zeldzame geval dat $email niet gelijk is aan $email?
Maar die hele vergelijking snap ik niet. Waarom zou je twee dezelfde variabelen vergelijken? En hier ga je dus al de fout in als je variabelen staat te kopiëren: Je hebt geen zicht meer op wat er werkelijk in zit. "Is het nou de $_POST of is het nou de $row uit de database?"
Gewijzigd op 19/07/2016 15:32:51 door - Ariën -
Nog veel erger: vatbaar voor SQL injectie?
Waar, hoe en is $link gedeclareerd?