我是PHP的初学者。 我在表单中遇到问题,我必须验证用户是否向我发送了巴黎的地址。
<?php
$msg="";
$db = mysqli_connect("localhost", "root", "", "dbname");
if (isset($_FILES["image"]) AND !empty($_FILES['image']['name']))
{
$tailleMax = 3097152;
$extensionsValides = array('jpg', 'jpeg', 'png');
if($_FILES['image']['size'] <= $tailleMax)
{
$extensionUpload = strtolower(substr(strrchr($_FILES['image']['name'], '.'), 1));
if(in_array($extensionUpload, $extensionsValides))
{
$newName = uniqid(mt_rand(1, 5));
$imageName = $newName.".".$extensionUpload;
$chemin = "images/".$imageName;
$resultat = move_uploaded_file($_FILES['image']['tmp_name'],$chemin);
}else{
$msg = "Le format doit être jpg, jpeg ou png";
}
}else{
$msg = "Photo trop grande";
}
}
if (isset($_POST['upload'])) {
$image = $_FILES["image"]["name"];
$about = $_POST["about"];
$name = $_POST["name"];
$adress = $_POST["adress"];
$category = $_POST["category"];
$latitude = $_POST["lat"];
$longitude = $_POST["lng"];
if($longitude > 48.7 and $longitude < 49 and $latitude > 2.2 and $latitude < 2.5){
$sql = "INSERT INTO paristable
(picture, name, about, adress, category, latitude, longitude)
VALUES ('$imageName', '$name', '$about', '$adress', '$category', '$latitude', '$longitude')";
mysqli_query($db, $sql);
$msg = "Envoi réussi";
}else{
$smg= "Veuillez rentrer une adresse parisienne";
}
}else{
$msg= "L'envoi a échoué";
}
?>
所以我添加了这一行
if($longitude > 48.7 and $longitude < 49 and $latitude > 2.2 and $latitude < 2.5){
因为当用户发布地址时,我有一个脚本,它将纬度和经度输入隐藏输入。所以我试着用这条线来检查他是否在巴黎境内。因为如果地址不在巴黎,我不想发送数据。
今天我的表格无论如何发送它,所以我想我在这一行有一个错误。但我找不到它。
这是我的剧本
<script>
function showAlert(){
var getLocation = function (address) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode({
'address': address
}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
console.log(latitude, longitude);
document.getElementById('lat').value = latitude;
console.log(latitude);
document.getElementById('lng').value = longitude;
console.log(longitude);
}
});
};
document.getElementById('location').value = getLocation(document.getElementById('adress').value);
console.log(document.getElementById('location').value);
document.getElementById('lat').value = latitude;
document.getElementById('lng').value = longitude;
console.log(document.getElementById('lat').value);
}
</script>
答案 0 :(得分:1)
因为当用户发布地址时,我会有一个脚本出来 经纬度为隐藏输入。所以我试着检查一下 他在巴黎或不在这条线上。因为如果地址不是 在巴黎,我不想发送数据。
现在您已拥有用户的Latlongs,现在您可以使用Google的geocode API获取坐标所在城市的名称,然后如果城市是巴黎,您可以发布或显示错误还使用预准备语句来防止sql注入:
<?php
$msg = "";
$db = mysqli_connect("localhost", "root", "", "dbname");
if (isset($_FILES["image"]) AND !empty($_FILES['image']['name'])) {
$tailleMax = 3097152;
$extensionsValides = array(
'jpg',
'jpeg',
'png'
);
if ($_FILES['image']['size'] <= $tailleMax) {
$extensionUpload = strtolower(substr(strrchr($_FILES['image']['name'], '.'), 1));
if (in_array($extensionUpload, $extensionsValides)) {
$newName = uniqid(mt_rand(1, 5));
$imageName = $newName . "." . $extensionUpload;
$chemin = "images/" . $imageName;
$resultat = move_uploaded_file($_FILES['image']['tmp_name'], $chemin);
} else {
$msg = "Le format doit être jpg, jpeg ou png";
}
} else {
$msg = "Photo trop grande";
}
}
if (isset($_POST['upload'])) {
$image = $_FILES["image"]["name"];
$about = $_POST["about"];
$name = $_POST["name"];
$adress = $_POST["adress"];
$category = $_POST["category"];
$latitude = $_POST["lat"];
$longitude = $_POST["lng"];
//get geographical info of the latlongs
$geocode = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng=' . $latitude . ',' . $longitude . '&sensor=false');
$output = json_decode($geocode);
for ($j = 0; $j < count($output->results[0]->address_components); $j++) {
$city = array(
$output->results[0]->address_components[$j]->types[0]
);
//get the city name
if (in_array("locality", $city)) {
$cityName = $output->results[0]->address_components[$j]->long_name;
}
}
if ($cityName == "Paris") {
$sql = "INSERT INTO paristable (picture, name, about, adress, category, latitude, longitude) VALUES(?,?,?,?,?,?,?)";
$stmt = mysqli_prepare($db, $sql);
mysqli_stmt_bind_param($stmt, 'sssssss', $imageName, $name, $about, $adress, $category, $latitude, $longitude);
if (mysqli_stmt_execute($stmt)) {
$msg = "Envoi réussi";
} else {
$msg = mysqli_stmt_error($stmt);
}
} else {
$msg = "L'envoi a échoué";
}
} else {
$msg = "L'envoi a échoué";
}
?>