Mysql/php foutmelding
Na een tijd gestopt te zijn met php toch maar weer begonnn..
Hierbij:
Quote:
Succesfully connected Logs insert gone wrong
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.188.253,,html_special_chars(Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) Appl' at line 4
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.188.253,,html_special_chars(Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) Appl' at line 4
Code:
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
40
41
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
40
41
<?php
session_start();
//config.php\\
#---edit after this---#
$dbhost = 'localhost'; //most of the time 'localhost'
$dbuname = 'xx'; //Database username
$dbupass = 'xx'; //Database user password
$dbname = 'xx'; //Database name
$logger_name = 'my ip logger'; //Your logger name
#--- stop editting ---#
$connect = mysql_connect($dbhost,$dbuname,$dbupass);
if(mysql_select_db($dbname)){
}else{
'Could not connect to'.$dbname;
die(mysql_error());
}
if (!$connect) {
die('Could not connect:' . mysql_error());
} elseif($connect){
echo 'Succesfully connected';
}
$loginname = $_SESSION['name'];
$ip = $_SERVER['REMOTE_ADDR'];
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$query = mysql_query("INSERT INTO admin_logs
(id,ip,loginname,user_agent,date)
VALUES
(123,$ip,$loginname,html_special_chars($user_agent),$date)");
if(!$query){
echo 'Logs insert gone wrong';
die(mysql_error());
}
?>
session_start();
//config.php\\
#---edit after this---#
$dbhost = 'localhost'; //most of the time 'localhost'
$dbuname = 'xx'; //Database username
$dbupass = 'xx'; //Database user password
$dbname = 'xx'; //Database name
$logger_name = 'my ip logger'; //Your logger name
#--- stop editting ---#
$connect = mysql_connect($dbhost,$dbuname,$dbupass);
if(mysql_select_db($dbname)){
}else{
'Could not connect to'.$dbname;
die(mysql_error());
}
if (!$connect) {
die('Could not connect:' . mysql_error());
} elseif($connect){
echo 'Succesfully connected';
}
$loginname = $_SESSION['name'];
$ip = $_SERVER['REMOTE_ADDR'];
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$query = mysql_query("INSERT INTO admin_logs
(id,ip,loginname,user_agent,date)
VALUES
(123,$ip,$loginname,html_special_chars($user_agent),$date)");
if(!$query){
echo 'Logs insert gone wrong';
die(mysql_error());
}
?>
Het rare is dat hij regel 4 aangeeft terwijl hij op een verdere regel is... En de rest wel gewoon parsed.
Iemand die het weet?
Gewijzigd op 18/09/2013 16:08:05 door Erwin H
Kan je het een klein beetje verduidelijken?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$query = mysql_query("INSERT INTO admin_logs
(id,ip,loginname,user_agent,date)
VALUES
(123,'$ip','$loginname','".html_special_chars($user_agent)."','$date')");
?>
$query = mysql_query("INSERT INTO admin_logs
(id,ip,loginname,user_agent,date)
VALUES
(123,'$ip','$loginname','".html_special_chars($user_agent)."','$date')");
?>
NIET
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$query = mysql_query("INSERT INTO admin_logs
(id,ip,loginname,user_agent,date)
VALUES
(123,$ip,$loginname,html_special_chars($user_agent),$date)");
?>
$query = mysql_query("INSERT INTO admin_logs
(id,ip,loginname,user_agent,date)
VALUES
(123,$ip,$loginname,html_special_chars($user_agent),$date)");
?>
WEL
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$query = mysql_query("INSERT INTO admin_logs
(id,ip,loginname,user_agent,date)
VALUES
('123', '" . $ip . "', '" . $loginname . "', '" . htmlspecialchars($user_agent) . "', '" . $date . "')");
?>
$query = mysql_query("INSERT INTO admin_logs
(id,ip,loginname,user_agent,date)
VALUES
('123', '" . $ip . "', '" . $loginname . "', '" . htmlspecialchars($user_agent) . "', '" . $date . "')");
?>
Of wat Frank zegt.
Edit: ik had er niet op gelet, maar het is htmlspecialchars()
Gewijzigd op 18/09/2013 17:22:13 door Kris Peeters
nog liever zie ik alle php variabelen buiten quotes. Het is altijd een goed idee om je query even te echo-en zodat je ziet wat er uiteindelijk staat.
Misschien een stomme vraag, maar is het niet htmlspecialchars() inplaats van html_special_chars() ?
dat zeg ik LOL
Aha, was iets te laat met posten :P
Wouter Polman op 18/09/2013 17:12:03:
Kan je het een klein beetje verduidelijken?
Jawel, kijk naar de voorbeelden van Kris en Frank :-)
Wat je moet bedenken is dat elke string tussen quotes hoort. Binnen php en binnen SQL. Dus als je in php een query bouwt met daarin een string waarde, dan krijg je quotes binnen quotes:
De dubbele quotes zijn hier voor de string in php (de query), de enkele quotes zijn voor de string in de SQL query (de waarde).
Variable expansion is dat php een variabele binnen een string ook daadwerkelijk als variabele ziet en niet als onderdeel van de string. Als je de string dan gebruikt dan krijg je de waarde die in die variabele zat te zien en niet de variabele naam. Dit werkt alleen voor strings met dubbele quotes, niet met enkele.
Code (php)
Functies werken hierbinnen echter niet. die moet je buiten de quotes halen: