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
http://www.php.net/manual/en/mysqli.real-escape-string.php
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 889 korisnika na forumu :: 23 registrovanih, 2 sakrivenih i 864 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: aleksmajstor, Areal84, Ben Roj, bojcistv, FileFinder, Još malo pa deda, Koridor, KUZMAR, Metanoja, MiroslavD, mkukoleca, nick79, pein, raptorsi, S2M, saputnik plavetnila, Sirius, Srle993, Stoilkovic, Tila Painen, Wolfaim, Zerajic, 1107