/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
mysql_real_escape_string
Fra : Harald


Dato : 05-12-07 15:49

Hej

Er det meningen at man skal pakke ALT ind i en mysql_real_escape_string
inden SQL´en udføres? Det virker jo lidt bøvligt hvis man har mange felter
som kunden har udfyldt på en form, findes der en lettere automatiseret
metode?

/H



 
 
Harald (06-12-2007)
Kommentar
Fra : Harald


Dato : 06-12-07 08:58

"Harald" <noname@nomail.dk> skrev i en meddelelse
news:4756ba47$0$90264$14726298@news.sunsite.dk...
> Hej
>
> Er det meningen at man skal pakke ALT ind i en mysql_real_escape_string
> inden SQL´en udføres? Det virker jo lidt bøvligt hvis man har mange felter
> som kunden har udfyldt på en form, findes der en lettere automatiseret
> metode?

Jeg har tidligere benyttet magic_quotes_gpc = On, men nu skriver de jo:

This feature is DEPRECATED and REMOVED as of PHP 6.0.0. Relying on this
feature is highly discouraged.

/H



Mads Lie Jensen (06-12-2007)
Kommentar
Fra : Mads Lie Jensen


Dato : 06-12-07 15:20

On Wed, 5 Dec 2007 15:48:38 +0100, "Harald" <noname@nomail.dk> wrote:

>Er det meningen at man skal pakke ALT ind i en mysql_real_escape_string
>inden SQL´en udføres? Det virker jo lidt bøvligt hvis man har mange felter
>som kunden har udfyldt på en form, findes der en lettere automatiseret
>metode?

Det er bøvlet at kode ....
Du kan da altid loop'e over $_POST:

foreach ($_POST as $key => $val) {
   $post[$key] = mysql_real_escape_string($val);
}

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

Martin (06-12-2007)
Kommentar
Fra : Martin


Dato : 06-12-07 15:51

Harald wrote:
> Hej
>
> Er det meningen at man skal pakke ALT ind i en mysql_real_escape_string
> inden SQL´en udføres? Det virker jo lidt bøvligt hvis man har mange felter
> som kunden har udfyldt på en form, findes der en lettere automatiseret
> metode?
>
> /H
>
>

Et hurtigt eksempel!

class Mysql {
private $db;

public function __construct($host,$user,$pass,$dbname) {
$this->db = mysql_connect(...);
select_database.....
}

private function setquote($value) {
switch($value) {
case 'NOW()':
return $value;
default:
if($value{0}=="'" && $value{strlen($value)-1}=="'")
$value = substr(substr($value,0,-1),1);
if (get_magic_quotes_gpc())
$value = stripslashes($value);
if(version_compare(phpversion(),"4.3.0")=="-1")
$value = "'".mysql_escape_string($value)."'";
else
$value = "'".mysql_real_escape_string($value)."'";
return $value;
}
}

public function insert($table,$data) {
$keys = array();
$values = array();
foreach($data AS $key => $value) {
$keys[]=$key;
$values[]=$this->setquote($value);
}
mysql_query('
insert into '.$table.'
('.implode(',',$keys).')
values ('.implode(',',$values).');
}
}


Så kaldes den
$obj = new Mysql(/*** dine db oplysninger ***/);
$obj->insert('TABEL',array('key'=>$value,'key2'=>$value2));

Når så der måske skal rettes et eller andet i insert, så skal det kun
gøres 1 sted også slår det igennem på samtlige insert funktioner på hele
sitet.

Harald (06-12-2007)
Kommentar
Fra : Harald


Dato : 06-12-07 21:00

"Martin" <maaNO@SPAMscandesigns.dk> skrev i en meddelelse
news:47580c56$0$90270$14726298@news.sunsite.dk...
> Harald wrote:
>> Hej
>>
>> Er det meningen at man skal pakke ALT ind i en mysql_real_escape_string
>> inden SQL´en udføres? Det virker jo lidt bøvligt hvis man har mange
>> felter som kunden har udfyldt på en form, findes der en lettere
>> automatiseret metode?
>>
>> /H

<klip>

>
> Så kaldes den
> $obj = new Mysql(/*** dine db oplysninger ***/);
> $obj->insert('TABEL',array('key'=>$value,'key2'=>$value2));
>
> Når så der måske skal rettes et eller andet i insert, så skal det kun
> gøres 1 sted også slår det igennem på samtlige insert funktioner på hele
> sitet.

Det er sikkert smart men jeg er ikke nået så langt med php til at jeg kan se
hvad alt koden gør eller hvor/hvordan jeg skal bruge den så jeg holder mig
til Mads løsning med at loope gennem $_POST.

/H



Peter Brodersen (06-12-2007)
Kommentar
Fra : Peter Brodersen


Dato : 06-12-07 23:54

On Wed, 5 Dec 2007 15:48:38 +0100, "Harald" <noname@nomail.dk> wrote:

>Er det meningen at man skal pakke ALT ind i en mysql_real_escape_string
>inden SQL´en udføres? Det virker jo lidt bøvligt hvis man har mange felter
>som kunden har udfyldt på en form, findes der en lettere automatiseret
>metode?

Jeg foretrækker passende database-abstraktions-lag. Den sørger for at
variable bliver escapet på den rette måde. Så skal man heller ikke
sidde og klipkopiere-klistre sin forespørgsel til. Fx med adodb:

<?php
require("adodb.inc.php");
$db = NewADOConnection("mysql://user:pass@hostname/database");

$db->query(
   "INSERT INTO tabel (foo, bar) VALUES (?,?)",
   array($_POST['foo'],$_POST['bar'])
);
?>

--
- Peter Brodersen
Kendt fra Internet

Kasper Nordal Lund (07-12-2007)
Kommentar
Fra : Kasper Nordal Lund


Dato : 07-12-07 07:05

On Wed, 05 Dec 2007 15:48:38 +0100, Harald wrote:

> findes der en lettere automatiseret metode?


Du kan lave en funktion som denne:

<?php
function escaper($s) {
if(get_magic_quotes_gpc()) { $s = stripslashes($s); }
   $s = strip_tags($s);
return mysql_real_escape_string($s);
}
?>


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste