MySQL row in een Query
Ik probeer een MySQL row in een INSERT query te stoppen, maar het gaat niet goed met de ' en de ", ik weet niet wanneer ik ze wel moet gebruiken en wanneer niet.
Stel voor ik heb deze query:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$result = mysql_query("SELECT * FROM Maps") or die(mysql_error());
$row = mysql_fetch_array( $result );
$row['Mapname'];
?>
$result = mysql_query("SELECT * FROM Maps") or die(mysql_error());
$row = mysql_fetch_array( $result );
$row['Mapname'];
?>
Hoe krijg ik dan: "Mapname" in een MySQL INSERT query. Kan iemand mij een voorbeeld geven?
Gewoon de variabel $row['Mapname'] gebruiken in de query?
"Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING"
Gewijzigd op 05/01/2012 22:34:13 door Jurrien P
Dat heeft te maken met je qoutes, kan je het hele script neer kwakken?
Code (php)
1
2
3
4
2
3
4
<?php
mysql_query("INSERT INTO Maps (Name, Author, Download, Type, Status, Screenshot, Date, Forumname, Information)
VALUES ('$_POST[name]','$_POST[author]','" . $target . "', '$_POST[Type]', 0, '$_POST[Screenshot]', CURDATE(), $row['member_name'], '$_POST[Information]')");
?>
mysql_query("INSERT INTO Maps (Name, Author, Download, Type, Status, Screenshot, Date, Forumname, Information)
VALUES ('$_POST[name]','$_POST[author]','" . $target . "', '$_POST[Type]', 0, '$_POST[Screenshot]', CURDATE(), $row['member_name'], '$_POST[Information]')");
?>
Code (php)
1
2
3
4
2
3
4
<?php
mysql_query("INSERT INTO Maps (Name, Author, Download, Type, Status, Screenshot, Date, Forumname, Information)
VALUES ('".$_POST['name']."','".$_POST['author']."','".$target."','".$_POST['Type']."',0,'".$_POST[Screenshot]."','".CURDATE()."','".$row['member_name']."','".$_POST['Information']."')");
?>
mysql_query("INSERT INTO Maps (Name, Author, Download, Type, Status, Screenshot, Date, Forumname, Information)
VALUES ('".$_POST['name']."','".$_POST['author']."','".$target."','".$_POST['Type']."',0,'".$_POST[Screenshot]."','".CURDATE()."','".$row['member_name']."','".$_POST['Information']."')");
?>
Gewijzigd op 05/01/2012 22:46:31 door Eddy B
Code (php)
1
2
3
2
3
<?php
$sql = "......VALUES ('" . mysql_real_escape_string($_POST['name']) . "'.......";
?>
$sql = "......VALUES ('" . mysql_real_escape_string($_POST['name']) . "'.......";
?>
En dan de rest ook.
De veiligheid laat inderdaad wel wat te wensen over ja.
Ik moet dus bij elke POST vars en row vars mysql_real_escape_string gebruiken? Het werkt trouwens, zal het over de veiligheid eens bekijken.
De mysql_real_escape_string(); functie zorgt dat alle 'vreemde' tekens worden gestript waardoor kwaadwillige gebruikers onderuit worden gehaald. Iedereen kan nu van alles in je query stoppen en bijvoorbeeld je tabellen verwijderen of vertrouwelijke gegevens kopiëren.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
mysql_query("INSERT INTO Maps (Name, Author, Download, Type, Status, Screenshot, Date, Forumname, Information)
VALUES ('" . mysql_real_escape_string($_POST['name']) . "','" . mysql_real_escape_string($_POST['author']) . "','".$target."','" . mysql_real_escape_string($_POST['Type']) . "',0,'" . mysql_real_escape_string($_POST['Screenshot']) . "', CURDATE() ,'".$row['member_name']."','" . mysql_real_escape_string($_POST['Information']) . "')");
?>
mysql_query("INSERT INTO Maps (Name, Author, Download, Type, Status, Screenshot, Date, Forumname, Information)
VALUES ('" . mysql_real_escape_string($_POST['name']) . "','" . mysql_real_escape_string($_POST['author']) . "','".$target."','" . mysql_real_escape_string($_POST['Type']) . "',0,'" . mysql_real_escape_string($_POST['Screenshot']) . "', CURDATE() ,'".$row['member_name']."','" . mysql_real_escape_string($_POST['Information']) . "')");
?>
Word wel heel lang zo.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$name = mysql_real_escape_string($_POST['name']);
$author = mysql_real_escape_string($_POST['author']);
$type = mysql_real_escape_string($_POST['Type']);
$screenshot = mysql_real_escape_string($_POST['Screenshot']);
$member = mysql_real_escape_string($row['member_name']);
$information = mysql_real_escape_string($_POST['Information']);
mysql_query("INSERT INTO Maps (Name, Author, Download, Type, Status, Screenshot, Date, Forumname, Information)
VALUES ('".$name."','".$author."','".$target."','". $type."',0,'".$screenshot."',CURDATE(),'".$member."','".$information."')");
?>
$name = mysql_real_escape_string($_POST['name']);
$author = mysql_real_escape_string($_POST['author']);
$type = mysql_real_escape_string($_POST['Type']);
$screenshot = mysql_real_escape_string($_POST['Screenshot']);
$member = mysql_real_escape_string($row['member_name']);
$information = mysql_real_escape_string($_POST['Information']);
mysql_query("INSERT INTO Maps (Name, Author, Download, Type, Status, Screenshot, Date, Forumname, Information)
VALUES ('".$name."','".$author."','".$target."','". $type."',0,'".$screenshot."',CURDATE(),'".$member."','".$information."')");
?>
Dat zou kunnen, maar dat kost natuurlijk ook meer geheugen.
Toevoeging op 05/01/2012 23:18:04:
Oja, $member hoef je trouwens niet te escapen aangezien die variabel uit de database komt.
Ik snap het nu. Beiden, heel erg bedankt. Weet ik ook weer meer over de veiligheid.
Eddy Bisschops op 05/01/2012 23:15:18:
Oja, $member hoef je trouwens niet te escapen aangezien die variabel uit de database komt.
Ik weet niet of dit wel zo is.
En die $target, waar komt dat vandaan?
Target is een pad wat in de datbase gaat.
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
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
<?php
$sql = "
INSERT INTO Maps (
Name
, Author
, Download
, Type
, Status
, Screenshot
, Date
, Forumname
, Information
) VALUES (
'" . mysql_real_escape_string($_POST['name']) . "'
,'" . mysql_real_escape_string($_POST['author']) . "'
,'" . mysql_real_escape_string($target) . "'
,'" . mysql_real_escape_string($_POST['Type']) . "'
,0
,'" . mysql_real_escape_string($_POST['Screenshot']) . "'
, CURDATE()
,'" . mysql_real_escape_string($row['member_name']) . "'
,'" . mysql_real_escape_string($_POST['Information']) . "'
)";
$res = mysql_query($sql);
?>
$sql = "
INSERT INTO Maps (
Name
, Author
, Download
, Type
, Status
, Screenshot
, Date
, Forumname
, Information
) VALUES (
'" . mysql_real_escape_string($_POST['name']) . "'
,'" . mysql_real_escape_string($_POST['author']) . "'
,'" . mysql_real_escape_string($target) . "'
,'" . mysql_real_escape_string($_POST['Type']) . "'
,0
,'" . mysql_real_escape_string($_POST['Screenshot']) . "'
, CURDATE()
,'" . mysql_real_escape_string($row['member_name']) . "'
,'" . mysql_real_escape_string($_POST['Information']) . "'
)";
$res = mysql_query($sql);
?>
Zo heb je nog steeds alles in één en blijft het overzichtelijk.
Gewijzigd op 06/01/2012 03:52:48 door B a s
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
INSERT INTO Maps (
Name
, Author
, Download
, Type
, Status
, Screenshot
, Date
, Forumname
, Information
)
SELECT
'" . mysql_real_escape_string($_POST['name']) . "'
,'" . mysql_real_escape_string($_POST['author']) . "'
,'" . mysql_real_escape_string($target) . "'
,'" . mysql_real_escape_string($_POST['Type']) . "'
,0
,'" . mysql_real_escape_string($_POST['Screenshot']) . "'
, CURDATE()
, member_name
,'" . mysql_real_escape_string($_POST['Information']) . "'
FROM maps
WHERE .....;
Name
, Author
, Download
, Type
, Status
, Screenshot
, Date
, Forumname
, Information
)
SELECT
'" . mysql_real_escape_string($_POST['name']) . "'
,'" . mysql_real_escape_string($_POST['author']) . "'
,'" . mysql_real_escape_string($target) . "'
,'" . mysql_real_escape_string($_POST['Type']) . "'
,0
,'" . mysql_real_escape_string($_POST['Screenshot']) . "'
, CURDATE()
, member_name
,'" . mysql_real_escape_string($_POST['Information']) . "'
FROM maps
WHERE .....;
Let wel, hier moet je wel zorgen dat je maar 1 rij uit je andere tabel krijgt. Er moet dus nog een WHERE clause zijn om de specifieke member_name uit die andere tabel te krijgen. Krijg je meerdere rijen terug, dan worden er dus ook meerdere geinsert.
Gewijzigd op 06/01/2012 09:32:31 door Erwin H
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$sql = "
INSERT INTO
Maps
SET
Name = '".mysql_real_escape_string($_POST['name'])."',
Author = '".mysql_real_escape_string($_POST['author'])."',
Download = '".mysql_real_escape_string($target)."',
Type = '".mysql_real_escape_string($_POST['Type'])."',
Status = '0',
Screenshot = '".mysql_real_escape_string($_POST['Screenshot'])."',
CURDATE(),
Forumname = '".mysql_real_escape_string($row['member_name'])."',
Infomration = '".mysql_real_escape_string($_POST['Information'])."'");
?>
$sql = "
INSERT INTO
Maps
SET
Name = '".mysql_real_escape_string($_POST['name'])."',
Author = '".mysql_real_escape_string($_POST['author'])."',
Download = '".mysql_real_escape_string($target)."',
Type = '".mysql_real_escape_string($_POST['Type'])."',
Status = '0',
Screenshot = '".mysql_real_escape_string($_POST['Screenshot'])."',
CURDATE(),
Forumname = '".mysql_real_escape_string($row['member_name'])."',
Infomration = '".mysql_real_escape_string($_POST['Information'])."'");
?>
Ieder zijn ding offcourse
Eddy Bisschops op 05/01/2012 23:15:18:
Oja, $member hoef je trouwens niet te escapen aangezien die variabel uit de database komt.
Oja, $member hoef je trouwens niet te escapen aangezien die variabel uit de database komt.
Dat zou ik zo niet durven beweren, mysql_real_escape_string haalt de ' namelijk niet weg, maar zet er een \ voor. Deze is na het oslaan weer weg, en als je hem dus opvraagt heb je weer een normale string met een ' zonder \ ervoor.
@Jacco, nu je het zegt klinkt het best logisch ja. Dan moet ik toch maar eens systemen gaan updaten.