Problem z šumniki v bazi
 
newbe 15. jul 2010 15:42:54 Pridružen od:
5. jun 2008
1596 objav
99 117 12
#1

Hej



imam enostaven obrazec za pisanje v bazo, ampak mi nagajajo šumniki.



Obrazec izgleda tako:


<form action="process.php" method="post">
Your Name: <input type="text" name="name"><br>
E-mail: <input type="text" name = "email"><br>
Location: <input type="text" name = "location"><br>
<input type="submit" value="Submit"> </form>

process.php pa tako:


<? $name=$_POST['name']; $email=$_POST['email']; $location=$_POST['location']; mysql_connect("localhost", "username", "geslo") or die(mysql_error()); mysql_select_db("imebaze") or die(mysql_error()); mysql_query("INSERT INTO `data` VALUES ('$name', '$email', '$location')"); Print "Your information has been successfully added to the database."; ?>

Tabela je utf8unicodeci. Ampak zmeraj, ko vnesem v obrazec npr č, dobim tole č



A morda kdo ve kaj je narobe?



tnx!


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi ignoriranja pravil trgovanja*
 
kraji 15. jul 2010 15:52:18 Pridružen od:
22. jul 2009
853 objav
321 12 4
#2

Jaz vem, da mi ni ok delalo, če po mysqlselectdb nisem klical še:

mysql_query("SET NAMES 'utf8'")


všeč(0) ni všeč(0) spam(0)
 
newbe 15. jul 2010 15:56:38 Pridružen od:
5. jun 2008
1596 objav
99 117 12
#3

tnx! A mi lahko prosim poveš kam moram to vstavit v tej kodi zgoraj :shy:



ne obvladam phpja :( ful hvala!


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi ignoriranja pravil trgovanja*
 
bl4ckb1rd 15. jul 2010 15:58:26 Pridružen od:
18. avg 2008
1122 objav
750 91 11
#4

pred že obstoječim mysql_query...


všeč(0) ni všeč(0) spam(0)
blackbird.si - Moj plac za odlaganje problemov in rešitev...
 
newbe 15. jul 2010 16:09:53 Pridružen od:
5. jun 2008
1596 objav
99 117 12
#5

Najlepša dala obema!


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi ignoriranja pravil trgovanja*
 
schtr4jh 15. jul 2010 16:19:47 Pridružen od:
24. nov 2008
402 objav
322 33 4
#6

Drugače pa uporabi vsaj mysqlrealescape_string() funkcijo, ki onemogoči sql injection.



Hint: $name=mysqlrealescapestring($POST['name']);



Mislim pa, da mora bit najprej vzpostavljena MySQL povezava - drugače izpiše napako.


všeč(1) ni všeč(0) spam(0)
 
newbe 18. jul 2010 13:58:09 Pridružen od:
5. jun 2008
1596 objav
99 117 12
#7

kul, hvala ti schtr4jh!



A pol je tako bolje sedaj:


<?  mysql_connect("localhost", "XXX", "XXX") or die(mysql_error()); mysql_select_db("XXX") or die(mysql_error()); mysql_query("SET NAMES 'utf8'"); mysql_query("INSERT INTO `data` VALUES ('$name', '$email', '$location')"); $name=mysql_real_escape_string($_POST['name']); $email=mysql_real_escape_string($_POST['email']); $location=mysql_real_escape_string($_POST['location']); Print "Your information has been successfully added to the database."; ?>

?


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi ignoriranja pravil trgovanja*
 
SlimDeluxe 18. jul 2010 14:44:29 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#8

Skoraj si tam :)

To:

$name=mysqlrealescapestring($POST['name']);

moraš dat pred prvo uporabo, torej pred

mysql_query("INSERT INTO data VALUES ('$name', '$email', '$location')");



Sicer pa upam, da se zavedaš, da ti bo to zapisalo tudi prazna polja :)

Bi moral dat spredaj še vsaj neko osnovno validacijo, tipo:

if( ! isset($POST['name']) or strlen($POST['name']) < 2 or strlen($_POST['name']) > 100){

$error['name] = 'Vaše ime je zelo čudno, prosimo popravite vnos';

}



if( ! isset($error)){

//tukaj razpali query-e in redirectaj na success page

}



//če si prišel do sem, pomeni, da je bila nekje napaka

//pri polju "Vaše ime: " dodaš

<?=( isset($error['name']) ? $error['name'] : '')?>

//isto narediš za ostala polja


všeč(0) ni všeč(0) spam(0)
Freelance Web Developer
 
newbe 18. jul 2010 15:27:00 Pridružen od:
5. jun 2008
1596 objav
99 117 12
#9

Zakon, hvala ti! Just to make sure da je ta končna verzija prava:


<?  mysql_connect("localhost", "XXX", "XXX") or die(mysql_error()); mysql_select_db("XXX") or die(mysql_error()); $name=mysql_real_escape_string($_POST['name']); $email=mysql_real_escape_string($_POST['email']); $location=mysql_real_escape_string($_POST['location']); mysql_query("SET NAMES 'utf8'"); mysql_query("INSERT INTO `data` VALUES ('$name', '$email', '$location')"); Print "Your information has been successfully added to the database."; ?>

A je še kaj narobe kje?



Drugače pa ful hvala tudi za tale dodatek k rešitvi. Ampak želim da vpiše tudi če so npr. vsa imena prazna (teoretično). Ker tudi če dobim en sam podatek izmed vseh ki bodo, mi to pride zelo prav.


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi ignoriranja pravil trgovanja*
 
SlimDeluxe 18. jul 2010 16:40:27 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#10

To je v redu, sicer glede ostalega pa kot želiš / rabiš :)


všeč(0) ni všeč(0) spam(0)
Freelance Web Developer
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se