Poslao: 11 Apr 2013 10:45
|
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.
|
|
Poslao: 11 Apr 2013 12:24
|
offline
- FoxVanis
- Ugledni građanin
- 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.
|
|
|
|
Poslao: 11 Apr 2013 14:36
|
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?
|
|
|
|
Poslao: 11 Apr 2013 15:10
|
offline
- FoxVanis
- Ugledni građanin
- 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.
|
|
|
|
Poslao: 11 Apr 2013 16:59
|
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...
|
|
|
|
|
Poslao: 11 Apr 2013 20:07
|
offline
- 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 . '\')');
|
|
|
|
Poslao: 12 Apr 2013 15:21
|
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
|
|
|
|
Poslao: 12 Apr 2013 20:28
|
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.
|
|
|
|
Poslao: 15 Apr 2013 10:05
|
offline
- FoxVanis
- Ugledni građanin
- 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...
|
|
|
|