|
| 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);
}
?>
| |
|
|