Avatar billede JJ77 Juniormester
26. marts 2006 - 15:06 Der er 15 kommentarer og
1 løsning

indsætte tags i databasen?

Jeg har en side hvor man kan indsætte noget tekst i en database som så kan vises igen på en anden side.. mit problem er at man kan indsætte html-tags og på den måde spolere en hel masse, så det kommer til at se vandvittigt ud.. fx med tabeller <hr> osv.. Hvis man fx sætter et ord i "" bliver det vist som /"ord/". Det hele er meget mystisk.. Hvordan slipper jeg for alt dette?
Avatar billede showsource Seniormester
26. marts 2006 - 15:09 #1
For at undgå brug af tags er der flere muligheder.
F.eks. kan du bruge strip_tags($_POST["feltnavn"]) før du gememr.
Eller, synes jeg bedst om, bruge htmlentities($row["text"]) når du laver output til browseren.

Mener du ikke at du får \"noget\" ud?

Det er fordi PHP'en på serveren pr. default escaper "farlige tegn" som vil kunne bruges til noget sql-injection.
Avatar billede showsource Seniormester
26. marts 2006 - 15:13 #2
hentet fra manualen, er jeg selv begyndt at bruge flg. ved insert i db,
<?php

function safe_query($var) {

    if(get_magic_quotes_gpc()) {
    $var = stripslashes($var);
    }

    if(!is_numeric($var)) {
    $var = "'". mysql_real_escape_string($var) ."'";
    }

    return $var;
}

$sql = "INSERT INTO tabel (navn, text) VALUES (". safe_query($_POST["navn"]) .", ". safe_query($_POST["navn"]) .")")";
Avatar billede JJ77 Juniormester
26. marts 2006 - 15:37 #3
hvis jeg skal indsætte strip_tags når jeg skal indsætte, hvordan skal det så tilføjes på nedenstående sætning:

$supplerendeTekst = mysql_real_escape_string($_POST['supplerendeTekst']);


Hvis jeg skal bruge htmlentities($row["text"]), hvordan skal det så indsættes på nedenstående sætninger?

<span class='lille'>".klip($row['supplerendeTekst'])."</span>
<span class='lilleS'>" . $row['pris'] . ",-</span>
Avatar billede showsource Seniormester
26. marts 2006 - 15:43 #4
$supplerendeTekst = mysql_real_escape_string(strip_tags($_POST['supplerendeTekst']));

<span class='lille'>".htmlentities(klip($row['supplerendeTekst']))."</span>


med htmlentities() vil f.eks. æ,ø og å også altid vises korrekt
Avatar billede JJ77 Juniormester
26. marts 2006 - 16:26 #5
super.. det virker på noget, men jeg har et lille problem med nedenstående.. kan du se hvad som er galt?

    $produkt = strip_tags($_GET['produkt']);
    $supplerendeTekst = strip_tags($_GET['supplerendeTekst']);
    $pris = strip_tags($_GET['pris']);
    $tlf1 = strip_tags($_GET['tlf1']);
    $tlf2 = strip_tags($_GET['tlf2']);
    $email = strip_tags($_GET['email']);

// update database
if(isset($_REQUEST[produkt],$_REQUEST[supplerendeTekst],$_REQUEST[pris],$_REQUEST[tlf1],$_REQUEST[tlf2],$_REQUEST[email])){
$SQL = "UPDATE salgAfProdukt SET produkt = '$_GET[produkt]', supplerendeTekst = '$_GET[supplerendeTekst]', pris = '$_GET[pris]', tlf1 = '$_GET[tlf1]', tlf2 = '$_GET[tlf2]', email = '$_GET[email]' WHERE id = '$Id'";
mysql_query($SQL);
Avatar billede greew Nybegynder
26. marts 2006 - 17:19 #6
Well.. du vælger i $SQL at indsætte $_GET[produkt] i stedet for $produkt, som du jo har lavet :-)
Avatar billede greew Nybegynder
26. marts 2006 - 17:19 #7
og lige sådan med de andre variable :-)
Avatar billede JJ77 Juniormester
26. marts 2006 - 17:45 #8
Mig ikke forstå:)
Ku man gøre nogenlunde som nedenstående istedet? (det virker bare ikke)

..UPDATE salgAfProdukt SET produkt = strip_tags('$_GET[produkt]'), osv osv..
Avatar billede JJ77 Juniormester
26. marts 2006 - 19:50 #9
Fik det løst således. Ser det rigtigt ud, og smider i ikke lige et svar.. takker:)


if(isset($_REQUEST[produkt],$_REQUEST[supplerendeTekst],$_REQUEST[pris],$_REQUEST[tlf1],$_REQUEST[tlf2],$_REQUEST[email])){

    $produkt = mysql_real_escape_string(strip_tags($_GET['produkt']));
    $supplerendeTekst = mysql_real_escape_string(strip_tags($_GET['supplerendeTekst']));
    $pris = mysql_real_escape_string(strip_tags($_GET['pris']));
    $tlf1 = mysql_real_escape_string(strip_tags($_GET['tlf1']));
    $tlf2 = mysql_real_escape_string(strip_tags($_GET['tlf2']));
    $email = mysql_real_escape_string(strip_tags($_GET['email']));

$SQL = "UPDATE salgAfProdukt SET produkt = '$produkt', supplerendeTekst = '$supplerendeTekst', pris = '$pris', tlf1 = '$tlf1', tlf2 = '$tlf2', email = '$email' WHERE id = '$Id'";
mysql_query($SQL);
Avatar billede showsource Seniormester
26. marts 2006 - 20:01 #10
Du kan ikke gøre so mdit eks. fordi du laver php kode mit i sql'en.
Så er du nødt til at bruge ". phpkode ."

UPDATE salgAfProdukt SET produkt = '". strip_tags($_GET["produkt"]) ."'

Men det vil helt klart være bedre at bruge funktionen som jeg postede

$SQL = "UPDATE salgAfProdukt SET produkt = ". safe_query($_GET["produkt"]) .",  supplerendeTekst = ". safe_query($_GET["supplerendeTekst"]) ." WHERE id = ". intval($Id);
Avatar billede JJ77 Juniormester
26. marts 2006 - 20:04 #11
hmmm.. det virker ellers perfekt det jeg lige har vist ovenstående.. mystisk:(
Avatar billede showsource Seniormester
26. marts 2006 - 20:08 #12
nej, det er ikke så mystisk! :O)
Dit første eks. ville du bruge en php funktion i sql'en, og det virker ikke, men når du blot har en variabel, så kan du godt!
Avatar billede JJ77 Juniormester
26. marts 2006 - 20:22 #13
ok.. er det så fint nok som jeg har gjort nedenstående? eller skal jeg ændre det til ". safe_query($_GET["produkt"]) ."... og hvis jeg ændrer det til safe_q kan jeg så fjerne mine $produkt = mysql_real_escape.......

måske jeg spørger lidt dumt, men vil helst ikke lave en brøler med noget som er så vigtigt:)

if(isset($_REQUEST[produkt],$_REQUEST[supplerendeTekst],$_REQUEST[pris],$_REQUEST[tlf1],$_REQUEST[tlf2],$_REQUEST[email])){

    $produkt = mysql_real_escape_string(strip_tags($_GET['produkt']));
    $supplerendeTekst = mysql_real_escape_string(strip_tags($_GET['supplerendeTekst']));
    $pris = mysql_real_escape_string(strip_tags($_GET['pris']));
    $tlf1 = mysql_real_escape_string(strip_tags($_GET['tlf1']));
    $tlf2 = mysql_real_escape_string(strip_tags($_GET['tlf2']));
    $email = mysql_real_escape_string(strip_tags($_GET['email']));

$SQL = "UPDATE salgAfProdukt SET produkt = '$produkt', supplerendeTekst = '$supplerendeTekst', pris = '$pris', tlf1 = '$tlf1', tlf2 = '$tlf2', email = '$email' WHERE id = '$Id'";
mysql_query($SQL);
Avatar billede showsource Seniormester
26. marts 2006 - 20:29 #14
jahh, du kan godt gøre det på den måde der, omend jeg synes at nu når du ved det er GET så brug ikke request, og du kan jo desuden spare lidt kode hvis du putter det ind i en funktion.

Og selv hopper jeg altid "ud/ind" af php-kode i sql.
Og bruger altid " i f.eks. $_GET["produkt"]
Avatar billede JJ77 Juniormester
27. marts 2006 - 15:05 #15
Takker mange gange for hjælpen.. så er det vist svartid..:)
Avatar billede showsource Seniormester
01. april 2006 - 13:52 #16
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester