MySQL row in een Query
Hoi,
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:
Hoe krijg ik dan: "Mapname" in een MySQL INSERT query. Kan iemand mij een voorbeeld geven?
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?
Dat dacht ik eerst ook, maar dan krijg ik:
"Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING"
"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?
Het gaat dus om line 3 in dit geval:
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]')");
?>
Let beter op je quotes, alle variabelen moeten buiten de query zelf staan.
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.
Dat moeten we niet hebben. Doe ik het nu juist?
Word wel heel lang zo.
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.
Wat ik mooier vindt:
Zo heb je nog steeds alles in één en blijft het overzichtelijk.
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
Als je overigens data vanuit de ene tabel nodig hebt voor een insert in een andere, dan kan dat ook direct in een query als volgt:
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.
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
Dit vind ik zelf overzichtelijker
Ieder zijn ding offcourse
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.




