Problem z šumniki v bazi
5 naročnikov
5 naročnikov
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
tnx! A mi lahko prosim poveš kam moram to vstavit v tej kodi zgoraj :shy:
ne obvladam phpja :( ful hvala!
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.
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.