🐘 Ενότητα 4: Εισαγωγή στη PHP

Δυναμικές ιστοσελίδες και server-side προγραμματισμός!

4.1 Τι είναι η PHP;

💡 Μια απλή εξήγηση

Η PHP (Hypertext Preprocessor) είναι μια γλώσσα προγραμματισμού που τρέχει στον server και δημιουργεί δυναμικές ιστοσελίδες!

Η διαφορά με τη JavaScript:

  • JavaScript = Τρέχει στον browser του χρήστη (client-side)
  • PHP = Τρέχει στον server πριν σταλεί η σελίδα στον χρήστη (server-side)

Γιατί χρησιμοποιούμε PHP;

✨ Τι μπορεί να κάνει η PHP;

  • 🗄️ Να επικοινωνεί με βάσεις δεδομένων (MySQL, PostgreSQL)
  • 📝 Να επεξεργάζεται φόρμες (login, εγγραφή, comments)
  • 📧 Να στέλνει emails
  • 🔐 Να δημιουργεί συστήματα authentication
  • 📁 Να διαχειρίζεται αρχεία στον server
  • 🛒 Να φτιάχνει e-shops και CMS συστήματα
  • 🌐 Να δημιουργεί APIs

PHP vs JavaScript: Η Βασική Διαφορά

🖥️ Client-Side (JavaScript)

Ο κώδικας τρέχει στον browser του χρήστη

<!DOCTYPE html> <html> <head> <title>JavaScript Example</title> </head> <body> <h1>Γεια σου!</h1> <script> // Αυτός ο κώδικας τρέχει στον browser alert('Γεια από JavaScript!'); </script> </body> </html>

🌐 Server-Side (PHP)

Ο κώδικας τρέχει στον server πριν σταλεί στον browser

<!DOCTYPE html> <html> <head> <title>PHP Example</title> </head> <body> <!-- Η PHP τρέχει πρώτα στον server --> <?php // Αυτός ο κώδικας εκτελείται στον server $message = "Γεια από PHP!"; echo "<h1>" . $message . "</h1>"; ?> </body> </html>

Σημαντικό: Ο χρήστης ΔΕΝ βλέπει τον PHP κώδικα! Βλέπει μόνο το τελικό HTML που παράγει η PHP.

4.2 Πού γράφουμε PHP;

🔧 Τι χρειαζόμαστε;

Για να τρέξουμε PHP, χρειαζόμαστε:

  1. Web Server (π.χ. Apache ή Nginx)
  2. PHP εγκατεστημένη στον server
  3. Βάση δεδομένων (προαιρετικά, συνήθως MySQL)

Εύκολες Λύσεις για Ξεκίνημα

📦 All-in-One Πακέτα

Αυτά τα πακέτα εγκαθιστούν τα πάντα μαζί (Apache, PHP, MySQL):

  • XAMPP - Για Windows, Mac, Linux (το πιο δημοφιλές)
  • WAMP - Για Windows
  • MAMP - Για Mac
  • LAMP - Για Linux

Δομή Αρχείου PHP

📄 Βασικό Αρχείο PHP

Τα αρχεία PHP έχουν επέκταση .php (όχι .html)

<!DOCTYPE html> <html lang="el"> <head> <meta charset="UTF-8"> <title>Το πρώτο μου PHP</title> </head> <body> <h1>Καλώς ήρθες στη PHP!</h1> <?php // Ο PHP κώδικας μπαίνει μέσα σε PHP tags. echo "<p>Αυτό είναι PHP κώδικας!</p>"; ?> <p>Αυτό είναι απλό HTML</p> </body> </html>

⚠️ Σημαντικό!

  • Τα αρχεία PHP πρέπει να έχουν επέκταση .php
  • Πρέπει να ανοίγουν μέσω web server (π.χ. http://localhost/hello.php)
  • ΔΕΝ μπορούν να ανοίξουν απευθείας με διπλό κλικ!

4.3 Βασική Σύνταξη

Οι PHP Tags

🏷️ Πώς ξεκινάμε και τελειώνουμε PHP κώδικα

// Τυπικός τρόπος (ΣΥΝΙΣΤΑΤΑΙ) <?php echo "Γεια σου κόσμε!"; ?>

Καλή Πρακτική: Χρησιμοποιούμε πάντα το πλήρες <?php

Εντολές και Σημεία Στίξης

📝 Βασικοί Κανόνες

<?php // 1. Κάθε εντολή τελειώνει με ; echo "Πρώτη εντολή"; echo "Δεύτερη εντολή"; // 2. Τα σχόλια (comments) // Αυτό είναι μονογραμμικό σχόλιο /* Αυτό είναι πολυγραμμικό σχόλιο */ # Αυτό είναι επίσης σχόλιο ?>

Echo και Print

🖨️ Εμφάνιση περιεχομένου

Εντολή Χρήση Παράδειγμα
echo Εμφανίζει κείμενο/HTML (πιο γρήγορο) echo "Γεια!";
print Όμοιο με echo (πιο αργό) print "Γεια!";

💬 Παραδείγματα Echo

<?php // ------------------------------------------ // Παράδειγμα εμφάνισης κειμένου με την echo // ------------------------------------------ // Εμφανίζει απλό κείμενο στην οθόνη echo "Γεια σου!"; // ------------------------------------------ // Εκτύπωση HTML κώδικα μέσα από την PHP // ------------------------------------------ // Μπορούμε να γράψουμε HTML tags απευθείας στο echo echo "<h1>Τίτλος</h1>"; // ------------------------------------------ // Εκτύπωση πολλών τιμών με κόμμα (,) // ------------------------------------------ // Η echo δέχεται πολλαπλά ορίσματα χωρισμένα με κόμμα // και τα εμφανίζει στη σειρά, χωρίς αυτόματη προσθήκη κενού. echo "Γεια", " ", "σου", " ", "κόσμε!"; // ------------------------------------------ // Συνένωση (ένωση) κειμένων με τελεστή τελεία (.) // ------------------------------------------ // Ο πιο συνηθισμένος τρόπος: χρησιμοποιούμε την τελεία για να ενώσουμε strings echo "Γεια" . " " . "σου!"; ?>

4.4 Μεταβλητές

💡 Τι είναι οι μεταβλητές;

Οι μεταβλητές είναι "κουτιά" που αποθηκεύουν πληροφορίες. Στη PHP, όλες οι μεταβλητές ξεκινούν με το σύμβολο $

Δήλωση Μεταβλητών

📦 Βασικά Παραδείγματα

<?php // ------------------------------------------ // Δήλωση μεταβλητών με διάφορους τύπους δεδομένων // ------------------------------------------ $name = "Γιώργος"; // Κείμενο (string) $age = 25; // Ακέραιος αριθμός (integer) $price = 19.99; // Δεκαδικός αριθμός (float) $isStudent = true; // Λογική τιμή (boolean) // ------------------------------------------ // Εμφάνιση των τιμών των μεταβλητών // ------------------------------------------ echo "Το όνομά μου είναι " . $name; // Εμφανίζει το όνομα echo "<br>"; // Νέα γραμμή στην HTML σελίδα echo "Είμαι " . $age . " χρονών"; // Εμφανίζει την ηλικία ?>

Κανόνες Ονομασίας

✅ Καλές Πρακτικές

  • ✅ Ξεκινούν με $ και μετά γράμμα ή _
  • ✅ Μπορούν να περιέχουν γράμματα, αριθμούς, _
  • ✅ Case-sensitive ($name$Name)
  • ❌ ΔΕΝ ξεκινούν με αριθμό
  • ❌ ΔΕΝ περιέχουν κενά
// Σωστά $firstName = "Γιώργος"; $first_name = "Γιώργος"; $age2 = 25; $_temp = 100; // Λάθος // $2age = 25; // ΔΕΝ ξεκινά με αριθμό // $first name = "X"; // ΔΕΝ έχει κενά

Πλήρες Παράδειγμα

🎨 Πλήρης Σελίδα με PHP και CSS

Ένα ολοκληρωμένο παράδειγμα που δείχνει πώς η PHP συνδυάζεται με HTML και CSS

<!DOCTYPE html> <html lang="el"> <head> <meta charset="UTF-8"> <title>Παράδειγμα PHP με CSS</title> <!-- Εσωτερικό CSS για τη μορφοποίηση της σελίδας --> <style> /* Ορισμός γενικού στυλ για όλη τη σελίδα */ body { font-family: Arial, sans-serif; /* Γραμματοσειρά */ background-color: #eef2f3; /* Απαλό γκρι φόντο */ color: #333333; /* Σκούρο γκρι κείμενο */ text-align: center; /* Κεντράρει το κείμενο */ margin-top: 100px; /* Κενό από πάνω */ } /* Στυλ για την επικεφαλίδα h1 */ h1 { color: #1a73e8; /* Μπλε απόχρωση */ } /* Στυλ για τις παραγράφους */ p { font-size: 18px; /* Μέγεθος γραμματοσειράς */ margin: 10px 0; /* Απόσταση πάνω-κάτω */ } /* Στυλ για τα έντονα γράμματα */ strong { color: #007700; /* Πράσινο χρώμα */ } </style> </head> <body> <!-- Επικεφαλίδα σελίδας --> <h1>Πληροφορίες Χρήστη</h1> <?php // === Δηλώσεις μεταβλητών === $name = "Γιώργος"; // Όνομα χρήστη (string) $age = 25; // Ηλικία (αριθμός) $price = 19.99; // Τιμή (δεκαδικός αριθμός) $isStudent = true; // Κατάσταση φοιτητή (boolean) // === Εκτύπωση πληροφοριών με HTML === echo "<p>Το όνομά μου είναι <strong>$name</strong>.</p>"; echo "<p>Είμαι $age χρονών.</p>"; echo "<p>Η τιμή είναι €$price.</p>"; // === Έλεγχος με if/else === // Αν ο χρήστης είναι φοιτητής, εμφανίζει το κατάλληλο μήνυμα if ($isStudent) { echo "<p>Είμαι φοιτητής 🎓</p>"; } else { echo "<p>Δεν είμαι φοιτητής.</p>"; } ?> </body> </html>

✅ Τι δείχνει αυτό το παράδειγμα;

  • Συνδυασμός HTML, CSS και PHP σε ένα αρχείο
  • Αναλυτικά σχόλια για κάθε τμήμα του CSS
  • Χρήση μεταβλητών ($name, $age, $price, $isStudent)
  • Εμφάνιση μεταβλητών μέσα σε strings με echo
  • Δομή ελέγχου if-else
  • Styling με CSS για όμορφη εμφάνιση

Variable Scope (Εμβέλεια)

🧠 Τι σημαίνει "τοπική" και "global" μεταβλητή

  • Global (καθολική) = υπάρχει παντού στο αρχείο PHP, έξω από τις συναρτήσεις.
  • Local (τοπική) = υπάρχει μόνο μέσα στη συνάρτηση που τη δημιούργησες.

🔍 Παράδειγμα με επεξηγήσεις

<?php // ------------------------------- // Καθολική (global) μεταβλητή // ------------------------------- $globalVar = "Είμαι global"; // Δημιουργούμε μια συνάρτηση function testFunction() { // ------------------------------- // Τοπική (local) μεταβλητή // ------------------------------- $localVar = "Είμαι local"; echo $localVar; // ✅ Δουλεύει γιατί είμαστε μέσα στη συνάρτηση echo "<br>"; // ----------------------------------- // Αν θέλουμε να χρησιμοποιήσουμε // μια global μεταβλητή μέσα στη function, // πρέπει να τη "φέρουμε μέσα" με τη λέξη-κλειδί global // ----------------------------------- global $globalVar; echo $globalVar; // ✅ Δουλεύει τώρα, επειδή την κάναμε διαθέσιμη } // ----------------------------------- // Εκτέλεση της συνάρτησης // ----------------------------------- testFunction(); echo "<br>"; // ----------------------------------- // Εδώ είμαστε έξω από τη function, // οπότε η global μεταβλητή είναι ορατή // ----------------------------------- echo $globalVar; // ✅ Δουλεύει echo "<br>"; // ----------------------------------- // Αυτή η μεταβλητή ΔΕΝ είναι γνωστή έξω από τη function // ----------------------------------- // echo $localVar; // ❌ Σφάλμα! Δεν υπάρχει εδώ ?>

🧩 Τι θα εμφανίσει αυτό στον browser:

Είμαι local Είμαι global Είμαι global

📊 Οπτική Αναπαράσταση Scope

+-------------------------------------------+
|      Κύριο αρχείο PHP                     |
|-------------------------------------------|
| $globalVar = "Καθολική";                  |   ✅ Ορατή εδώ
|                                           |
| function demo() {                         |
|     $localVar = "Τοπική";                 |
|     echo $localVar;       ✅ Ορατή εδώ    |
|     echo $globalVar;      ❌ Δεν τη βλέπει |
|     global $globalVar;                    |
|     echo $globalVar;      ✅ Τώρα τη βλέπει |
| }                                         |
|                                           |
| echo $globalVar;          ✅ Ορατή εδώ    |
+-------------------------------------------+

4.5 Τύποι Δεδομένων

📊 Οι Βασικοί Τύποι

Η PHP έχει διάφορους τύπους δεδομένων. Δεν χρειάζεται να δηλώνουμε τον τύπο - η PHP τον καταλαβαίνει αυτόματα!

String (Κείμενο)

📝 Strings

<?php // With double quotes $text1 = "Hello there!"; // With single quotes $text2 = 'Good morning!'; // Difference: double quotes process variables inside the string $name = "George"; echo "Hello $name"; // Hello George echo "<br>"; echo 'Hello $name'; // Hello $name (literal text) echo "<br>"; // String concatenation using the dot (.) $fullName = "George" . " " . "Bardis"; // Useful string functions echo strlen($text1); // String length (in bytes) echo "<br>"; echo strtoupper($text1); // Convert to uppercase echo "<br>"; echo strtolower($text1); // Convert to lowercase ?>

Integer (Ακέραιος)

🔢 Integers

<?php // ============================================ // Example: Integer (Ακέραιοι αριθμοί) στη PHP // ============================================ // Απλή μεταβλητή με θετικό ακέραιο $age = 25; // Μεταβλητή με μεγαλύτερο ακέραιο $year = 2025; // Μεταβλητή με αρνητικό ακέραιο $negative = -10; // -------------------------------------------- // Έλεγχος τύπου δεδομένων με var_dump() // -------------------------------------------- // Εμφανίζει τον τύπο και την τιμή της μεταβλητής // Παράδειγμα εξόδου: int(25) var_dump($age); // -------------------------------------------- // Έλεγχος αν η μεταβλητή είναι ακέραιος αριθμός // -------------------------------------------- // Η is_int() επιστρέφει true ή false // Στην οθόνη εμφανίζεται "1" για true και τίποτα για false echo is_int($age); // ✅ Εμφανίζει: 1 (δηλαδή true) ?>

Float (Δεκαδικός)

💵 Floats

<?php $price = 19.99; $temperature = -5.5; $pi = 3.14159; var_dump($price); // float(19.99) echo is_float($price); // true ?>

Boolean (Λογική Τιμή)

✅❌ Booleans

<?php $isStudent = true; $hasLicense = false; if ($isStudent) { echo "Είσαι φοιτητής"; } // Έλεγχος var_dump($isStudent); // bool(true) ?>

Array (Πίνακας)

📋 Arrays

<?php // Indexed array $fruits = array("Μήλο", "Μπανάνα", "Πορτοκάλι"); // ή $fruits = ["Μήλο", "Μπανάνα", "Πορτοκάλι"]; echo $fruits[0]; // Μήλο // Associative array $student = [ "name" => "Γιώργος", "age" => 25, "city" => "Τρίπολη" ]; echo $student["name"]; // Γιώργος ?>

💡 Σημαντική Διευκρίνιση για Arrays

Στη PHP, οι πίνακες (arrays) χωρίζονται σε δύο κύριες κατηγορίες:

👉 indexed (με αριθμητικά κλειδιά) και 👉 associative (με ονομαστικά κλειδιά).

Πάμε να το εξηγήσουμε καθαρά και με παραδείγματα για να το καταλάβεις βαθιά 👇

🧩 1️⃣ Indexed Array (Πίνακας με αριθμούς)

$fruits = array("Μήλο", "Μπανάνα", "Πορτοκάλι"); // ή απλούστερα: $fruits = ["Μήλο", "Μπανάνα", "Πορτοκάλι"];

🔹 Κάθε στοιχείο αποθηκεύεται σε μια θέση (index), που ξεκινά από το 0.
🔹 Οι αριθμοί αυτοί αντιπροσωπεύουν τη σειρά των στοιχείων.

Index Τιμή
0 Μήλο
1 Μπανάνα
2 Πορτοκάλι

📘 Παράδειγμα χρήσης:

echo $fruits[0]; // Εμφανίζει: Μήλο echo $fruits[2]; // Εμφανίζει: Πορτοκάλι

⚠️ Αν γράψεις $fruits[5], θα πάρεις σφάλμα γιατί το στοιχείο δεν υπάρχει.

🧩 2️⃣ Associative Array (Συσχετιστικός πίνακας)

$student = [ "name" => "Γιώργος", "age" => 25, "city" => "Τρίπολη" ];

🔹 Εδώ αντί για αριθμούς, χρησιμοποιείς λέξεις (κλειδιά) για να "ονομάσεις" κάθε τιμή.
🔹 Έτσι ο πίνακας μοιάζει με "μικρή βάση δεδομένων".

Κλειδί (key) Τιμή (value)
name Γιώργος
age 25
city Τρίπολη

📘 Παράδειγμα χρήσης:

echo $student["name"]; // Εμφανίζει: Γιώργος echo $student["city"]; // Εμφανίζει: Τρίπολη

💡 Διαφορά με λίγα λόγια:

Τύπος πίνακα Τι χρησιμοποιεί ως "κλειδιά" Παράδειγμα πρόσβασης
Indexed Αριθμούς (0, 1, 2...) $fruits[0]
Associative Ονόματα (π.χ. "name", "age") $student["name"]

NULL

💡 Τι είναι το null

Το null σημαίνει:
«Δεν έχει τιμή» ή «καμία τιμή».

🔹 Είναι διαφορετικό από το 0, από το false και από ένα "" (άδειο string).
🔹 Σημαίνει κυριολεκτικά: "δεν υπάρχει τίποτα εκεί μέσα".

📘 Παράδειγμα:

<?php $x = null; // Δεν έχει καμία τιμή $y = "Γεια!"; // Έχει κανονική τιμή var_dump($x); // δείχνει: NULL var_dump($y); // δείχνει: string(5) "Γεια!" ?>

🧠 Πότε χρησιμοποιούμε το null

1️⃣ Όταν θέλεις να δηλώσεις μια μεταβλητή αλλά δεν έχεις ακόμη τιμή να της δώσεις.

$user = null; // Θα πάρει τιμή αργότερα

2️⃣ Όταν θέλεις να "αδειάσεις" μια μεταβλητή:

$user = "Γιώργος"; $user = null; // Τώρα είναι σαν να μην υπάρχει τιμή

3️⃣ Όταν μια function δεν επιστρέφει τίποτα, μπορεί να επιστρέψει null.

Έλεγχος και Χρήση NULL

🚫 NULL

<?php // ------------------------------------------ // Τι είναι το NULL; // ------------------------------------------ // Δημιουργούμε μια μεταβλητή και της δίνουμε τιμή null // Αυτό σημαίνει ότι υπάρχει, αλλά δεν περιέχει καμία τιμή $emptyVar = null; // Η συνάρτηση is_null() επιστρέφει true αν η μεταβλητή είναι null // Εδώ θα εμφανίσει "1" (true) echo is_null($emptyVar); // true echo "<br>"; // ------------------------------------------ // Έλεγχος αν μεταβλητή δεν έχει οριστεί // ------------------------------------------ // Μια μεταβλητή που δεν έχει οριστεί καθόλου θεωρείται μη υπάρχουσα // Η isset() επιστρέφει false αν η μεταβλητή δεν υπάρχει ή είναι null // Επομένως, το !isset() επιστρέφει true και εκτελεί το echo if (!isset($undefinedVar)) { echo "Η μεταβλητή δεν υπάρχει"; } echo "<br>"; // ------------------------------------------ // Διαφορά μεταξύ null, "", 0 και false // ------------------------------------------ $var1 = null; // Καμία τιμή $var2 = ""; // Κενό string (υπάρχει αλλά είναι άδειο) $var3 = 0; // Αριθμός μηδέν $var4 = false; // Λογική τιμή false echo "var1 is null: " . (is_null($var1) ? "Ναι" : "Όχι"); echo "<br>"; echo "var2 is null: " . (is_null($var2) ? "Ναι" : "Όχι"); echo "<br>"; // ------------------------------------------ // Χρήση του empty() για έλεγχο "άδειων" τιμών // ------------------------------------------ // Το empty() επιστρέφει true για: null, "", 0, "0", false, [] if (empty($var1)) { echo "Η var1 είναι άδεια"; } echo "<br>"; // ------------------------------------------ // Μηδενισμός (unset) μεταβλητής // ------------------------------------------ $tempVar = "Κάτι"; unset($tempVar); // Διαγράφει τη μεταβλητή εντελώς if (!isset($tempVar)) { echo "Η tempVar δεν υπάρχει πια"; } ?>

📋 Σύγκριση: null vs empty vs isset

Μεταβλητή is_null() empty() isset()
$x = null; ✅ true ✅ true ❌ false
$x = ""; ❌ false ✅ true ✅ true
$x = 0; ❌ false ✅ true ✅ true
$x = false; ❌ false ✅ true ✅ true
Μεταβλητή δεν υπάρχει ✅ true ✅ true ❌ false

4.6 Τελεστές

Αριθμητικοί Τελεστές

➕➖✖️➗ Μαθηματικές Πράξεις

<?php $a = 10; $b = 3; echo $a + $b; // 13 (Πρόσθεση) echo $a - $b; // 7 (Αφαίρεση) echo $a * $b; // 30 (Πολλαπλασιασμός) echo $a / $b; // 3.333... (Διαίρεση) echo $a % $b; // 1 (Υπόλοιπο διαίρεσης) echo $a ** $b; // 1000 (Ύψωση σε δύναμη) ?>

Τελεστές Ανάθεσης

= Ανάθεση Τιμών

<?php $x = 10; $x += 5; // $x = $x + 5 (τώρα $x = 15) $x -= 3; // $x = $x - 3 (τώρα $x = 12) $x *= 2; // $x = $x * 2 (τώρα $x = 24) $x /= 4; // $x = $x / 4 (τώρα $x = 6) // Αύξηση/Μείωση $x++; // $x = $x + 1 (τώρα $x = 7) $x--; // $x = $x - 1 (τώρα $x = 6) ?>

Τελεστές Σύγκρισης

📊 Τι είναι οι τελεστές σύγκρισης;

Οι τελεστές σύγκρισης χρησιμοποιούνται για να συγκρίνουμε δύο τιμές και επιστρέφουν πάντα μια boolean τιμή (true ή false).

🔍 Πλήρης Οδηγός Συγκρίσεων

<?php // ============================================ // Παράδειγμα συγκρίσεων (Comparison Operators) // ============================================ // Οι τελεστές σύγκρισης χρησιμοποιούνται για να συγκρίνουμε δύο τιμές // και επιστρέφουν πάντα boolean τιμή (true ή false) // Δήλωση μεταβλητών για τα παραδείγματα $a = 10; // Ακέραιος αριθμός (integer) 10 $b = 5; // Ακέραιος αριθμός (integer) 5 $c = "10"; // Κείμενο (string) "10" - προσοχή: είναι string, όχι number! $d = 10; // Ακέραιος αριθμός (integer) 10 - ίδιος με $a echo "<h3>1. == (Ισότητα - Loose Comparison)</h3>"; echo "<p>Συγκρίνει ΜΟΝΟ την τιμή, κάνει αυτόματη μετατροπή τύπου</p>"; // -------------------------------------------- echo "<strong>Παράδειγμα 1.1:</strong> \$a == \$b<br>"; var_dump($a == $b); // Έξοδος: bool(false) // Εξήγηση: 10 ΔΕΝ είναι ίσο με 5 echo "<br><br>"; echo "<strong>Παράδειγμα 1.2:</strong> \$a == \$c<br>"; var_dump($a == $c); // Έξοδος: bool(true) // Εξήγηση: Το string "10" μετατρέπεται αυτόματα σε int(10) // Άρα 10 == 10 → true echo "<br><br>"; echo "<strong>Παράδειγμα 1.3:</strong> \$a == \$d<br>"; var_dump($a == $d); // Έξοδος: bool(true) // Εξήγηση: Και οι δύο είναι int(10), άρα ίσοι echo "<br><br>"; // -------------------------------------------- echo "<h3>2. === (Αυστηρή Ισότητα - Strict Comparison)</h3>"; echo "<p>Συγκρίνει ΚΑΙ την τιμή ΚΑΙ τον τύπο δεδομένων (NO type conversion!)</p>"; // -------------------------------------------- echo "<strong>Παράδειγμα 2.1:</strong> \$a === \$c<br>"; var_dump($a === $c); // Έξοδος: bool(false) // Εξήγηση: int(10) ΔΕΝ είναι το ίδιο με string("10") // Διαφορετικοί τύποι δεδομένων! echo "<br><br>"; echo "<strong>Παράδειγμα 2.2:</strong> \$a === \$d<br>"; var_dump($a === $d); // Έξοδος: bool(true) // Εξήγηση: int(10) === int(10) - ίδιος τύπος ΚΑΙ ίδια τιμή echo "<br><br>"; // -------------------------------------------- echo "<h3>3. != (Διαφορετικό - Not Equal)</h3>"; echo "<p>Ελέγχει αν δύο τιμές ΔΕΝ είναι ίσες (με μετατροπή τύπου)</p>"; // -------------------------------------------- echo "<strong>Παράδειγμα 3.1:</strong> \$a != \$b<br>"; var_dump($a != $b); // Έξοδος: bool(true) // Εξήγηση: 10 ΔΕΝ είναι ίσο με 5 → true echo "<br><br>"; echo "<strong>Παράδειγμα 3.2:</strong> \$a != \$c<br>"; var_dump($a != $c); // Έξοδος: bool(false) // Εξήγηση: Το "10" γίνεται 10, άρα 10 == 10 → false (δεν είναι διαφορετικά) echo "<br><br>"; // -------------------------------------------- echo "<h3>4. !== (Αυστηρά Διαφορετικό)</h3>"; // -------------------------------------------- echo "<strong>Παράδειγμα 4.1:</strong> \$a !== \$c<br>"; var_dump($a !== $c); // Έξοδος: bool(true) // Εξήγηση: int(10) ΔΕΝ είναι το ίδιο με string("10") → true echo "<br><br>"; // -------------------------------------------- echo "<h3>5. > (Μεγαλύτερο)</h3>"; // -------------------------------------------- echo "<strong>Παράδειγμα 5.1:</strong> \$a > \$b<br>"; var_dump($a > $b); // Έξοδος: bool(true) // Εξήγηση: 10 > 5 → true ✅ echo "<br><br>"; echo "<strong>Παράδειγμα 5.2:</strong> \$a > \$d<br>"; var_dump($a > $d); // Έξοδος: bool(false) // Εξήγηση: 10 > 10 → false (δεν είναι μεγαλύτερο, είναι ίσο) echo "<br><br>"; // -------------------------------------------- echo "<h3>6. < (Μικρότερο)</h3>"; // -------------------------------------------- echo "<strong>Παράδειγμα 6.1:</strong> \$a < \$b<br>"; var_dump($a < $b); // Έξοδος: bool(false) // Εξήγηση: 10 < 5 → false ❌ echo "<br><br>"; echo "<strong>Παράδειγμα 6.2:</strong> \$b < \$a<br>"; var_dump($b < $a); // Έξοδος: bool(true) // Εξήγηση: 5 < 10 → true ✅ echo "<br><br>"; // -------------------------------------------- echo "<h3>7. >= (Μεγαλύτερο ή Ίσο)</h3>"; // -------------------------------------------- echo "<strong>Παράδειγμα 7.1:</strong> \$a >= 10<br>"; var_dump($a >= 10); // Έξοδος: bool(true) // Εξήγηση: 10 >= 10 → true (είναι ίσο) ✅ echo "<br><br>"; echo "<strong>Παράδειγμα 7.2:</strong> \$a >= \$b<br>"; var_dump($a >= $b); // Έξοδος: bool(true) // Εξήγηση: 10 >= 5 → true (είναι μεγαλύτερο) ✅ echo "<br><br>"; // -------------------------------------------- echo "<h3>8. <= (Μικρότερο ή Ίσο)</h3>"; // -------------------------------------------- echo "<strong>Παράδειγμα 8.1:</strong> \$a <= 5<br>"; var_dump($a <= 5); // Έξοδος: bool(false) // Εξήγηση: 10 <= 5 → false (δεν είναι ούτε μικρότερο ούτε ίσο) ❌ echo "<br><br>"; echo "<strong>Παράδειγμα 8.2:</strong> \$a <= 10<br>"; var_dump($a <= 10); // Έξοδος: bool(true) // Εξήγηση: 10 <= 10 → true (είναι ίσο) ✅ echo "<br><br>"; // ============================================ // Πρακτικό Παράδειγμα // ============================================ echo "<h3>9. Πρακτικό Παράδειγμα</h3>"; $age = 20; $minAge = 18; echo "<strong>Έλεγχος αν κάποιος είναι ενήλικας:</strong><br>"; if ($age >= $minAge) { echo "✅ Είσαι ενήλικας! (Ηλικία: $age >= $minAge)<br>"; } else { echo "❌ Είσαι ανήλικος! (Ηλικία: $age < $minAge)<br>"; } ?>

📚 Σύνοψη Τελεστών

  • == → Ίσο (με μετατροπή τύπου)
  • === → Ίσο (χωρίς μετατροπή - strict)
  • != → Διαφορετικό (με μετατροπή)
  • !== → Διαφορετικό (χωρίς μετατροπή - strict)
  • > → Μεγαλύτερο
  • < → Μικρότερο
  • >= → Μεγαλύτερο ή ίσο
  • <= → Μικρότερο ή ίσο

💡 Συμβουλή: Χρησιμοποίησε === και !== για πιο ασφαλείς συγκρίσεις!

Λογικοί Τελεστές

🔗 AND, OR, NOT

<?php $age = 25; $hasLicense = true; // AND (και τα δύο πρέπει να είναι true) if ($age >= 18 && $hasLicense) { echo "Μπορείς να οδηγήσεις"; } // OR (τουλάχιστον ένα πρέπει να είναι true) if ($age < 18 || $age > 65) { echo "Ειδική κατηγορία"; } // NOT (αντιστροφή) if (!$hasLicense) { echo "Δεν έχεις άδεια"; } ?>

4.7 Δομές Ελέγχου

If - Else

❓ Συνθήκες

<?php $score = 85; // Απλό if if ($score >= 50) { echo "Πέρασες!"; } // If-else if ($score >= 50) { echo "Πέρασες!"; } else { echo "Κόπηκες"; } // If-elseif-else if ($score >= 90) { echo "Άριστα!"; } elseif ($score >= 70) { echo "Πολύ καλά!"; } elseif ($score >= 50) { echo "Καλά"; } else { echo "Κόπηκες"; } ?>

Switch

🔀 Πολλαπλές Επιλογές

<?php $day = "Δευτέρα"; switch ($day) { case "Δευτέρα": echo "Αρχή της εβδομάδας"; break; case "Παρασκευή": echo "Τέλος εβδομάδας!"; break; case "Σάββατο": case "Κυριακή": echo "Σαββατοκύριακο!"; break; default: echo "Καθημερινή"; } ?>

For Loop

🔁 Βρόχος For

<?php // Βασικός for loop for ($i = 1; $i <= 5; $i++) { echo "Αριθμός: " . $i . "<br>"; } // Πίνακας πολλαπλασιασμού for ($i = 1; $i <= 10; $i++) { echo "5 x " . $i . " = " . (5 * $i) . "<br>"; } ?>

While Loop

🔄 Βρόχος While

<?php // While $count = 1; while ($count <= 5) { echo "Count: " . $count . "<br>"; $count++; } // Do-While (εκτελείται τουλάχιστον μία φορά) $num = 10; do { echo "Num: " . $num . "<br>"; $num++; } while ($num < 5); // Εκτελείται μία φορά παρόλο που η συνθήκη είναι false ?>

Foreach Loop (Επανάληψη σε Πίνακες)

💡 Τι είναι η foreach;

Η foreach είναι μια ειδική δομή επανάληψης (loop) στη PHP που χρησιμοποιείται αποκλειστικά για πίνακες (arrays).

Είναι ο πιο εύκολος και πιο ασφαλής τρόπος να διατρέξεις όλα τα στοιχεία ενός πίνακα, χωρίς να χρειάζεται να ξέρεις πόσα στοιχεία έχει!

📋 Βασική Σύνταξη

Σύνταξη 1: Για Indexed Arrays (μόνο τιμές)

foreach ($array as $value) { // Κώδικας που εκτελείται για κάθε στοιχείο // Το $value περιέχει την τιμή του τρέχοντος στοιχείου }

Διάβασέ το ως: "Για κάθε (for each) στοιχείο του $array, πάρε την τιμή του και βάλτη στο $value"

Σύνταξη 2: Για Associative Arrays (κλειδί + τιμή)

foreach ($array as $key => $value) { // Κώδικας που εκτελείται για κάθε στοιχείο // Το $key περιέχει το κλειδί (index ή όνομα) // Το $value περιέχει την τιμή }

Διάβασέ το ως: "Για κάθε στοιχείο του $array, πάρε το κλειδί του και βάλτο στο $key, και την τιμή του και βάλτη στο $value"

🧩 Παράδειγμα 1: Indexed Array (Απλός Πίνακας)

📝 Εμφάνιση φρούτων

<?php // ============================================ // Παράδειγμα με indexed array (αριθμητικά κλειδιά) // ============================================ // Δημιουργούμε πίνακα με φρούτα $fruits = ["Μήλο", "Μπανάνα", "Πορτοκάλι"]; // -------------------------------------------- // Η foreach διατρέχει κάθε στοιχείο του πίνακα // -------------------------------------------- foreach ($fruits as $fruit) { // Σε κάθε επανάληψη, το $fruit παίρνει την τιμή // του επόμενου στοιχείου του πίνακα echo $fruit . "<br>"; } // -------------------------------------------- // Αποτέλεσμα στην οθόνη: // -------------------------------------------- // Μήλο // Μπανάνα // Πορτοκάλι ?>

🔄 Πώς λειτουργεί βήμα-βήμα:

Επανάληψη Τιμή του $fruit Τι εμφανίζεται
"Μήλο" Μήλο
"Μπανάνα" Μπανάνα
"Πορτοκάλι" Πορτοκάλι
✅ Τέλος - Δεν υπάρχουν άλλα στοιχεία

🧩 Παράδειγμα 2: Associative Array (Πίνακας με Ονόματα)

👤 Εμφάνιση στοιχείων φοιτητή

<?php // ============================================ // Παράδειγμα με associative array (ονομαστικά κλειδιά) // ============================================ // Δημιουργούμε πίνακα με πληροφορίες φοιτητή $student = [ "name" => "Γιώργος", "age" => 25, "city" => "Τρίπολη" ]; // -------------------------------------------- // Η foreach διατρέχει κάθε ζεύγος κλειδί => τιμή // -------------------------------------------- foreach ($student as $key => $value) { // Σε κάθε επανάληψη: // - Το $key παίρνει το όνομα του κλειδιού (π.χ. "name") // - Το $value παίρνει την τιμή (π.χ. "Γιώργος") echo $key . ": " . $value . "<br>"; } // -------------------------------------------- // Αποτέλεσμα στην οθόνη: // -------------------------------------------- // name: Γιώργος // age: 25 // city: Τρίπολη ?>

🔄 Πώς λειτουργεί βήμα-βήμα:

Επανάληψη $key $value Εμφάνιση
"name" "Γιώργος" name: Γιώργος
"age" 25 age: 25
"city" "Τρίπολη" city: Τρίπολη
✅ Τέλος - Δεν υπάρχουν άλλα στοιχεία

🎓 Πρακτικά Παραδείγματα

💰 Παράδειγμα 3: Υπολογισμός συνολικής τιμής

<?php // Πίνακας με τιμές προϊόντων $prices = [10.50, 25.00, 15.75, 30.00]; // Μεταβλητή για το άθροισμα $total = 0; // Προσθέτουμε κάθε τιμή στο σύνολο foreach ($prices as $price) { $total += $price; // Ίδιο με: $total = $total + $price } echo "Συνολική τιμή: €" . $total; // Εμφανίζει: Συνολική τιμή: €81.25 ?>

📋 Παράδειγμα 4: Δημιουργία λίστας HTML

<?php // Πίνακας με ονόματα μαθημάτων $courses = [ "Προγραμματισμός", "Βάσεις Δεδομένων", "Δίκτυα Υπολογιστών", "Ανάπτυξη Web" ]; // Δημιουργούμε HTML λίστα echo "<ul>"; foreach ($courses as $course) { echo "<li>" . $course . "</li>"; } echo "</ul>"; ?>

✅ Πλεονεκτήματα της foreach

  • 🎯 Απλή σύνταξη - Πολύ πιο εύκολη από τη for
  • 🔒 Ασφαλής - Δεν μπορείς να βγεις "έξω από τα όρια" του πίνακα
  • 📏 Δεν χρειάζεται να ξέρεις το μέγεθος - Περνάει αυτόματα όλα τα στοιχεία
  • 📖 Ευανάγνωστη - Είναι σαφές τι κάνει ο κώδικας
  • Γρήγορη - Βελτιστοποιημένη για πίνακες

💡 Σημαντικές Παρατηρήσεις

  • Το όνομα $fruit, $value, $key είναι απλά μεταβλητές - μπορείς να τα ονομάσεις όπως θέλεις
  • Η foreach ΔΕΝ αλλάζει τον αρχικό πίνακα
  • Μπορείς να χρησιμοποιήσεις break; για να σταματήσεις τη foreach νωρίτερα
  • Μπορείς να χρησιμοποιήσεις continue; για να προσπεράσεις μια επανάληψη

4.8 Συναρτήσεις

💡 Τι είναι οι συναρτήσεις;

Οι συναρτήσεις είναι μπλοκ κώδικα που μπορούμε να καλέσουμε όποτε θέλουμε. Μας βοηθούν να οργανώσουμε τον κώδικα και να αποφύγουμε επαναλήψεις.

Βασική Σύνταξη

🎯 Δημιουργία Συνάρτησης

<?php // Απλή συνάρτηση function sayHello() { echo "Γεια σου!"; } // Κλήση συνάρτησης sayHello(); // Γεια σου! ?>

Συναρτήσεις με Παραμέτρους

📥 Parameters

<?php // Συνάρτηση με παραμέτρους function greet($name) { echo "Γεια σου, " . $name . "!"; } greet("Γιώργος"); // Γεια σου, Γιώργος! // Πολλαπλές παράμετροι function add($a, $b) { echo $a + $b; } add(5, 3); // 8 // Default τιμή παραμέτρου function greetWithTitle($name, $title = "κύριε") { echo "Γεια σας " . $title . " " . $name; } greetWithTitle("Μπάρδη"); // Γεια σας κύριε Μπάρδη greetWithTitle("Μπάρδη", "καθηγητή"); // Γεια σας καθηγητή Μπάρδη ?>

Return Values

📤 Επιστροφή Τιμών

<?php // Συνάρτηση που επιστρέφει τιμή function multiply($a, $b) { return $a * $b; } $result = multiply(5, 3); echo $result; // 15 // Πιο σύνθετο παράδειγμα function getGrade($score) { if ($score >= 90) { return "Α"; } elseif ($score >= 80) { return "Β"; } elseif ($score >= 70) { return "Γ"; } else { return "Φ"; } } echo getGrade(85); // Β ?>

4.9 Arrays (Πίνακες)

Indexed Arrays

📋 Απλοί Πίνακες

<?php // Δημιουργία $colors = ["Κόκκινο", "Πράσινο", "Μπλε"]; // Πρόσβαση echo $colors[0]; // Κόκκινο echo $colors[1]; // Πράσινο // Αλλαγή τιμής $colors[1] = "Κίτρινο"; // Προσθήκη στοιχείου $colors[] = "Πορτοκαλί"; // Προσθήκη στο τέλος // Μήκος πίνακα echo count($colors); // 4 ?>

Associative Arrays

🔑 Πίνακες με Keys

<?php // Δημιουργία $student = [ "name" => "Γιώργος Μπάρδης", "age" => 25, "email" => "george@example.com", "city" => "Τρίπολη" ]; // Πρόσβαση echo $student["name"]; // Γιώργος Μπάρδης echo $student["age"]; // 25 // Προσθήκη νέου key $student["grade"] = "A"; // Εμφάνιση όλων των στοιχείων foreach ($student as $key => $value) { echo $key . ": " . $value . "<br>"; } ?>

Multidimensional Arrays

🗂️ Πολυδιάστατοι Πίνακες

<?php // Array με arrays $students = [ [ "name" => "Γιώργος", "age" => 25, "grade" => "A" ], [ "name" => "Μαρία", "age" => 23, "grade" => "B" ], [ "name" => "Νίκος", "age" => 24, "grade" => "A" ] ]; // Πρόσβαση echo $students[0]["name"]; // Γιώργος echo $students[1]["age"]; // 23 // Εμφάνιση όλων foreach ($students as $student) { echo "Όνομα: " . $student["name"] . ", Βαθμός: " . $student["grade"] . "<br>"; } ?>

Χρήσιμες Array Functions

🛠️ Συναρτήσεις για Arrays

<?php $numbers = [5, 2, 8, 1, 9]; // Μήκος echo count($numbers); // 5 // Ταξινόμηση sort($numbers); // Αύξουσα rsort($numbers); // Φθίνουσα // Προσθήκη/Αφαίρεση στοιχείων array_push($numbers, 10); // Προσθήκη στο τέλος array_pop($numbers); // Αφαίρεση από τέλος array_unshift($numbers, 0); // Προσθήκη στην αρχή array_shift($numbers); // Αφαίρεση από αρχή // Αναζήτηση if (in_array(8, $numbers)) { echo "Το 8 υπάρχει!"; } // Συνένωση arrays $arr1 = [1, 2, 3]; $arr2 = [4, 5, 6]; $combined = array_merge($arr1, $arr2); ?>

4.10 Forms και GET/POST

💡 Επικοινωνία με τον Χρήστη

Οι φόρμες HTML επιτρέπουν στους χρήστες να στέλνουν δεδομένα στον server. Η PHP τα λαμβάνει μέσω των μεθόδων GET και POST.

GET Method

🔗 GET - Δεδομένα στο URL

Αρχείο: form_get.html

<!DOCTYPE html> <html lang="el"> <head> <meta charset="UTF-8"> <title>GET Form</title> </head> <body> <h2>Φόρμα με GET</h2> <form action="process_get.php" method="GET"> <label>Όνομα:</label> <input type="text" name="name" required> <br><br> <label>Ηλικία:</label> <input type="number" name="age" required> <br><br> <button type="submit">Αποστολή</button> </form> </body> </html>

Αρχείο: process_get.php

<?php // Λήψη δεδομένων από GET $name = $_GET["name"]; $age = $_GET["age"]; echo "<h2>Αποτελέσματα</h2>"; echo "Όνομα: " . $name . "<br>"; echo "Ηλικία: " . $age . " χρονών"; // Το URL θα είναι: process_get.php?name=Γιώργος&age=25 ?>

⚠️ Προσοχή με GET!

  • Τα δεδομένα φαίνονται στο URL
  • ΜΗΝ στέλνετε passwords ή ευαίσθητα δεδομένα
  • Περιορισμένο μέγεθος δεδομένων (~2000 χαρακτήρες)
  • Χρήση: Search, filters, pagination

POST Method

📬 POST - Ασφαλής Αποστολή

Αρχείο: form_post.html

<!DOCTYPE html> <html lang="el"> <head> <meta charset="UTF-8"> <title>POST Form</title> </head> <body> <h2>Φόρμα Εγγραφής</h2> <form action="process_post.php" method="POST"> <label>Username:</label> <input type="text" name="username" required> <br><br> <label>Password:</label> <input type="password" name="password" required> <br><br> <label>Email:</label> <input type="email" name="email" required> <br><br> <button type="submit">Εγγραφή</button> </form> </body> </html>

Αρχείο: process_post.php

<?php // Λήψη δεδομένων από POST $username = $_POST["username"]; $password = $_POST["password"]; $email = $_POST["email"]; echo "<h2>Επιτυχής Εγγραφή!</h2>"; echo "Username: " . $username . "<br>"; echo "Email: " . $email; // Τα δεδομένα ΔΕΝ φαίνονται στο URL! ?>

✅ Πλεονεκτήματα POST

  • Τα δεδομένα ΔΕΝ φαίνονται στο URL
  • Ασφαλέστερο για passwords και ευαίσθητα δεδομένα
  • Χωρίς περιορισμό μεγέθους
  • Χρήση: Login, εγγραφή, upload files

Έλεγχος και Ασφάλεια

🛡️ Validation και Sanitization

<?php // Έλεγχος αν υποβλήθηκε η φόρμα if ($_SERVER["REQUEST_METHOD"] == "POST") { // Έλεγχος αν υπάρχουν τα πεδία if (isset($_POST["username"]) && isset($_POST["email"])) { // Καθαρισμός δεδομένων (sanitization) $username = trim($_POST["username"]); $username = htmlspecialchars($username); $email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL); // Έλεγχος (validation) if (strlen($username) < 3) { echo "Το username πρέπει να έχει τουλάχιστον 3 χαρακτήρες"; } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "Μη έγκυρο email"; } else { echo "Επιτυχής εγγραφή!"; } } } ?>

4.11 Σύνδεση με MySQL

💡 Τι είναι η MySQL;

Η MySQL είναι ένα σύστημα διαχείρισης βάσης δεδομένων (DBMS). Χρησιμοποιείται για να αποθηκεύουμε και να ανακτούμε δεδομένα σε δυναμικές ιστοσελίδες.

MySQLi vs PDO

🔌 Δύο Τρόποι Σύνδεσης

MySQLi PDO
Μόνο MySQL Υποστηρίζει πολλές βάσεις (MySQL, PostgreSQL, SQLite)
Πιο απλό για αρχάριους Πιο σύγχρονο και ευέλικτο
Procedural & Object-Oriented Μόνο Object-Oriented

Σύσταση: Θα δούμε MySQLi (απλούστερο) και στη συνέχεια PDO

Σύνδεση με MySQLi

🔗 Βασική Σύνδεση

Αρχείο: db_connect.php

<?php // Στοιχεία σύνδεσης $servername = "localhost"; $username = "root"; // Default στο XAMPP $password = ""; // Κενό στο XAMPP $database = "myDatabase"; // Δημιουργία σύνδεσης $conn = new mysqli($servername, $username, $password, $database); // Έλεγχος σύνδεσης if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Επιτυχής σύνδεση με τη βάση!"; // Ορισμός charset (για ελληνικά) $conn->set_charset("utf8mb4"); ?>

Δημιουργία Πίνακα

🗃️ CREATE TABLE

<?php // Σύνδεση με τη βάση include 'db_connect.php'; // SQL για δημιουργία πίνακα $sql = "CREATE TABLE students ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(50) NOT NULL, lastname VARCHAR(50) NOT NULL, email VARCHAR(100), age INT(3), reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"; // Εκτέλεση if ($conn->query($sql) === TRUE) { echo "Ο πίνακας students δημιουργήθηκε επιτυχώς"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close(); ?>

INSERT - Εισαγωγή Δεδομένων

➕ Προσθήκη Εγγραφών

<?php include 'db_connect.php'; // Απλή εισαγωγή $sql = "INSERT INTO students (firstname, lastname, email, age) VALUES ('Γιώργος', 'Μπάρδης', 'george@example.com', 25)"; if ($conn->query($sql) === TRUE) { echo "Νέα εγγραφή προστέθηκε επιτυχώς"; echo "<br>ID: " . $conn->insert_id; } else { echo "Error: " . $conn->error; } $conn->close(); ?>

SELECT - Ανάκτηση Δεδομένων

🔍 Αναζήτηση

<?php include 'db_connect.php'; // SELECT query $sql = "SELECT id, firstname, lastname, email, age FROM students"; $result = $conn->query($sql); if ($result->num_rows > 0) { // Εμφάνιση σε πίνακα HTML echo "<table border='1'>"; echo "<tr><th>ID</th><th>Όνομα</th><th>Επώνυμο</th><th>Email</th><th>Ηλικία</th></tr>"; while($row = $result->fetch_assoc()) { echo "<tr>"; echo "<td>" . $row["id"] . "</td>"; echo "<td>" . $row["firstname"] . "</td>"; echo "<td>" . $row["lastname"] . "</td>"; echo "<td>" . $row["email"] . "</td>"; echo "<td>" . $row["age"] . "</td>"; echo "</tr>"; } echo "</table>"; } else { echo "Δεν βρέθηκαν αποτελέσματα"; } $conn->close(); ?>

UPDATE - Ενημέρωση

✏️ Τροποποίηση Δεδομένων

<?php include 'db_connect.php'; // UPDATE query $sql = "UPDATE students SET age=26 WHERE firstname='Γιώργος'"; if ($conn->query($sql) === TRUE) { echo "Η εγγραφή ενημερώθηκε επιτυχώς"; echo "<br>Αριθμός εγγραφών που τροποποιήθηκαν: " . $conn->affected_rows; } else { echo "Error: " . $conn->error; } $conn->close(); ?>

DELETE - Διαγραφή

🗑️ Αφαίρεση Εγγραφών

<?php include 'db_connect.php'; // DELETE query $sql = "DELETE FROM students WHERE id=5"; if ($conn->query($sql) === TRUE) { echo "Η εγγραφή διαγράφηκε επιτυχώς"; } else { echo "Error: " . $conn->error; } $conn->close(); ?>

Prepared Statements (Ασφάλεια!)

⚠️ SQL Injection

Τα Prepared Statements προστατεύουν από SQL Injection attacks. Πάντα να τα χρησιμοποιείτε όταν χρησιμοποιείτε δεδομένα από χρήστες!

🛡️ Ασφαλής Εισαγωγή

<?php include 'db_connect.php'; // Προετοιμασία statement $stmt = $conn->prepare("INSERT INTO students (firstname, lastname, email, age) VALUES (?, ?, ?, ?)"); // Δέσιμο παραμέτρων $stmt->bind_param("sssi", $firstname, $lastname, $email, $age); // s = string, i = integer, d = double, b = blob // Ορισμός τιμών και εκτέλεση $firstname = "Μαρία"; $lastname = "Παπαδοπούλου"; $email = "maria@example.com"; $age = 23; $stmt->execute(); echo "Νέα εγγραφή προστέθηκε ασφαλώς"; $stmt->close(); $conn->close(); ?>

4.12 phpMyAdmin

💡 Τι είναι το phpMyAdmin;

Το phpMyAdmin είναι ένα web-based εργαλείο για τη διαχείριση MySQL βάσεων δεδομένων. Έρχεται προεγκατεστημένο με XAMPP/WAMP/MAMP.

Πρόσβαση στο phpMyAdmin

🌐 Βήματα Πρόσβασης

  1. Ανοίξτε το XAMPP/WAMP Control Panel
  2. Ξεκινήστε τα Apache και MySQL
  3. Ανοίξτε τον browser και πηγαίνετε στο:
    http://localhost/phpmyadmin
  4. Συνδεθείτε (default: username=root, password=κενό)

Δημιουργία Νέας Βάσης Δεδομένων

🗄️ Βήμα-Βήμα Οδηγός

  1. Κλικ στο "New" στην αριστερή πλευρά
  2. Γράψτε το όνομα της βάσης (π.χ. school_db)
  3. Επιλέξτε Collation: utf8mb4_general_ci (για ελληνικά)
  4. Κλικ "Create"

Δημιουργία Πίνακα μέσω phpMyAdmin

📋 Παράδειγμα: Πίνακας Students

  1. Επιλέξτε τη βάση school_db
  2. Κλικ στην καρτέλα "SQL"
  3. Γράψτε το SQL:
CREATE TABLE students ( id INT(11) AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(50) NOT NULL, lastname VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, age INT(3), grade VARCHAR(2), reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. Κλικ "Go"

Εισαγωγή Δεδομένων μέσω Interface

➕ Προσθήκη Εγγραφής (GUI)

  1. Επιλέξτε τον πίνακα students
  2. Κλικ στην καρτέλα "Insert"
  3. Συμπληρώστε τα πεδία:
    • id: (αφήστε κενό - auto increment)
    • firstname: Γιώργος
    • lastname: Μπάρδης
    • email: george@example.com
    • age: 25
    • grade: A
  4. Κλικ "Go"

Χρήσιμες Λειτουργίες phpMyAdmin

🛠️ Βασικά Εργαλεία

Καρτέλα Χρήση
Structure Δείτε/τροποποιήστε τη δομή του πίνακα
SQL Εκτελέστε SQL queries
Search Αναζητήστε δεδομένα
Insert Προσθέστε νέες εγγραφές
Export Εξαγωγή βάσης (backup)
Import Εισαγωγή βάσης
Operations Αντιγραφή/μετονομασία/διαγραφή

Πλήρες Παράδειγμα: Form με Database

🎯 Σύνδεση όλων μαζί

1. Αρχείο: config.php

<?php // Ρυθμίσεις σύνδεσης define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', ''); define('DB_NAME', 'school_db'); // Σύνδεση $conn = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $conn->set_charset("utf8mb4"); ?>

2. Αρχείο: register.html

<!DOCTYPE html> <html lang="el"> <head> <meta charset="UTF-8"> <title>Εγγραφή Φοιτητή</title> </head> <body> <h2>Φόρμα Εγγραφής Φοιτητή</h2> <form action="save_student.php" method="POST"> <label>Όνομα:</label> <input type="text" name="firstname" required><br><br> <label>Επώνυμο:</label> <input type="text" name="lastname" required><br><br> <label>Email:</label> <input type="email" name="email" required><br><br> <label>Ηλικία:</label> <input type="number" name="age" required><br><br> <label>Βαθμός:</label> <select name="grade"> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> <option value="D">D</option> </select><br><br> <button type="submit">Εγγραφή</button> </form> </body> </html>

3. Αρχείο: save_student.php

<?php include 'config.php'; if ($_SERVER["REQUEST_METHOD"] == "POST") { // Καθαρισμός δεδομένων $firstname = trim($_POST["firstname"]); $lastname = trim($_POST["lastname"]); $email = trim($_POST["email"]); $age = (int)$_POST["age"]; $grade = $_POST["grade"]; // Prepared statement $stmt = $conn->prepare("INSERT INTO students (firstname, lastname, email, age, grade) VALUES (?, ?, ?, ?, ?)"); $stmt->bind_param("sssis", $firstname, $lastname, $email, $age, $grade); if ($stmt->execute()) { echo "<h2>Επιτυχής Εγγραφή!</h2>"; echo "<p>Το ID του φοιτητή είναι: " . $stmt->insert_id . "</p>"; echo "<a href='view_students.php'>Δείτε όλους τους φοιτητές</a>"; } else { echo "Error: " . $stmt->error; } $stmt->close(); } $conn->close(); ?>

4. Αρχείο: view_students.php

<?php include 'config.php'; ?> <!DOCTYPE html> <html lang="el"> <head> <meta charset="UTF-8"> <title>Λίστα Φοιτητών</title> <style> table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #38b2ac; color: white; } </style> </head> <body> <h2>Λίστα Φοιτητών</h2> <?php $sql = "SELECT * FROM students ORDER BY id DESC"; $result = $conn->query($sql); if ($result->num_rows > 0) { echo "<table>"; echo "<tr><th>ID</th><th>Όνομα</th><th>Επώνυμο</th><th>Email</th><th>Ηλικία</th><th>Βαθμός</th><th>Ημ/νία</th></tr>"; while ($row = $result->fetch_assoc()) { echo "<tr>"; echo "<td>" . $row["id"] . "</td>"; echo "<td>" . $row["firstname"] . "</td>"; echo "<td>" . $row["lastname"] . "</td>"; echo "<td>" . $row["email"] . "</td>"; echo "<td>" . $row["age"] . "</td>"; echo "<td>" . $row["grade"] . "</td>"; echo "<td>" . $row["reg_date"] . "</td>"; echo "</tr>"; } echo "</table>"; } else { echo "<p>Δεν υπάρχουν φοιτητές στη βάση.</p>"; } $conn->close(); ?> <br> <a href="register.html">Εγγραφή νέου φοιτητή</a> </body> </html>

✅ Συγχαρητήρια!

Τώρα μπορείτε:

  • Να γράφετε βασικό PHP κώδικα
  • Να χρησιμοποιείτε μεταβλητές και δομές ελέγχου
  • Να δημιουργείτε συναρτήσεις
  • Να επεξεργάζεστε φόρμες με GET και POST
  • Να συνδέεστε με MySQL βάση δεδομένων
  • Να χρησιμοποιείτε το phpMyAdmin
  • Να κάνετε CRUD operations (Create, Read, Update, Delete)

📚 Επόμενα Βήματα

Για να προχωρήσετε περισσότερο:

  • Μάθετε για Sessions και Cookies (login systems)
  • Εξερευνήστε File Uploads
  • Δείτε PDO για πιο advanced database operations
  • Μελετήστε MVC Pattern
  • Δοκιμάστε frameworks όπως Laravel ή CodeIgniter

🎓 Ασκήσεις Εμπέδωσης

  1. Δημιουργήστε μια φόρμα εγγραφής χρηστών με validation
  2. Φτιάξτε ένα σύστημα login με sessions
  3. Δημιουργήστε μια σελίδα αναζήτησης φοιτητών
  4. Προσθέστε λειτουργία επεξεργασίας και διαγραφής εγγραφών
  5. Φτιάξτε ένα απλό blog system με categories
  6. Δημιουργήστε ένα σύστημα σχολίων
  7. Φτιάξτε ένα address book application
  8. Υλοποιήστε pagination σε μεγάλες λίστες