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>
alert('Γεια από JavaScript!');
</script>
</body>
</html>
🌐 Server-Side (PHP)
Ο κώδικας τρέχει στον server πριν σταλεί στον browser
<!DOCTYPE html>
<html>
<head>
<title>PHP Example</title>
</head>
<body>
<?php
$message = "Γεια από PHP!";
echo "<h1>" . $message . "</h1>";
?>
</body>
</html>
Σημαντικό: Ο χρήστης ΔΕΝ βλέπει τον PHP κώδικα! Βλέπει μόνο το τελικό HTML που παράγει η PHP.
4.2 Πού γράφουμε PHP;
🔧 Τι χρειαζόμαστε;
Για να τρέξουμε PHP, χρειαζόμαστε:
- Web Server (π.χ. Apache ή Nginx)
- PHP εγκατεστημένη στον server
- Βάση δεδομένων (προαιρετικά, συνήθως 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
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
echo "Πρώτη εντολή";
echo "Δεύτερη εντολή";
?>
Echo και Print
🖨️ Εμφάνιση περιεχομένου
| Εντολή |
Χρήση |
Παράδειγμα |
| echo |
Εμφανίζει κείμενο/HTML (πιο γρήγορο) |
echo "Γεια!"; |
| print |
Όμοιο με echo (πιο αργό) |
print "Γεια!"; |
💬 Παραδείγματα Echo
<?php
echo "Γεια σου!";
echo "<h1>Τίτλος</h1>";
echo "Γεια", " ", "σου", " ", "κόσμε!";
echo "Γεια" . " " . "σου!";
?>
4.4 Μεταβλητές
💡 Τι είναι οι μεταβλητές;
Οι μεταβλητές είναι "κουτιά" που αποθηκεύουν πληροφορίες. Στη PHP, όλες οι μεταβλητές ξεκινούν με το σύμβολο $
Δήλωση Μεταβλητών
📦 Βασικά Παραδείγματα
<?php
$name = "Γιώργος";
$age = 25;
$price = 19.99;
$isStudent = true;
echo "Το όνομά μου είναι " . $name;
echo "<br>";
echo "Είμαι " . $age . " χρονών";
?>
Κανόνες Ονομασίας
✅ Καλές Πρακτικές
- ✅ Ξεκινούν με $ και μετά γράμμα ή _
- ✅ Μπορούν να περιέχουν γράμματα, αριθμούς, _
- ✅ Case-sensitive ($name ≠ $Name)
- ❌ ΔΕΝ ξεκινούν με αριθμό
- ❌ ΔΕΝ περιέχουν κενά
$firstName = "Γιώργος";
$first_name = "Γιώργος";
$age2 = 25;
$_temp = 100;
Πλήρες Παράδειγμα
🎨 Πλήρης Σελίδα με PHP και CSS
Ένα ολοκληρωμένο παράδειγμα που δείχνει πώς η PHP συνδυάζεται με HTML και CSS
<!DOCTYPE html>
<html lang="el">
<head>
<meta charset="UTF-8">
<title>Παράδειγμα PHP με CSS</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #eef2f3;
color: #333333;
text-align: center;
margin-top: 100px;
}
h1 {
color: #1a73e8;
}
p {
font-size: 18px;
margin: 10px 0;
}
strong {
color: #007700;
}
</style>
</head>
<body>
<h1>Πληροφορίες Χρήστη</h1>
<?php
$name = "Γιώργος";
$age = 25;
$price = 19.99;
$isStudent = true;
echo "<p>Το όνομά μου είναι <strong>$name</strong>.</p>";
echo "<p>Είμαι $age χρονών.</p>";
echo "<p>Η τιμή είναι €$price.</p>";
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
$globalVar = "Είμαι global";
function testFunction() {
$localVar = "Είμαι local";
echo $localVar;
echo "<br>";
global $globalVar;
echo $globalVar;
}
testFunction();
echo "<br>";
echo $globalVar;
echo "<br>";
?>
🧩 Τι θα εμφανίσει αυτό στον 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
$text1 = "Hello there!";
$text2 = 'Good morning!';
$name = "George";
echo "Hello $name";
echo "<br>";
echo 'Hello $name';
echo "<br>";
$fullName = "George" . " " . "Bardis";
echo strlen($text1);
echo "<br>";
echo strtoupper($text1);
echo "<br>";
echo strtolower($text1);
?>
Integer (Ακέραιος)
🔢 Integers
<?php
$age = 25;
$year = 2025;
$negative = -10;
var_dump($age);
echo is_int($age);
?>
Float (Δεκαδικός)
💵 Floats
<?php
$price = 19.99;
$temperature = -5.5;
$pi = 3.14159;
var_dump($price);
echo is_float($price);
?>
Boolean (Λογική Τιμή)
✅❌ Booleans
<?php
$isStudent = true;
$hasLicense = false;
if ($isStudent) {
echo "Είσαι φοιτητής";
}
var_dump($isStudent);
?>
Array (Πίνακας)
📋 Arrays
<?php
$fruits = array("Μήλο", "Μπανάνα", "Πορτοκάλι");
$fruits = ["Μήλο", "Μπανάνα", "Πορτοκάλι"];
echo $fruits[0];
$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);
var_dump($y);
?>
🧠 Πότε χρησιμοποιούμε το null
1️⃣ Όταν θέλεις να δηλώσεις μια μεταβλητή αλλά δεν έχεις ακόμη τιμή να της δώσεις.
$user = null;
2️⃣ Όταν θέλεις να "αδειάσεις" μια μεταβλητή:
$user = "Γιώργος";
$user = null;
3️⃣ Όταν μια function δεν επιστρέφει τίποτα, μπορεί να επιστρέψει null.
Έλεγχος και Χρήση NULL
🚫 NULL
<?php
$emptyVar = null;
echo is_null($emptyVar);
echo "<br>";
if (!isset($undefinedVar)) {
echo "Η μεταβλητή δεν υπάρχει";
}
echo "<br>";
$var1 = null;
$var2 = "";
$var3 = 0;
$var4 = false;
echo "var1 is null: " . (is_null($var1) ? "Ναι" : "Όχι");
echo "<br>";
echo "var2 is null: " . (is_null($var2) ? "Ναι" : "Όχι");
echo "<br>";
if (empty($var1)) {
echo "Η var1 είναι άδεια";
}
echo "<br>";
$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;
echo $a - $b;
echo $a * $b;
echo $a / $b;
echo $a % $b;
echo $a ** $b;
?>
Τελεστές Ανάθεσης
= Ανάθεση Τιμών
<?php
$x = 10;
$x += 5;
$x -= 3;
$x *= 2;
$x /= 4;
$x++;
$x--;
?>
Τελεστές Σύγκρισης
📊 Τι είναι οι τελεστές σύγκρισης;
Οι τελεστές σύγκρισης χρησιμοποιούνται για να συγκρίνουμε δύο τιμές και επιστρέφουν πάντα μια boolean τιμή (true ή false).
🔍 Πλήρης Οδηγός Συγκρίσεων
<?php
$a = 10;
$b = 5;
$c = "10";
$d = 10;
echo "<h3>1. == (Ισότητα - Loose Comparison)</h3>";
echo "<p>Συγκρίνει ΜΟΝΟ την τιμή, κάνει αυτόματη μετατροπή τύπου</p>";
echo "<strong>Παράδειγμα 1.1:</strong> \$a == \$b<br>";
var_dump($a == $b);
echo "<br><br>";
echo "<strong>Παράδειγμα 1.2:</strong> \$a == \$c<br>";
var_dump($a == $c);
echo "<br><br>";
echo "<strong>Παράδειγμα 1.3:</strong> \$a == \$d<br>";
var_dump($a == $d);
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);
echo "<br><br>";
echo "<strong>Παράδειγμα 2.2:</strong> \$a === \$d<br>";
var_dump($a === $d);
echo "<br><br>";
echo "<h3>3. != (Διαφορετικό - Not Equal)</h3>";
echo "<p>Ελέγχει αν δύο τιμές ΔΕΝ είναι ίσες (με μετατροπή τύπου)</p>";
echo "<strong>Παράδειγμα 3.1:</strong> \$a != \$b<br>";
var_dump($a != $b);
echo "<br><br>";
echo "<strong>Παράδειγμα 3.2:</strong> \$a != \$c<br>";
var_dump($a != $c);
echo "<br><br>";
echo "<h3>4. !== (Αυστηρά Διαφορετικό)</h3>";
echo "<strong>Παράδειγμα 4.1:</strong> \$a !== \$c<br>";
var_dump($a !== $c);
echo "<br><br>";
echo "<h3>5. > (Μεγαλύτερο)</h3>";
echo "<strong>Παράδειγμα 5.1:</strong> \$a > \$b<br>";
var_dump($a > $b);
echo "<br><br>";
echo "<strong>Παράδειγμα 5.2:</strong> \$a > \$d<br>";
var_dump($a > $d);
echo "<br><br>";
echo "<h3>6. < (Μικρότερο)</h3>";
echo "<strong>Παράδειγμα 6.1:</strong> \$a < \$b<br>";
var_dump($a < $b);
echo "<br><br>";
echo "<strong>Παράδειγμα 6.2:</strong> \$b < \$a<br>";
var_dump($b < $a);
echo "<br><br>";
echo "<h3>7. >= (Μεγαλύτερο ή Ίσο)</h3>";
echo "<strong>Παράδειγμα 7.1:</strong> \$a >= 10<br>";
var_dump($a >= 10);
echo "<br><br>";
echo "<strong>Παράδειγμα 7.2:</strong> \$a >= \$b<br>";
var_dump($a >= $b);
echo "<br><br>";
echo "<h3>8. <= (Μικρότερο ή Ίσο)</h3>";
echo "<strong>Παράδειγμα 8.1:</strong> \$a <= 5<br>";
var_dump($a <= 5);
echo "<br><br>";
echo "<strong>Παράδειγμα 8.2:</strong> \$a <= 10<br>";
var_dump($a <= 10);
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;
if ($age >= 18 && $hasLicense) {
echo "Μπορείς να οδηγήσεις";
}
if ($age < 18 || $age > 65) {
echo "Ειδική κατηγορία";
}
if (!$hasLicense) {
echo "Δεν έχεις άδεια";
}
?>
4.7 Δομές Ελέγχου
If - Else
❓ Συνθήκες
<?php
$score = 85;
if ($score >= 50) {
echo "Πέρασες!";
}
if ($score >= 50) {
echo "Πέρασες!";
} else {
echo "Κόπηκες";
}
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 ($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
$count = 1;
while ($count <= 5) {
echo "Count: " . $count . "<br>";
$count++;
}
$num = 10;
do {
echo "Num: " . $num . "<br>";
$num++;
} while ($num < 5);
?>
Foreach Loop (Επανάληψη σε Πίνακες)
💡 Τι είναι η foreach;
Η foreach είναι μια ειδική δομή επανάληψης (loop) στη PHP που χρησιμοποιείται αποκλειστικά για πίνακες (arrays).
Είναι ο πιο εύκολος και πιο ασφαλής τρόπος να διατρέξεις όλα τα στοιχεία ενός πίνακα, χωρίς να χρειάζεται να ξέρεις πόσα στοιχεία έχει!
📋 Βασική Σύνταξη
Σύνταξη 1: Για Indexed Arrays (μόνο τιμές)
foreach ($array as $value) {
}
Διάβασέ το ως: "Για κάθε (for each) στοιχείο του $array, πάρε την τιμή του και βάλτη στο $value"
Σύνταξη 2: Για Associative Arrays (κλειδί + τιμή)
foreach ($array as $key => $value) {
}
Διάβασέ το ως: "Για κάθε στοιχείο του $array, πάρε το κλειδί του και βάλτο στο $key, και την τιμή του και βάλτη στο $value"
🧩 Παράδειγμα 1: Indexed Array (Απλός Πίνακας)
📝 Εμφάνιση φρούτων
<?php
$fruits = ["Μήλο", "Μπανάνα", "Πορτοκάλι"];
foreach ($fruits as $fruit) {
echo $fruit . "<br>";
}
?>
🔄 Πώς λειτουργεί βήμα-βήμα:
| Επανάληψη |
Τιμή του $fruit |
Τι εμφανίζεται |
| 1η |
"Μήλο" |
Μήλο |
| 2η |
"Μπανάνα" |
Μπανάνα |
| 3η |
"Πορτοκάλι" |
Πορτοκάλι |
| ✅ Τέλος - Δεν υπάρχουν άλλα στοιχεία |
🧩 Παράδειγμα 2: Associative Array (Πίνακας με Ονόματα)
👤 Εμφάνιση στοιχείων φοιτητή
<?php
$student = [
"name" => "Γιώργος",
"age" => 25,
"city" => "Τρίπολη"
];
foreach ($student as $key => $value) {
echo $key . ": " . $value . "<br>";
}
?>
🔄 Πώς λειτουργεί βήμα-βήμα:
| Επανάληψη |
$key |
$value |
Εμφάνιση |
| 1η |
"name" |
"Γιώργος" |
name: Γιώργος |
| 2η |
"age" |
25 |
age: 25 |
| 3η |
"city" |
"Τρίπολη" |
city: Τρίπολη |
| ✅ Τέλος - Δεν υπάρχουν άλλα στοιχεία |
🎓 Πρακτικά Παραδείγματα
💰 Παράδειγμα 3: Υπολογισμός συνολικής τιμής
<?php
$prices = [10.50, 25.00, 15.75, 30.00];
$total = 0;
foreach ($prices as $price) {
$total += $price;
}
echo "Συνολική τιμή: €" . $total;
?>
📋 Παράδειγμα 4: Δημιουργία λίστας HTML
<?php
$courses = [
"Προγραμματισμός",
"Βάσεις Δεδομένων",
"Δίκτυα Υπολογιστών",
"Ανάπτυξη Web"
];
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);
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;
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);
?>
Associative Arrays
🔑 Πίνακες με Keys
<?php
$student = [
"name" => "Γιώργος Μπάρδης",
"age" => 25,
"email" => "george@example.com",
"city" => "Τρίπολη"
];
echo $student["name"];
echo $student["age"];
$student["grade"] = "A";
foreach ($student as $key => $value) {
echo $key . ": " . $value . "<br>";
}
?>
Multidimensional Arrays
🗂️ Πολυδιάστατοι Πίνακες
<?php
$students = [
[
"name" => "Γιώργος",
"age" => 25,
"grade" => "A"
],
[
"name" => "Μαρία",
"age" => 23,
"grade" => "B"
],
[
"name" => "Νίκος",
"age" => 24,
"grade" => "A"
]
];
echo $students[0]["name"];
echo $students[1]["age"];
foreach ($students as $student) {
echo "Όνομα: " . $student["name"] . ", Βαθμός: " . $student["grade"] . "<br>";
}
?>
Χρήσιμες Array Functions
🛠️ Συναρτήσεις για Arrays
<?php
$numbers = [5, 2, 8, 1, 9];
echo count($numbers);
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 υπάρχει!";
}
$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
$name = $_GET["name"];
$age = $_GET["age"];
echo "<h2>Αποτελέσματα</h2>";
echo "Όνομα: " . $name . "<br>";
echo "Ηλικία: " . $age . " χρονών";
?>
⚠️ Προσοχή με 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
$username = $_POST["username"];
$password = $_POST["password"];
$email = $_POST["email"];
echo "<h2>Επιτυχής Εγγραφή!</h2>";
echo "Username: " . $username . "<br>";
echo "Email: " . $email;
?>
✅ Πλεονεκτήματα POST
- Τα δεδομένα ΔΕΝ φαίνονται στο URL
- Ασφαλέστερο για passwords και ευαίσθητα δεδομένα
- Χωρίς περιορισμό μεγέθους
- Χρήση: Login, εγγραφή, upload files
Έλεγχος και Ασφάλεια
🛡️ Validation και Sanitization
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (isset($_POST["username"]) && isset($_POST["email"])) {
$username = trim($_POST["username"]);
$username = htmlspecialchars($username);
$email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
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";
$password = "";
$database = "myDatabase";
$conn = new mysqli($servername, $username, $password, $database);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Επιτυχής σύνδεση με τη βάση!";
$conn->set_charset("utf8mb4");
?>
Δημιουργία Πίνακα
🗃️ CREATE TABLE
<?php
include 'db_connect.php';
$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';
$sql = "SELECT id, firstname, lastname, email, age FROM students";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
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';
$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';
$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';
$stmt = $conn->prepare("INSERT INTO students (firstname, lastname, email, age) VALUES (?, ?, ?, ?)");
$stmt->bind_param("sssi", $firstname, $lastname, $email, $age);
$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
🌐 Βήματα Πρόσβασης
- Ανοίξτε το XAMPP/WAMP Control Panel
- Ξεκινήστε τα Apache και MySQL
- Ανοίξτε τον browser και πηγαίνετε στο:
http://localhost/phpmyadmin
- Συνδεθείτε (default: username=root, password=κενό)
Δημιουργία Νέας Βάσης Δεδομένων
🗄️ Βήμα-Βήμα Οδηγός
- Κλικ στο "New" στην αριστερή πλευρά
- Γράψτε το όνομα της βάσης (π.χ. school_db)
- Επιλέξτε Collation: utf8mb4_general_ci (για ελληνικά)
- Κλικ "Create"
Δημιουργία Πίνακα μέσω phpMyAdmin
📋 Παράδειγμα: Πίνακας Students
- Επιλέξτε τη βάση school_db
- Κλικ στην καρτέλα "SQL"
- Γράψτε το 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;
- Κλικ "Go"
Εισαγωγή Δεδομένων μέσω Interface
➕ Προσθήκη Εγγραφής (GUI)
- Επιλέξτε τον πίνακα students
- Κλικ στην καρτέλα "Insert"
- Συμπληρώστε τα πεδία:
- id: (αφήστε κενό - auto increment)
- firstname: Γιώργος
- lastname: Μπάρδης
- email: george@example.com
- age: 25
- grade: A
- Κλικ "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"];
$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
🎓 Ασκήσεις Εμπέδωσης
- Δημιουργήστε μια φόρμα εγγραφής χρηστών με validation
- Φτιάξτε ένα σύστημα login με sessions
- Δημιουργήστε μια σελίδα αναζήτησης φοιτητών
- Προσθέστε λειτουργία επεξεργασίας και διαγραφής εγγραφών
- Φτιάξτε ένα απλό blog system με categories
- Δημιουργήστε ένα σύστημα σχολίων
- Φτιάξτε ένα address book application
- Υλοποιήστε pagination σε μεγάλες λίστες