Problem z šumniki v bazi

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!

10 odgovorov

Jaz vem, da mi ni ok delalo, če po mysqlselectdb nisem klical še:
mysql_query("SET NAMES 'utf8'")

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

ne obvladam phpja :( ful hvala!

pred že obstoječim mysql_query...

Najlepša dala obema!

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.

1

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."; ?>

?

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

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.

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

kul

hvala še enkrat vsem! :)

1