foto
mijn fotoscript slaat de foto's op in de juiste mappen met een md5 erbij.
Het probleem is dat ik de foto met bijhorende md5 (voorbeeld 064397a1.jpg)
niet in de database krijg.
Hier het stuk dat de foto's naar de mappen verplaatst.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
if (is_uploaded_file($file_array['tmp_name']))
{
$$file_index = "" . random_string(6) . substr(trim($file_array['name']), -6, 6);
do_resize($file_array['tmp_name'],$picture_folder . $$file_index,$maximagewidth,$maximageheight);
do_resize($file_array['tmp_name'],$thumb_folder . $$file_index,$maxthumbwidth,$maxthumbheight);
} else
{
$uploadresult[$file_index] = "<b>" . strtoupper($file_index) . " is niet geupload</b>";
// 3 = FILE_UPLOAD_FAILED
$error = 3;
}
?>
if (is_uploaded_file($file_array['tmp_name']))
{
$$file_index = "" . random_string(6) . substr(trim($file_array['name']), -6, 6);
do_resize($file_array['tmp_name'],$picture_folder . $$file_index,$maximagewidth,$maximageheight);
do_resize($file_array['tmp_name'],$thumb_folder . $$file_index,$maxthumbwidth,$maxthumbheight);
} else
{
$uploadresult[$file_index] = "<b>" . strtoupper($file_index) . " is niet geupload</b>";
// 3 = FILE_UPLOAD_FAILED
$error = 3;
}
?>
Hier de sql waarmee ik de gegevens tracht op te slaan.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
$SQL = "INSERT INTO `advertenties` (
`adv_id` ,
`foto` ,
`text` ,
`email` ,
`website` ,
`telefoon` ,
`gepl_op` ,
`gepl_tot` ,
`cat_id` ,
`ip` ,
`provider`
)
VALUES (
NULL , '". $_FILES['foto']['name'] ."', '". strip_tags($_POST["text"]) ."', '". $_POST["email"] ."', '". $_POST["website"] ."', '". $_POST["telefoon"] ."','". $timestamp ."' , '". $timestamp2 ."', '". $_POST["categorie"] ."', '" .$_SERVER['REMOTE_ADDR']."', '" .gethostbyaddr($_SERVER['REMOTE_ADDR'])."'
)";
//echo "<---debug tekst--->";
//echo "<----- DEBUG sql<br><br>" . $SQL . "<br><br>---->";
$data = mysql_query($SQL) or die (mysql_errno());
?>
$SQL = "INSERT INTO `advertenties` (
`adv_id` ,
`foto` ,
`text` ,
`email` ,
`website` ,
`telefoon` ,
`gepl_op` ,
`gepl_tot` ,
`cat_id` ,
`ip` ,
`provider`
)
VALUES (
NULL , '". $_FILES['foto']['name'] ."', '". strip_tags($_POST["text"]) ."', '". $_POST["email"] ."', '". $_POST["website"] ."', '". $_POST["telefoon"] ."','". $timestamp ."' , '". $timestamp2 ."', '". $_POST["categorie"] ."', '" .$_SERVER['REMOTE_ADDR']."', '" .gethostbyaddr($_SERVER['REMOTE_ADDR'])."'
)";
//echo "<---debug tekst--->";
//echo "<----- DEBUG sql<br><br>" . $SQL . "<br><br>---->";
$data = mysql_query($SQL) or die (mysql_errno());
?>
Wat doe ik hier fout?
Verder is je script lek voor sql-injection.
Hij slaat de foto's nu op in de databank met de originele naam van de foto (bv: wilm1.jpg) en in de mappen met (bv 064397a1.jpg).
Dus is het onmogelijk om ze uit te lezen met 2 verschillende waarde!
Volgens mij ligt het ergens aan de sql?
Gewijzigd op 01/01/1970 01:00:00 door jacques
Je gebruikt md5()? Dat zijn 32 characters.Is je veld wel groot genoeg?
mysql_real_escape_string() om ze te beveiligen. En haal je backticks uit je query.
Als je zelf al vermoed dat het aan je sql ligt, moet je die gewoon even echo-en . Kijk of de syntax dan klopt, of de gegevens kloppen. Gebruik voor je post velden in een query altijd SanThe schreef op 06.07.2009 14:25:
Je gebruikt md5()? Dat zijn 32 characters.Is je veld wel groot genoeg?
ik sla ze op in de databank als foto varchar(200). Dus dit is zeker lang genoeg.
jacques schreef op 06.07.2009 14:40:
ik sla ze op in de databank als foto varchar(200). Dus dit is zeker lang genoeg.
SanThe schreef op 06.07.2009 14:25:
Je gebruikt md5()? Dat zijn 32 characters.Is je veld wel groot genoeg?
ik sla ze op in de databank als foto varchar(200). Dus dit is zeker lang genoeg.
Heb ik al gedaan, zie hier onder:
<----- DEBUG sql
INSERT INTO `advertenties` ( `adv_id` , `foto` , `text` , `email` , `website` , `telefoon` , `gepl_op` , `gepl_tot` , `cat_id` , `ip` , `provider` ) VALUES ( NULL , 'test06.jpg', 'Dsqsdqqsd', '[email protected]'www.ziemaar.be', '0473/51 8952, '2009-07-06 14:41:07' , '2009-07-13 14:41:07', '1', '127.0.0.1', 'localhost' )
Dus zoals je ziet neemt hij gewoon de fotonaam over!
---->
Afra schreef op 06.07.2009 14:29:
Als je zelf al vermoed dat het aan je sql ligt, moet je die gewoon even echo-en . Kijk of de syntax dan klopt, of de gegevens kloppen. Gebruik voor je post velden in een query altijd mysql_real_escape_string() om ze te beveiligen. En haal je backticks uit je query.
Dus je bedoeld dus dit:
Gelieve Niet Bumpen::
Gewijzigd op 01/01/1970 01:00:00 door jacques
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$query = "INSERT INTO blabla VALUES ('iets', 'nogiets', '".$_POST['onveilig']"', '".mysql_real_escape_string($_POST['veilig'])."')";
if(!$result = mysql_query($query)){
trigger_error(mysql_error());
}
else {
//rest code
//fetchen e.d.
}
?>
$query = "INSERT INTO blabla VALUES ('iets', 'nogiets', '".$_POST['onveilig']"', '".mysql_real_escape_string($_POST['veilig'])."')";
if(!$result = mysql_query($query)){
trigger_error(mysql_error());
}
else {
//rest code
//fetchen e.d.
}
?>
En valt me nu op dat je in je query backticks bij je VALUES hebt, dat moeten gewoon single quotes zijn. En bij veldnamen maakt phpmyadmin bbijvoorbeeld er mooi `veldnaam` van, maar we preferen gewoon zonder backticks. Dus als je dat allemaal gefixed hebt, kan je nog een keer je goede query bekijken, en hier posten.
Afra schreef op 06.07.2009 16:13:
Zo bedoel ik:
En valt me nu op dat je in je query backticks bij je VALUES hebt, dat moeten gewoon single quotes zijn. En bij veldnamen maakt phpmyadmin bbijvoorbeeld er mooi `veldnaam` van, maar we preferen gewoon zonder backticks. Dus als je dat allemaal gefixed hebt, kan je nog een keer je goede query bekijken, en hier posten.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$query = "INSERT INTO blabla VALUES ('iets', 'nogiets', '".$_POST['onveilig']"', '".mysql_real_escape_string($_POST['veilig'])."')";
if(!$result = mysql_query($query)){
trigger_error(mysql_error());
}
else {
//rest code
//fetchen e.d.
}
?>
$query = "INSERT INTO blabla VALUES ('iets', 'nogiets', '".$_POST['onveilig']"', '".mysql_real_escape_string($_POST['veilig'])."')";
if(!$result = mysql_query($query)){
trigger_error(mysql_error());
}
else {
//rest code
//fetchen e.d.
}
?>
En valt me nu op dat je in je query backticks bij je VALUES hebt, dat moeten gewoon single quotes zijn. En bij veldnamen maakt phpmyadmin bbijvoorbeeld er mooi `veldnaam` van, maar we preferen gewoon zonder backticks. Dus als je dat allemaal gefixed hebt, kan je nog een keer je goede query bekijken, en hier posten.
Deze zijn nu aangepast, maar daar komen de juiste gegevens ook niet met in de database. Dat het veiliger en juister is daarvoor mijn dank.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
/*opslaan gevens voor databank*/
$SQL = "INSERT INTO advertenties (
`adv_id` ,
`foto` ,
`text` ,
`email` ,
`website` ,
`telefoon` ,
`gepl_op` ,
`gepl_tot` ,
`cat_id` ,
`ip` ,
`provider`
)
VALUES (
NULL , '". mysql_real_escape_string ($_FILES['foto']['name']) ."', '". strip_tags($_POST["text"]) ."', '". mysql_real_escape_string ($_POST["email"]) ."', '". mysql_real_escape_string ($_POST["website"]) ."', '". mysql_real_escape_string ($_POST["telefoon"]) ."',
'". $timestamp ."' , '". $timestamp2 ."', '". mysql_real_escape_string ($_POST["categorie"]) ."', '" .mysql_real_escape_string ($_SERVER['REMOTE_ADDR'])."', '" .gethostbyaddr($_SERVER['REMOTE_ADDR'])."'
)";
if(!$result = mysql_query($SQL)){
trigger_error(mysql_error());
}
else { rest code }
?>
/*opslaan gevens voor databank*/
$SQL = "INSERT INTO advertenties (
`adv_id` ,
`foto` ,
`text` ,
`email` ,
`website` ,
`telefoon` ,
`gepl_op` ,
`gepl_tot` ,
`cat_id` ,
`ip` ,
`provider`
)
VALUES (
NULL , '". mysql_real_escape_string ($_FILES['foto']['name']) ."', '". strip_tags($_POST["text"]) ."', '". mysql_real_escape_string ($_POST["email"]) ."', '". mysql_real_escape_string ($_POST["website"]) ."', '". mysql_real_escape_string ($_POST["telefoon"]) ."',
'". $timestamp ."' , '". $timestamp2 ."', '". mysql_real_escape_string ($_POST["categorie"]) ."', '" .mysql_real_escape_string ($_SERVER['REMOTE_ADDR'])."', '" .gethostbyaddr($_SERVER['REMOTE_ADDR'])."'
)";
if(!$result = mysql_query($SQL)){
trigger_error(mysql_error());
}
else { rest code }
?>