PHP Projeleri: Bir Kamuoyu Anketi Uygulaması Oluşturun

⚡ Akıllı Özet

Bu PHP projesi, önceki dersleri bir araya getirerek sıfırdan bir kamuoyu yoklama uygulaması oluşturuyor ve çalışan bir örnek haline getiriyor. Uygulamayı bir ön kontrolcü, bir iş mantığı modeli ve görünüm dosyalarına ayırıyor, ardından favori için verilen oyları saklıyor ve sayıyor. JavaKomut dosyası kütüphanesi MySQL veri tabanı.

  • 🧭 Ön Kontrol Cihazı: Tek bir index.php giriş noktası, hangi görünümün yükleneceğine karar verir ve böylece uygulamaya istekleri yönlendirmek için kontrollü bir yer sağlar.
  • ???? İş Mantığı: Model sınıfı tüm veritabanı işlemlerini yönetir,ping Daha kolay bakım için veri erişimi sunumdan ayrı tutulmuştur.
  • 🖼️ Dosyaları görüntüle: .html.php görünüm dosyaları, HTML'yi küçük PHP çıktı etiketleriyle birleştirerek anket formunu ve sonuç sayfasını içerir.
  • 🗃️ Veritabanı Tablosu: Tek bir js_libraries tablosu, her oyu bir tercih numarası ve zaman damgası olarak saklar ve bu bilgiler otomatik artan bir kimlik numarasıyla anahtarlanır.
  • Doğrulama: Küçük JavaKomut dosyası kontrolü, herhangi bir kütüphane seçilmeden form gönderildiğinde kullanıcıyı uyarır.
  • 📊 Oyların Sayımı: Denetleyici, oyları sisteme ekler, ardından sonuç tablosunu oluşturmak için her seçenek için COUNT sorguları çalıştırır.
  • 🤖 Yapay Zeka Yardımı: Yapay zeka araçları bu anketi tam teşekküllü bir anket uygulamasına dönüştürebilir ve kodda hata ve güvenlik açıklarını inceleyebilir.

PHP Kamuoyu Anketi Uygulaması

PHP Kullanarak Kamuoyu Anketi Uygulaması Nasıl Oluşturulur?

Bu PHP projesinde, bir kamuoyu yoklama uygulaması oluşturacağız.

Kamuoyu yoklaması 3 ana bileşenden oluşacaktır:

Ön denetleyici – Bu, yüklenecek HTML kodunu belirleyecek olan indeks sayfasıdır. Bu, uygulamamızın tek bir giriş noktasına sahip olmasını sağlar ve bu da uygulama üzerinde daha fazla kontrol sahibi olmamıza olanak tanır.

İş mantığı – Bu kısım, veritabanıyla etkileşim kurmak için kullanılan PHP kodunu içerecektir. Bu sayede iş mantığını sunumdan ayırarak uygulamamızın bakımını kolaylaştırabiliriz.

Görünümler – Bu, HTML kodunu içerecektir. İki sayfamız olacak, bunlar şunlardır:

  • idea.html.php – bu soru ve seçeneklerin bulunduğu HTML kodunu içerecektir
  • results.html.php – bu, kamuoyu yoklaması sonuçlarını görüntüleyen HTML kodunu içerecektir

Yapılan varsayımlar

Kamuoyu yoklamasında şu soru sorulacak: En sevdiğiniz nedir? JavaSenaryo Kütüphane?

Cevaplar şöyle olurdu:

  • JQuery
  • mooTools
  • YUI Kitaplığı
  • Parıltı

Başvuruyu oluşturmak için izlenecek adımlar şunlardır.

Adım 1) Veritabanı Bağlantısı

Bu bölüm aşağıdaki konularda bilgi sahibi olduğunuzu varsayar: MySQL ve nasıl uygulanacağı. Eğer bu konuda bilgi sahibi değilseniz MySQL, kontrol edin SQL eğitimleri Bölüm.

Uygulamamızda yalnızca 3 alandan oluşan tek bir tablo olacaktır:

  • id – birincil anahtar olarak otomatik olarak oluşturulan sayı
  • seçim – seçileni temsil eden sayı JavaKomut dosyası kütüphanesi
  • ts – oylamanın zaman damgası

Aşağıdaki script js_libraries tablomuzu oluşturur.

CREATE TABLE `js_libraries` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`choice` tinyint(4) NOT NULL DEFAULT '0',
`ts` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
);

Adım 2) Uygulamamızı kodlamak

Şimdi veritabanı bağlantısını yönetecek olan iş mantığı katmanımızı oluşturalım. idea_poll_model.php

<?php
 
class Opinion_poll_model {
 
private $db_handle;
private $host = 'localhost';
private $db = 'opinion_poll';
private $uid = 'root';
private $pwd = 'melody';
 
public function __construct() {
$this->db_handle = mysqli_connect($this->host, $this->uid, $this->pwd); // connect to MySQL server
if (!$this->db_handle) die("Unable to connect to MySQL: " . mysqli_connect_error());
if (!mysqli_select_db($this->db_handle, $this->db)) die("Unable to select database: " . mysqli_error($this->db_handle));
}
 
private function execute_query($sql_stmt) {
$result = mysqli_query($this->db_handle, $sql_stmt); // execute SQL statement
return !$result ? FALSE : TRUE;
}
 
public function select($sql_stmt) {
$result = mysqli_query($this->db_handle, $sql_stmt);
if (!$result) die("Database access failed: " . mysqli_error($this->db_handle));
$rows = mysqli_num_rows($result);
$data = array();
if ($rows) {
while ($row = mysqli_fetch_array($result)) {
$data = $row;
}
}
return $data;
}
 
public function insert($sql_stmt) {
return $this->execute_query($sql_stmt);
}
 
public function __destruct(){
mysqli_close($this->db_handle);
}
 
}
 
?>

İŞTE,

  • “public function __construct()”, veritabanı bağlantısını kurmak için kullanılan sınıf yapıcı yöntemidir
  • “public function execute_query(…)” metodu, ekleme, güncelleme ve silme gibi sorguları çalıştırmak için kullanılır.
  • “public function select(…)” ifadesi, verileri almak için kullanılan yöntemdir. veritabanı ve bir dizi döndürüyor.
  • “public function insert(…)”, executive_query yöntemini çağıran ekleme yöntemidir.
  • “public function __destruct()” veritabanı bağlantısını kapatan sınıf yıkıcıdır.

Şimdi ön kontrol ünitesini oluşturalım. index.php

<?php
 
require 'opinion_poll_model.php';
 
$model = new Opinion_poll_model();
 
if (count($_POST) == 1) {
echo "<script>alert(1);</script>";
}
 
if (count($_POST) > 1) {
$ts = date("Y-m-d H:i:s");
$option = $_POST['vote'][0];
$sql_stmt = "INSERT INTO js_libraries (`choice`,`ts`) VALUES ($option,3)";
$model->insert($sql_stmt);
$sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries;";
$choices_count = $model->select($sql_stmt);
$libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
$table_rows = '';
for ($i = 1; $i < 5; $i++) {
$sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;";
$result = $model->select($sql_stmt);
$table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>";
}
require 'results.html.php';
exit;
}
 
require 'opinion.html.php';
 
?>

İŞTE,

  • “'opinion_poll_model.php' gerektir;” iş mantığı sınıfını yükler
  • “$model = yeni Opinion_poll_model();” iş mantığı sınıfının bir örneğini oluşturur
  • “if (count($_POST) == 1)…” veri doğrulamayı gerçekleştirir ve kullanır JavaOy verilmeyen adaylar için bir mesaj kutusu görüntüleyen komut dosyası.
  • “if (count($_POST) > 1)…” ifadesi, $_POST dizisindeki öğe sayısını sayarak bir oy seçilip seçilmediğini kontrol eder. Hiçbir öğe seçilmemişse, $_POST yalnızca gönder öğesini içerecektir. Bir kütüphane seçilmişse, $_POST dizisi iki öğe içerecektir: gönder ve oy öğeleri. Bu kod ayrıca yeni bir oy kaydı ekler ve ardından sonuç sayfasını görüntüler.
  • Sonuçlar görüntülendikten sonra komut dosyasının yürütülmesini sonlandırmak için "exit;" komutu kullanılır, böylece anket formu görüntülenmez.
  • “'opinion.html.php' gerektir;” Hiçbir şey seçilmemişse kamuoyu yoklaması formunu görüntüler.

Şimdi görünümleri oluşturalım. görüş.html.php

<html>
<head>
<title>JavaScript Libraries - Opinion Poll</title>
</head>
<body>
 
<h2>JavaScript Libraries - Opinion Poll</h2>
 
<p><b>What is your favorite JavaScript?</b></p>
 
<form method="POST" action="index.php">
 
<p> <input type="radio" name="vote" value="1" />JQuery
 
<br /><input type="radio" name="vote" value="2" />MooTools
 
<br /><input type="radio" name="vote" value="3" />YUI Library
 
<br /><input type="radio" name="vote" value="4" />Glow
 
</p>
 
<p><input type="submit" name="submitbutton" value="OK" /></p>
 
</form>
 
</body>
 
</html>

sonuçlar.html.php

<html>
 
<head>
 
<title>JavaScript Libraries Poll Results</title>
 
</head>
 
<body>
 
<h2>Opinion Poll Results</h2>
 
<p><b>What is your favorite JavaScript Library?</b></p>
 
<p><b><?php echo $choices_count[0]; ?></b> people have thus far taken part in this poll:</p>
 
<p>
<table>
 
<?php echo($table_rows); ?>
</table>
</body>
</html>

Adım 3) Uygulamamızı test etme

Dosyaları opinionpoll klasörüne kaydettiğinizi varsayarak, aşağıdaki klasöre göz atın: URL http://localhost/opinionpoll/

Bir Kamuoyu Anketi Uygulamasını Test Etme

Bir JS kütüphanesi seçmeden Tamam düğmesine tıklarsanız, aşağıdaki mesaj kutusunu göreceksiniz.

Bir Kamuoyu Anketi Uygulamasını Test Etme

Bir JavaScript kütüphanesi seçin, ardından Tamam düğmesine tıklayın. Aşağıda gösterilene benzer bir sonuç sayfası elde edeceksiniz.

Bir Kamuoyu Anketi Uygulamasını Test Etme

Kamuoyu yoklama uygulamasını iyileştirmenin yolları

Bu proje sağlam bir temel oluşturuyor. Üretime hazır hale getirmek için aşağıdaki iyileştirmeleri göz önünde bulundurun:

  • Hazırlanmış ifadeleri kullanın Modelde, birleştirilmiş sorgulardan kaynaklanan SQL enjeksiyonu riskini ortadan kaldırmak amaçlanmıştır.
  • Çifte oy kullanmayı önleyin Çerez, oturum bayrağı veya seçmenin IP adresinin zaman damgasıyla birlikte kaydedilmesi yoluyla.
  • Yüzde oranlarını ve bir çubuk grafiği gösterin. Sonuç sayfasında ham sayılar yerine, sonucu daha net görebilmek için veriler yer alır.
  • Anketi dinamik hale getirin Soruyu ve seçenekleri veritabanında saklayarak, anket kodunu istediğiniz zaman yeniden kullanabilirsiniz.

SSS

Ön denetleyici, her isteği genellikle index.php olan tek bir giriş noktası üzerinden yönlendirir; bu da doğru mantığı ve görünümü yükler. Yönlendirmeyi, kimlik doğrulamayı ve paylaşılan kurulumu merkezileştirir ve çoğu PHP çerçevesinin temelini oluşturur.

Yaygın yaklaşımlar arasında oylamadan sonra çerez ayarlamak, oturumu oylanmış olarak işaretlemek veya seçmenin IP adresini ve zaman damgasını veritabanına kaydetmek yer almaktadır. Bunların hiçbiri kusursuz değildir, bu nedenle yöntemleri birleştirin veya daha sıkı kontrol için oturum açmayı zorunlu kılın.

Birleştirilmiş sorguları, oy değerini parametre olarak bağlayarak mysqli veya PDO'da hazırlanmış ifadelerle değiştirin. Ayrıca, sorguya ulaşmadan önce seçimin beklenen sayılardan biri olduğunu doğrulayın.

Evet. Yapay zeka, birden fazla soru, veritabanından dinamik seçenekler, grafikli yüzdesel sonuçlar ve bir yönetici sayfası ekleyebilir. İstediğiniz özellikleri açıklayın, ardından dağıtımdan önce oluşturulan kodu inceleyin ve test edin.

Evet. Modeli, denetleyiciyi ve görünümleri yapıştırın, yapay zeka tanımlanmamış değişkenleri, eksik bağlantı argümanlarını, enjeksiyon risklerini ve kaçış karakteri kullanılmamış çıktıları tespit edip, test etmek için düzeltilmiş, daha güvenli sürümler önerebilir.

Bu yazıyı şu şekilde özetleyin: