webForumDet fria alternativet

backslash

PHPur PHP

3 svar · 655 visningar · startad av tanten

Medlem sedan nov. 20051 596 inlägg
Frågan#1

Vilket är det bästa sättet att slippa få \ i databasen, om man har ett formulär som antingen hämtar befintlig rad i en tabell eller ska skapa en ny rad. Jag har fått tankesläpp på hur och när man ska få till det rätt nu när det börjat komma in hästar med accent i namnet. Typ Lindy's
Här en del av koden

if($horseID) {
$q = $conn->query("SELECT * FROM horses WHERE horseID=$horseID");
$horse = $q->fetch(PDO::FETCH_ASSOC);
$q->closeCursor();
$q = null;
}
.....
else {
if(@$horse['horseID']) {
$sql = "UPDATE horses SET horse_name=?, .....
}
else {
$sql = "INSERT INTO horses(horse_name....) VALUES(?,....
}

$stmt = $conn->prepare($sql);
try
{
$stmt->execute(array($_POST['horse_name'],...

och formuläret
<input type="text" name="horse_name"
value="<?=($_POST['horse_name'])?>">

Har testat med stripslashes och htmlspecialcharsi formuläret, men det blir ju inte rätt. Snälla tänk mig åt rätt håll :)

Medlem sedan nov. 20016 480 inlägg
#2

Det är ju en säkerhetsgrej. Du kan ju stänga av magic_quotes, men om det är rekommenderat är en annan sak.

Den lägger helt enkelt addslashes() på det som sparas till databasen. Du får då använda stripslashes() när du hämtar ut datan igen.

Medlem sedan juni 20014 421 inlägg
#3

bassebhu skrev:

Det är ju en säkerhetsgrej. Du kan ju stänga av magic_quotes, men om det är rekommenderat är en annan sak.

Den lägger helt enkelt addslashes() på det som sparas till databasen. Du får då använda stripslashes() när du hämtar ut datan igen.

Nej, magic quotes är en idiotgrej och bör stängas av illa kvickt, att förlita sig på det är osäkert. Iom att tanten kör PDO så ska hon själv inte escapea datan.

Om du inte har tillgång till att ändra magic_quotes_gpc på servern är detta en bra lösning:

if (get_magic_quotes_gpc()) {
        $in = array(&$_GET, &$_POST, &$_COOKIE);
        while (list($k,$v) = each($in)) {
                foreach ($v as $key => $val) {
                        if (!is_array($val)) {
                                $in[$k][$key] = stripslashes($val);
                                continue;
                        }
                        $in[] =& $in[$k][$key];
                }
        }
        unset($in);
}

Lägg den i config eller en en include som alltid ikluderas vid databas-interaktion.

Medlem sedan nov. 20051 596 inlägg
#4

Ser ut att fungera perfekt Colione efter att ha provat. Tack så jättemycket!

125 ms totalt · 3 externa anrop · v20260731065814-full.19008ce9
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)