webForumDet fria alternativet

backslash

3 svar · 655 visningar · startad av tanten

tantenMedlem sedan nov. 20051 658 inlägg
#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 :)

bassebhuMedlem sedan nov. 20014 028 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.

colioneMedlem sedan juni 20013 386 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.

tantenMedlem sedan nov. 20051 658 inlägg
#4

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

Genererad på 380 ms · cache AV · v20260730165559-full.f96bc7eb