de incapator

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

Amazing Science
Average Member
Mesaje: 131
Membru din: Dum Oct 15, 2006 7:27 pm

de incapator

Mesajde Amazing Science » Joi Mai 06, 2010 11:12 am

Intrebare de incepator...

Am o pagina cu un form incare utilizatorii scriu text liber in campul informatii, iar la submit trebuie sa scriu datele intr-o baza de date MS SQL. Folosesc PHP si Apache.

Ce setari trebuie facute (php/apache) sau cum trebuie prelucrata informatia din campul informatii ca sa poata fi scrisa in baza de date avand in vedere ca poate contine orice caracter, inclusiv apostrof/ghilimele.

Multumesc.
[/b]



Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Joi Mai 06, 2010 12:17 pm

daca vrei sa se permita si introducerea de taguri html dar sa nu poata fi interpretate de catre browser faci asa

Cod: Selectaţi tot

// preluare date
$info = htmlentities($_POST['informatii'], ENT_QUOTES);
// preparare pentru bd
$info_to_bd = mysql_real_escape_string($info);
// salvezi in bd
$query = "INSERT INTO tabel (`informatii`) VALUES ('{$info_to_bd}')";
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

Amazing Science
Average Member
Mesaje: 131
Membru din: Dum Oct 15, 2006 7:27 pm

Mesajde Amazing Science » Vin Mai 07, 2010 11:52 am

multumsc de raspuns

problema e ca baza mea de date e MS SQL, nu mysql

si mssql_real_escape_string nu merge

any other ideeas?

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Vin Mai 07, 2010 2:57 pm

mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.

deci poti face o functie care sa faca acelasi lucru exemplu

Cod: Selectaţi tot

function mssql_real_escape_string($string)
{
   // se seteaza valorile pentru inlocuire
   $string_escape = array(
      "\x00" => "\\x00",
      "\n" => "\\n",
      "\r" => "\\r",
      "\x1a" => "\\x1a",
      "\" => "\\",
      "'" => "\'",
      '"' => '\"',
     );
   // inlocuire
   foreach ($string_escape as $ce => $cum)
      $string = str_replace($ce, $cum, $string);
   // returneaza rezultatul
   return $string;
}

si in rest o apelezi la fel ca si echivalentul mysql... (vezi ca e netestata, am scris aici direct nu stiu cat de buna e)
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

Avatar utilizator
Digi
Average Member
Mesaje: 100
Membru din: Lun Mai 03, 2010 4:45 am
Localitate: Bucuresti
Contact:

Mesajde Digi » Vin Mai 07, 2010 3:37 pm

Mai bine ai verifica si magic_quotes_gpc() ca sa nu adaugi backslashes de 2 ori :roll: iar str_replace accepta array-uri :P

Cod: Selectaţi tot

function mssql_real_escape_string($string)
{
    if(magic_quotes_gpc())
       $string = stripslashes($string);

    $escape = array
    (
       "\x00" => "\\x00",
       "\n" => "\\n",
       "\r" => "\\r",
       "\x1a" => "\\x1a",
       "\" => "\\",
       "'" => "\'",
       '"' => '\"',
    );

    return str_replace(array_keys($escape), array_values($escape), $string);
}


Si cel mai bine, dupa parerea mea, e sa nu faci htmlentitites/htmlspecialchars inainte de insert pentru ca o sa fie string-urile mai mari... si daca cumva te razgandesti ? :lol: sau daca vrei sa adaugi procesare de text, bbcodes, smiles, etc, nu o sa mearga corect.

Cel mai bine stochezi caracterele care pot fi luate drept HTML asa cum sunt si le procesezi la printare, real_escape_string totusi e necesar ca sa nu te trezesti cu SQL injection.


Înapoi la “PHP Incepători”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 15 vizitatori