PHP-ban ezt, hogyan lehet? EMPTY és Email validator?
validator nélkül: http://leventebognar.com/gyaki/admin/insert.php
itt pedig a kód
<!DOCTYPE html>
<html>
<head>
<title>Create - PHP CRUD</title>
</head>
<body>
<?php
include 'display.php';
if(isset($_POST['save'])){
//database configuration
include 'config.php';
extract($_REQUEST);
//sql insert
$query=mysqli_query($conn,"insert into contactform SET id='$id',name='$name', company='$company', email='$email', telephone='$telephone', address='$address', message='$message'") or die(mysqli_error($conn));
//insert query to the database
if($query){
//if successful query
echo "New record was saved.";
}
}
?>
<!--form-->
<form action='#' method='post' border='0'>
<table>
<tr>
<td>id</td> <td><input type='text' name='id' /></td>
</tr>
<tr>
<td>name</td> <td><input type='text' name='name' /></td>
</tr>
<tr>
<td>company</td> <td><input type='text' name='company' /></td>
</tr>
<tr>
<td>email</td> <td><input type='text' name='email' /></td>
</tr>
<tr>
<td>telephone</td> <td><input type='text' name='telephone' /></td>
</tr>
<tr>
<td>address</td> <td><input type='text' name='address' /></td>
</tr>
<tr>
<td>message</td> <td><input type='text' name='message' /></td>
<tr>
<td></td>
<td>
<input type='submit' value='Save' name="save" />
</td>
</tr>
</table>
</form>
<a href="index.php">Back</a>
</body>
</html>
1) Amíg nincs injection ellen védve a kódod addig szerintem nem az invalid email lesz a legnagyobb problémád!
2) Használj PDO-t! (prepared statement)
3) Reguláris kifejezéssel lehet szépen szűrni az e-mail-t, de a neten van 1000 kód készen. Egyébként ezen is érdemes elgondolkodni: [link]
4) EMPTY?? Magyarul azt akarod megvizsgálni, hogy üres-e? Ez egy sima "ha" feltétel...
"extract($_REQUEST);"
ezt soha, semmilyen körülmények között ne használd, az öngyilkosság egy igen nevetséges és amatőr módja...
SQL-t pedig csak prepared statement-el adj át a szervernek, vagy szintén kakukk.
<!DOCTYPE html>
<html>
<head>
<title>Create - PHP CRUD</title>
</head>
<body>
<?php
if(isset($_POST['save'])){
//include database configuration
include 'config.php';
extract($_REQUEST);
//sql insert statement
$query=mysqli_query($conn,"insert into contactform SET email='$email'") or die(mysqli_error($conn));
//insert query to the database
if($query){
//if successful query
echo "New record was saved.";
}
}
?>
<!--we have our html form here where user information will be entered-->
<form action='#' method='post' border='0'>
<table>
<tr>
<td>email</td> <td><input type='text' name='email' /></td>
</tr>
<tr>
<td>
<input type='submit' value='Save' name="save" />
</td>
</tr>
</table>
</form>
<?php
// Variable to check
$emailvalid = $_POST['email'];
// Remove all illegal characters from email
$emailvalid = filter_var($emailvalid, FILTER_SANITIZE_EMAIL);
// Validate e-mail
if (!filter_var($emailvalid, FILTER_VALIDATE_EMAIL) === false) {
echo("$email is a valid email address");
} else {
echo("$email is not a valid email address");
}
?>
</body>
</html>
így néz ki a kód, most király, az emailt ellenőrzi amit beírok a formba, de az a gond, hogy mielőtt nem írom be, hibát ad ki, hogy lehetne elérni, hogy ne rinyáljon előtte? :D
Az a baj, hogy amatőr vagyok
Miért kell és mi az az injenction elleni védelem? :O
Miért nem jó az extract($_Request) ??
prepared statement?
Régóta keresem a megoldást, de nagyon nehéz rátalálni, most isset-tel megoldtam amit akartam, de nem tökéletes, mivel a következő lapra ugrik és csak akkor mondja meg hogy valid e az email vagy sem
Tényleg érdekel és időre meg is kell csinálnom, nem azért kérdezek annyit mert unatkozok, úgyhogy ha válaszoltok azt megköszönöm!
"Miért kell és mi az az injenction elleni védelem? :O "
Tegyük fel, hogy az én e-mail címem:
a@a.hu';DROP TABLE contactform; SELECT * FROM contactform WHERE 't' = 't
tehát ha szűrés nélkül megkapja az adatázisszerver, az alábbi lekérdezések fognak lefutni
insert into contactform SET email='a@a.hu';
DROP TABLE contactform;
SELECT * FROM contactform WHERE 't' = 't'
és szépen töröltük is a táblát.
Ezért kell valamilyen védelem ellene.
Az egyik a már említett prepared statement (PDO):
a másik, a felhasználótól érkező adatok szűrése:
Nyugtass meg, hogy ennyi hozzáértéssel nem megrendelésre készíted, mert elsírom magam!
Az oké, hogy még tanulsz - mi szólunk is a hibákért - és majd javítod őket, meg apránként rájössz majd. Ez a kód remek GYAKORLÁSNAK! De csak remélni merem, hogy nem adod ki a kezed közül és az isten mentse meg azt az embert akihez ez ilyen formában kerülne...
Nincs gond azzal hogy tanulsz, de ne más kárán tedd!
Egyébként nem tudom hol keresed régóta, mert nekem a google első találatai is megválaszolják a kérdéseid.
pl.:
>Régóta keresem a megoldást, de nagyon nehéz rátalálni, most isset-tel megoldtam amit akartam, de nem tökéletes, mivel a következő lapra ugrik és csak akkor mondja meg hogy valid e az email vagy sem.
Google: js email validator
(demo-val együtt, így látod hogy kell használni)
Ettől függetlenül php-ben is szűrni kell, arra az esetre, ha tiltva lenne a js!
>Miért kell és mi az az injenction elleni védelem?
Google: mysql injection
>prepared statement?
Google: prepared statement pdo
és itt van plusz két link, olvasmánynak:
Ezt többszörösen dolgozd át kérlek, mert ha így adod oda valakinek, akkor nagyon sokat fogják emlegetni a kedves anyukádat! :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!