Bagaimana cara menerapkan fungsi php ke $_GET untuk mendapatkan URL yang bersih?

Saya mencoba mendapatkan URL bersih dari lokalitas milik distrik terkait di mana fungsi url bersih diterapkan ke variabel $_GET. Saya memiliki dua halaman, yang pertama adalah distrik.php yang memiliki tautan ke lokasi terkait menggunakan fungsi ini untuk menghasilkan URL yang bersih. Di bawah ini adalah kode halaman distrik.php :-

<?php 
$remove[] = " ";
function clean($string) {
   $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
   $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
   $string = preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one.
   return $string;
}
include($_SERVER['DOCUMENT_ROOT'].'/database-path.php');
$district = str_replace('-',' ',$_GET['district']);
$state = str_replace('-',' ',$_GET['state']);
$sql="SELECT * FROM table_name WHERE district='$district' AND state='$state'";
$result = mysqli_query($con,$sql);      
if ($result->num_rows > 0) {                    
// output data of each row
    while($row = $result->fetch_assoc()) {  
        $id = $row['id'];   
        $district = $row['district'];   
        $locality = $row['locality'];   
        $state = $row['state'];
        $iso = $row['iso']; 
    }
?>

Pada halaman distrik yang sama, kode di bawah ini digunakan untuk menghasilkan URL bersih dari lokasi terkait:-

<a href=\"/".str_replace($remove, "-", clean(strtolower($row['locality'])))."-".$row['id']."\">" . $row["locality"]. "</a>

Kode di atas menghasilkan URL ke semua halaman lokalitas dengan cara "url-halaman-lokalitas-dengan-nomor-id-dekode" di halaman distrik.

Di bawah ini adalah kode locality.php tempat saya mencoba menerapkan fungsi bersih yang sama ke variabel $_GET untuk mendapatkan URL yang bersih

<?php 
function clean($string) {
   $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
   $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
   $string = preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one.
   return $string;
}
include($_SERVER['DOCUMENT_ROOT'].'/database-path.php');
$locality = clean($_GET['locality']);
$localID =  base64_decode($_GET['id']) ;
$sql="SELECT * FROM table_name WHERE locality='$locality' AND id='$localID'";
$result = mysqli_query($con,$sql);
$rowcount=mysqli_num_rows($result);
if ($result->num_rows > 0) {                    
    // output data of each row
    while($row = $result->fetch_assoc()) {  
        $locality = $row['locality'];
        $content = $row['content'];
        $district = $row['district'];
        $state = $row['state'];
        $iso = $row['fld_iso'];
    }
}
?>

kode htaccess :-

RewriteRule ^([^/]*)-([^/]*)$ locality.php?locality=$1&id=$2 [L]

Sekarang masalah yang saya hadapi adalah $locality = clean($_GET['locality']); tidak berfungsi di sini dan kembali ke kesalahan 404. Nilai lokalitas tidak dibersihkan. Ketika saya mencoba hal yang sama secara manual setelah menghapus fungsi bersih dari variabel $_GET menggunakan semua karakter yang tersedia di lapangan, itu berfungsi dengan baik. Apakah ada cara agar saya dapat menggunakan ID sebagai variabel utama untuk mendapatkan nilai baris yang memiliki nilai bersih lokalitas di URL halaman?


person Vikas Kukreja    schedule 01.10.2017    source sumber
comment
dapatkah Anda memberikan contoh url yang Anda coba agar berfungsi?   -  person vnt    schedule 01.10.2017
comment
@vnt contoh URL yang dihasilkan pada halaman distrik adalah :- http://domainname.com/text-text-text-Mjk2 Ini adalah URL yang sudah dibersihkan. Versi yang tidak bersih adalah :- http://domainname.com/text.-&-text-text-Mjk2   -  person Vikas Kukreja    schedule 01.10.2017
comment
Saya menemukan fungsi bersih yang diterapkan di stackoverflow .com/questions/14114411/ tetapi sayangnya tidak dapat mengomentari halaman ini karena menanyakan cara menerapkan ini pada variabel $_GET karena skor reputasi yang rendah saat ini.   -  person Vikas Kukreja    schedule 01.10.2017
comment
Saya tidak melihat masalah apa pun dari kode Anda kecuali .htaccess. Seharusnya RewriteRule ^([^/]*)-([^/]*)$ locality.php?locality=$1&id=$2 [L] seperti yang Anda katakan, file kedua adalah locality.php   -  person vnt    schedule 01.10.2017
comment
@vnt maaf kesalahan saya saat mengajukan pertanyaan. Nama file sudah locality.php di htaccess dan tidak berhasil. Inilah sebabnya mengapa versi URL yang tidak bersih berfungsi dengan baik setelah menghapus fungsi bersih dari halaman lokalitas. Saya akan memperbaiki pertanyaannya. Terima kasih telah menunjukkan hal itu.   -  person Vikas Kukreja    schedule 01.10.2017


Jawaban (1)


Saya akhirnya memperbaikinya dengan mengerjakan kode. Berikut adalah kode htaccess baru yang menjadikan parameter pertama opsional dan memilih ID sebagai parameter utama agar berfungsi dengan baik: -

RewriteRule ^(.*)-([^/]*)$ locality.php?locality=$1&id=$2 [L]

Perubahan dilakukan pada locality.php

Perubahan kecil dilakukan pada penggunaan ID untuk mengambil baris dengan cara berikut: -

<?php 
include($_SERVER['DOCUMENT_ROOT'].'/database-path.php');
$localID =  base64_decode($_GET['id']) ;
$sql="SELECT * FROM table_name WHERE id='$localID'";
$result = mysqli_query($con,$sql);
$rowcount=mysqli_num_rows($result);
if ($result->num_rows > 0) {                    
    // output data of each row
    while($row = $result->fetch_assoc()) {  
        $locality = $row['locality'];
        $content = $row['content'];
        $district = $row['district'];
        $state = $row['state'];
        $iso = $row['fld_iso'];
    }
}
?>

Terima kasih semuanya atas bantuan Anda.

person Vikas Kukreja    schedule 01.10.2017