MySQL row in een Query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jurrien P

Jurrien P

05/01/2012 22:28:50
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$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?
 
PHP hulp

PHP hulp

13/10/2024 00:49:14
 
Eddy B

Eddy B

05/01/2012 22:31:18
Quote Anchor link
Gewoon de variabel $row['Mapname'] gebruiken in de query?
 
Jurrien P

Jurrien P

05/01/2012 22:33:56
Quote Anchor link
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"
Gewijzigd op 05/01/2012 22:34:13 door Jurrien P
 
Eddy B

Eddy B

05/01/2012 22:38:10
Quote Anchor link
Dat heeft te maken met je qoutes, kan je het hele script neer kwakken?
 
Jurrien P

Jurrien P

05/01/2012 22:39:12
Quote Anchor link
Het gaat dus om line 3 in dit geval:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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]')");
?>
 
Eddy B

Eddy B

05/01/2012 22:44:53
Quote Anchor link
Let beter op je quotes, alle variabelen moeten buiten de query zelf staan.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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']."')");
?>
Gewijzigd op 05/01/2012 22:46:31 door Eddy B
 
- SanThe -

- SanThe -

05/01/2012 22:45:10
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= "......VALUES ('" . mysql_real_escape_string($_POST['name']) . "'.......";
?>

En dan de rest ook.
 
Eddy B

Eddy B

05/01/2012 22:48:04
Quote Anchor link
De veiligheid laat inderdaad wel wat te wensen over ja.
 
Jurrien P

Jurrien P

05/01/2012 23:01:20
Quote Anchor link
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.
 
Eddy B

Eddy B

05/01/2012 23:03:09
Quote Anchor link
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.
 
Jurrien P

Jurrien P

05/01/2012 23:11:11
Quote Anchor link
Dat moeten we niet hebben. Doe ik het nu juist?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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']) . "')");

?>


Word wel heel lang zo.
 
Eddy B

Eddy B

05/01/2012 23:15:18
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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."')");
?>


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.
 
Jurrien P

Jurrien P

05/01/2012 23:25:15
Quote Anchor link
Ik snap het nu. Beiden, heel erg bedankt. Weet ik ook weer meer over de veiligheid.
 
- SanThe -

- SanThe -

06/01/2012 00:07:56
Quote Anchor link
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?
 
Jurrien P

Jurrien P

06/01/2012 02:46:29
Quote Anchor link
Target is een pad wat in de datbase gaat.
 
B a s
Beheerder

B a s

06/01/2012 03:51:17
Quote Anchor link
Wat ik mooier vindt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
?>


Zo heb je nog steeds alles in één en blijft het overzichtelijk.
Gewijzigd op 06/01/2012 03:52:48 door B a s
 
Erwin H

Erwin H

06/01/2012 09:31:41
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 .....;

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
 
Jelle -

Jelle -

06/01/2012 09:34:10
Quote Anchor link
Dit vind ik zelf overzichtelijker

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'])."'");

?>


Ieder zijn ding offcourse
 
Jacco Brandt

Jacco Brandt

06/01/2012 11:43:07
Quote Anchor link
Eddy Bisschops op 05/01/2012 23:15:18:

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.
 
Eddy B

Eddy B

06/01/2012 12:24:24
Quote Anchor link
@Jacco, nu je het zegt klinkt het best logisch ja. Dan moet ik toch maar eens systemen gaan updaten.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.