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:

$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
$naziv=$_POST['naziv']; $rasa=$_POST['rasa']; ...

//pravljenje SQL upita
$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
if(mysql_query ($sql)) 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:

 $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():
$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:
function mysql_save($table_name, $array_row_name, $array_values) {    if(count($array_row_name)==count($array_values))    {       $data_sql="INSERT INTO `".$table_name."` (";       foreach($array_row_name as $x=>$value){$x=$x;}       foreach($array_row_name as $a=>$y)       {          $data_sql.="`".trim($array_row_name[$a])."`";          if($a<$x){$data_sql.=",";}       }       $data_sql.=") VALUES (";       foreach($array_values as $b=>$y)       {          $data_sql.="'".mysql_real_escape_string(trim($array_values[$b]))."'";          if($b<$x){$data_sql.=",";}       }       $data_sql.=")";   $data_query=mysql_query($data_sql);          if($data_query){return true;}else{return false;}    }    else    {return die('PHP Error: $array_row_name and $array_values must have identical number of array!<br />-Data not saved into MySQL!');} }
Poziv se radi ovako:
$naziv_tabela=array('id','naslov','sadrzaj'); $sadrzaj_tabela=array(NULL,'Nikola Kojo u filmu',"Film je odličan, ne'k se gleda..."); if(mysql_save('neka_tabela', $naziv_tabela, $sadrzaj_tabela)) {echo 'Sadržaj je uspešno snimljen';} else {echo 'Sadržaj nije snimljen';} /* 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:

function mysql_edit($table_name, $array_row_name, $array_values, $where, $value) {    if(count($array_row_name)==count($array_values))    { $data_sql="UPDATE `".$table_name."` SET ";       foreach($array_row_name as $x=>$y){$x=$x;}       foreach($array_row_name as $a=>$y)       {          $data_sql.="`".trim($array_row_name[$a])."`='".mysql_real_escape_string(trim($array_values[$a]))."'";          if($a<$x){$data_sql.=",";}       }       $data_sql.=" WHERE `".$table_name."`.`".trim($where)."`='".mysql_real_escape_string(trim($value))."' LIMIT 1";       $data_query=mysql_query($data_sql);       if($data_query){return true;}else{return false;}    }    else    {return die('PHP Error: $array_row_name and $array_values must have identical number of array!<br />-Data not edited into MySQL!');} }
i poziv:
// Poziv se radi ovako: $naziv_tabela=array('id','naslov','sadrzaj'); $sadrzaj_tabela=array(NULL,'Nikola Kojo u filmu',"Film je odličan, ne'k se gleda..."); if(mysql_edit('neka_tabela', $naziv_tabela, $sadrzaj_tabela, 'id', '26')) {echo 'Sadržaj je uspešno snimljen';} else {echo 'Sadržaj nije snimljen';}

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

Ko je trenutno na forumu
 

Ukupno su 1640 korisnika na forumu :: 91 registrovanih, 7 sakrivenih i 1542 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 6018 - dana 19 Dec 2025 13:41

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 4thFlavian, advokat84, Agape, AndrejPetar, Aquarius73, Ares12356, bankulen, bojankrstc, Boroš, Botovac, bpop, brandža84, BWG, Chainsaw, chitach, Cirkon, Coabelgrade, CrazyDiablo, crazydkure, Despot Đurađ, DezurniOperativni, Dimitrise93, Dioniss, Djuro2000, DLazić, DonRumataEstorski, draganl, Duh sa sekirom, dule10savic, dzada, FULCRUM1389, gobrad, halkin gol, hellenic, ikan, istina, Jakonjveliki, JK, Jomini, JOntra, Jovan1983, Kalem, kib, KonstantinR, koom0001, Kozi-RS, lcc, Lester Freamon, ljuba, M74AB3, Macalone, Manjane, Marko00, masterofzen, milenko crazy north, milimoj, milutin134, Mitogna, mnn2, Moldovan, Mzee, N.e.m.a.nj.a., nebidrag, nikolapetkovic, Otto Grunf, Player035, Pohovani_00, raf87, Resnica, RJ, rovac, sekretar, Sharpshooter, Siti2, srđan, StankoVrankovic, Steeeefan, The Boss, tomigun, Topaz9, vensla, Vica1958, VJ, vuksa72, yagosh, Zastava, zemljanin, ZetaMan, zlaya011, Zukov, 787