INSERT MySQL

1

INSERT MySQL

offline
  • Pridružio: 15 Feb 2013
  • Poruke: 168

Pozdrav, imam mali problemčić, naime imam formu za pisanje teksta, klikom na dume taj tekst se unosi u MySQL bazu. E sad, problem je kada u tekstu koji se unosi napišem znak ' jer njega koristim u PHP-u prilikom komande "INSERT INTO Tabela VALUES (1,'text')"
Ja sad mogu preko php funkcija zameniti znak ' u tekstu sa recimo " ali želim da ostane baš kako je napisano. Da li postoji neka funkcija koja to reguliše?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Koji editor teksta koristiš?
Vidi, kada pišeš kodove za bazu, ispoštuj sledeći korak i obrati pažnju na znakove interpunkcija, zareza i zagrada

Ovo ti je najpravilnije pisanje koda:

  1. $unesi_u_mysql=sql_query(" INSERT INTO `neka_tabela` ( `naslov`,`sadrzaj`  )  VALUES  ( 'Naslov', 'Text sadrzaja' ) ");


Kada pišete PHP nemojte koristiti "dozvoljene" skraćenice izbegavajući zareze, zagrade, interpunkcije itd... Tu svi greše.

Javi rezultat.



offline
  • Pridružio: 15 Feb 2013
  • Poruke: 168

Sve je ovo ok, ali sta ako definises da je $text_sadrzaja="Ajd' zdravo";
a kod ti izleda ovako
$unesi_u_mysql=sql_query(" INSERT INTO `neka_tabela` ( `naslov`,`sadrzaj` ) VALUES ( '$naslov', '$text_sadrzaja' ) ");

Tu će doći do greške jer $text_sadrzaja sadrži znak ', ili se varam?

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

milos.popovic87 ::Sve je ovo ok, ali sta ako definises da je $text_sadrzaja="Ajd' zdravo";
a kod ti izleda ovako
$unesi_u_mysql=sql_query(" INSERT INTO `neka_tabela` ( `naslov`,`sadrzaj` ) VALUES ( '$naslov', '$text_sadrzaja' ) ");

Tu će doći do greške jer $text_sadrzaja sadrži znak ', ili se varam?


Neće biti problema ako ovako pišeš. Sad sam proverio kod mene. Bitni su ti znakovi `` u funkciji unosa u bazu. Pa i ti sada pišeš na ovom forumu znak ' i eto vidiš da nema errora kad se unese u bazu.

Ajde okači svoj PHP kod kojim unosiš u bazu novi sadržaj. Tako ću ti odmah reći dali ili gde greši.
Ali pokušaj okačiti kako se konektuješ bazu, GET ili POST funkcije uzimanja sadržaja iz formi i PHP funkciju kojom unosiš u bazu.

offline
  • Pridružio: 15 Feb 2013
  • Poruke: 168

Evo kodova:

//uzimanje iz forme

  1. $naziv=$_POST['naziv'];
  2. $rasa=$_POST['rasa'];
  3. ...


//pravljenje SQL upita
  1. $sql="INSERT INTO `dogs` (`id_rase`, `id_user`, `name`, `pol`, `desc`, `date_born`, `papiri`, `price`, `master_name`, `master_mail`, `master_tel`, `validate`, `img1`, `img2`, `img3`, `img4`, `img5`, `time`,`imeiprezime`,`telefon`,`mesto`,`rand`,`mail`,`video`) VALUES (".$rasa.", ".$user_id.",`".$naziv."`,".$pol.",`".$desc."`,`".$date_born."`,".$papiri.",".$price.",``, ``, ``, ".$validate.", `".$sl1."`, `".$sl2."`, `".$sl3."`, `".$sl4."`, `".$sl5."`, `".$date."`, `".$imeiprezime."`, `".$telefon_prodavca."`, `".$city."`, ".$rand.", `".$mail."`, `".$video."`)";


//konekcija sa bazom
...

//izvrsavanje SQL upita
  1. if(mysql_query ($sql))
  2. echo "OK";


E sad, ukoliko u $desc unesem znak " sve radi OK, ali ukoliko $desc sadrži znak ' neće da prođe...

offline
  • PHP Developer
  • Pridružio: 02 Okt 2005
  • Poruke: 546

koristi ovo
[Link mogu videti samo ulogovani korisnici]
string mysqli::real_escape_string ( string $escapestr )
Characters encoded are NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Nisi dobro formatirao Query string probaj ovako:

  1. $query = mysql_query('INSERT INTO table (`type`, `link_one`, `link_two`) VALUES(\'' . $type . '\', \'' . $link_one . '\', \'' . $link_two . '\')');

offline
  • Pridružio: 15 Feb 2013
  • Poruke: 168

Ej da javim, rešio sam problem na jedan veoma glup način:
Samo sam znak ' zamenio sa njegovom html oznakom & #39; (bez space-a) preko str_replace

Sve radi OK Smile

offline
  • Pridružio: 16 Jan 2010
  • Poruke: 241
  • Gde živiš: Zemun

|_MeD_| ti je dao veoma dobar savet, ako misliš da imaš sigurnu bazu. Ukoliko se zadržavaš na mysql koristi mysql_real_escape_string u kombinaciji sa još nekim funkcijama. Moja ti je preporuka da pređeš na mysqli i da koristiš prepare funkciju.

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Druže da te nije bilo sada bi imao velikih problema i ja sa jednim projektom. Dao si mi na razmišljanje i kada sam izvršio testiranja izdogađali su se erori i kod mene. Imam rešenje mysql_real_escape_string():

  1. $unesi_u_mysql=sql_query(" INSERT INTO `neka_tabela` ( `naslov`,`sadrzaj` ) VALUES ( '".mysql_real_escape_string($naslov)."', '".mysql_real_escape_string($text_sadrzaja)."' ) ");

Koristi ovaj kod i biće sve u redu. Zaista znak ' pravi problema ako nije zatvoren. mysql_real_escape_string() rešava te probleme. A evo ti jedna dobra funkcija za unos u bazu da ti je lakše:
  1. function mysql_save($table_name, $array_row_name, $array_values)
  2. {
  3.    if(count($array_row_name)==count($array_values))
  4.    {
  5.       $data_sql="INSERT INTO `".$table_name."` (";
  6.       foreach($array_row_name as $x=>$value){$x=$x;}
  7.       foreach($array_row_name as $a=>$y)
  8.       {
  9.          $data_sql.="`".trim($array_row_name[$a])."`";
  10.          if($a<$x){$data_sql.=",";}
  11.       }
  12.       $data_sql.=") VALUES (";
  13.       foreach($array_values as $b=>$y)
  14.       {
  15.          $data_sql.="'".mysql_real_escape_string(trim($array_values[$b]))."'";
  16.          if($b<$x){$data_sql.=",";}
  17.       }
  18.       $data_sql.=")";   $data_query=mysql_query($data_sql);   
  19.       if($data_query){return true;}else{return false;}
  20.    }
  21.    else
  22.    {return die('PHP Error: $array_row_name and $array_values must have identical number of array!<br />-Data not saved into MySQL!');}
  23. }

Poziv se radi ovako:
  1. $naziv_tabela=array('id','naslov','sadrzaj');
  2. $sadrzaj_tabela=array(NULL,'Nikola Kojo u filmu',"Film je odličan, ne'k se gleda...");
  3.  
  4. if(mysql_save('neka_tabela', $naziv_tabela, $sadrzaj_tabela))
  5. {echo 'Sadržaj je uspešno snimljen';}
  6. else
  7. {echo 'Sadržaj nije snimljen';}
  8. /* Naravno umesto teksta ubaci $_GET ili $_POST funkciju ili šta god koristiš */



Nadam se da ti ovo pomaže, ja sam sad upravo sve funkcije zamenio sa ovim. Isto ti je i sa editovanjem sadržaja:

  1. function mysql_edit($table_name, $array_row_name, $array_values, $where, $value)
  2. {
  3.    if(count($array_row_name)==count($array_values))
  4.    {
  5. $data_sql="UPDATE `".$table_name."` SET ";
  6.       foreach($array_row_name as $x=>$y){$x=$x;}
  7.       foreach($array_row_name as $a=>$y)
  8.       {
  9.          $data_sql.="`".trim($array_row_name[$a])."`='".mysql_real_escape_string(trim($array_values[$a]))."'";
  10.          if($a<$x){$data_sql.=",";}
  11.       }
  12.       $data_sql.=" WHERE `".$table_name."`.`".trim($where)."`='".mysql_real_escape_string(trim($value))."' LIMIT 1";
  13.       $data_query=mysql_query($data_sql);
  14.       if($data_query){return true;}else{return false;}
  15.    }
  16.    else
  17.    {return die('PHP Error: $array_row_name and $array_values must have identical number of array!<br />-Data not edited into MySQL!');}
  18. }

i poziv:
  1. // Poziv se radi ovako:
  2. $naziv_tabela=array('id','naslov','sadrzaj');
  3. $sadrzaj_tabela=array(NULL,'Nikola Kojo u filmu',"Film je odličan, ne'k se gleda...");
  4. if(mysql_edit('neka_tabela', $naziv_tabela, $sadrzaj_tabela, 'id', '26'))
  5. {echo 'Sadržaj je uspešno snimljen';}
  6. else
  7. {echo 'Sadržaj nije snimljen';}


Ispravite me ako grešim i za mene je bitno...

Ko je trenutno na forumu
 

Ukupno su 1081 korisnika na forumu :: 13 registrovanih, 0 sakrivenih i 1068 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 4thFlavian, bigfoot, Bojan85, BZ, comi, Fabius, Malahit, Ognjen D., RD84, Rebel Frank, renvoi, shajone, Zukov