Verschillen tussen XAMPP en WebServer in Reader SQL

In de Reader SQL wordt beschreven hoe je met WebServer een local webserver start en hoe je vervolgens met phpLiteAdmin een SQLite database maakt waarop je met SQL kunt oefenen.

Met XAMPP werkt het allemaal net even anders, want XAMPP werkt met een MySQL database. Nadat je XAMPP hebt geïnstalleerd, start je het XAMPP Control Panel.

Dit is Opdracht 1 uit de Reader SQL.

Klik daarna op de Start-knop van Apache en op de Start-knop van MySQL.

Klik vervolgens op de Admin-knop van MySQL.

Opdracht 2 database winkel aanmaken

Dit is Opdracht 2 uit de Reader SQL.

Je hebt nu localhost/phpmyadmin gestart. Dit komt overeen met phpLiteAdmin in de reader. Klik op het tabblad Databases.

Vul als databasename winkel in en klik op Aanmaken. Nu heb je een lege winkel database.

Opdracht 3 database winkel vullen

In Opdracht 3 van de Reader SQL vul je de database met tabellen en gegevens. Klik op tabblad SQL.

Hier moet je SQL-code intoetsen of plakken. De code uit de reader voor SQLite is net even anders dan de code voor mySQL. Kopieer daarom onderstaande code, plak die hier en klik op de knop Starten.

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
-- Database: `winkel`
CREATE DATABASE IF NOT EXISTS `winkel` ;
USE `winkel`;
-- Tabelstructuur voor tabel `artikelen`
CREATE TABLE IF NOT EXISTS `artikelen` (
  `artikelnummer` INT NOT NULL AUTO_INCREMENT,
  `artikelnaam` TEXT,
  `prijs` REAL,
  PRIMARY KEY (`artikelnummer`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- Gegevens worden uitgevoerd voor tabel `artikelen`
INSERT INTO `artikelen` VALUES(1,'Fiets',380.0);
INSERT INTO `artikelen` VALUES(2,'Helm',22.0);
INSERT INTO `artikelen` VALUES(3,'Kussen',8.0);
INSERT INTO `artikelen` VALUES(4,'Paraplu',6.0);
INSERT INTO `artikelen` VALUES(5,'Slaapzak',89.0);
INSERT INTO `artikelen` VALUES(6,'Zaklantaarn',29.0);
INSERT INTO `artikelen` VALUES(7,'Tent',88.0);
INSERT INTO `artikelen` VALUES(8,'Sneeuwschoenen',45.0);
INSERT INTO `artikelen` VALUES(9,'Regenjas',18.0);
INSERT INTO `artikelen` VALUES(10,'Ski-stokken',25.0);
INSERT INTO `artikelen` VALUES(11,'Eenwieler',180.0);
INSERT INTO `artikelen` VALUES(12,'Paraplu',4.0);
INSERT INTO `artikelen` VALUES(13,'Parachute',1250.0);
INSERT INTO `artikelen` VALUES(14,'Reddingsvest',125.0);
INSERT INTO `artikelen` VALUES(15,'Skateboard',33.0);
INSERT INTO `artikelen` VALUES(16,'Vlot',58.0);
INSERT INTO `artikelen` VALUES(17,'Pogo stick',28.0);
INSERT INTO `artikelen` VALUES(18,'Kano peddel',40.0);
INSERT INTO `artikelen` VALUES(19,'Oorwarmers',12.5);
INSERT INTO `artikelen` VALUES(20,'Sneeuwschuiver',16.75);
INSERT INTO `artikelen` VALUES(21,'Kano',280.0);
INSERT INTO `artikelen` VALUES(22,'Hoola-hoop',14.0);
INSERT INTO `artikelen` VALUES(23,'Zaklantaarn',28.0);
INSERT INTO `artikelen` VALUES(24,'Zaklantaarn',16.0);
INSERT INTO `artikelen` VALUES(25,'Luchtbed',38.0);
INSERT INTO `artikelen` VALUES(26,'Tent',79.0);
INSERT INTO `artikelen` VALUES(27,'Tuinstoel',32.0);
INSERT INTO `artikelen` VALUES(28,'Eenwieler',192.0);
INSERT INTO `artikelen` VALUES(29,'Kompas',8.0);
INSERT INTO `artikelen` VALUES(30,'Zaklantaarn',4.0);
INSERT INTO `artikelen` VALUES(31,'Slaapzak',88.0);
INSERT INTO `artikelen` VALUES(32,'Zakmes',22.0);
INSERT INTO `artikelen` VALUES(33,'Kano peddel',40.0);
INSERT INTO `artikelen` VALUES(34,'Oorwarmers',12.0);
INSERT INTO `artikelen` VALUES(35,'Sneeuwschuiver',18.15);

CREATE TABLE IF NOT EXISTS `bestellingen` (
  `bestellingnummer` INT NOT NULL AUTO_INCREMENT,
  `klantnummer` INTEGER,
  `artikelnummer` INTEGER,
  `order_datum` TEXT,
  `hoeveelheid` INTEGER,
  PRIMARY KEY (`bestellingnummer`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- Gegevens worden uitgevoerd voor tabel `bestellingen`
INSERT INTO `bestellingen` VALUES(1,1,12,'1999-12-15',1);
INSERT INTO `bestellingen` VALUES(2,2,4,'1999-12-01',1);
INSERT INTO `bestellingen` VALUES(3,3,8,'1999-11-02',1);
INSERT INTO `bestellingen` VALUES(4,3,25,'1999-11-01',1);
INSERT INTO `bestellingen` VALUES(5,15,6,'1999-10-28',1);
INSERT INTO `bestellingen` VALUES(6,8,32,'1999-09-19',2);
INSERT INTO `bestellingen` VALUES(7,1,1,'1999-09-18',1);
INSERT INTO `bestellingen` VALUES(8,14,12,'1999-09-01',1);
INSERT INTO `bestellingen` VALUES(9,12,5,'1999-08-18',1);
INSERT INTO `bestellingen` VALUES(10,17,14,'1999-08-14',2);
INSERT INTO `bestellingen` VALUES(11,16,28,'1999-08-13',1);
INSERT INTO `bestellingen` VALUES(12,8,27,'1999-07-27',1);
INSERT INTO `bestellingen` VALUES(13,7,25,'1999-07-06',1);
INSERT INTO `bestellingen` VALUES(14,8,4,'1999-07-01',4);
INSERT INTO `bestellingen` VALUES(15,10,1,'1999-07-01',1);
INSERT INTO `bestellingen` VALUES(16,17,32,'1999-06-30',1);
INSERT INTO `bestellingen` VALUES(17,1,13,'1999-06-30',1);
INSERT INTO `bestellingen` VALUES(18,1,14,'0000-00-00',2);
INSERT INTO `bestellingen` VALUES(19,2,15,'0000-00-00',1);
INSERT INTO `bestellingen` VALUES(20,7,8,'0000-00-00',1);
INSERT INTO `bestellingen` VALUES(21,8,16,'1999-12-22',1);
INSERT INTO `bestellingen` VALUES(22,2,17,'1999-12-30',3);
INSERT INTO `bestellingen` VALUES(23,15,18,'2000-01-01',4);
INSERT INTO `bestellingen` VALUES(24,17,19,'2000-01-02',1);
INSERT INTO `bestellingen` VALUES(25,2,21,'2000-01-18',1);
INSERT INTO `bestellingen` VALUES(26,4,22,'2000-01-18',1);
INSERT INTO `bestellingen` VALUES(27,5,24,'2000-01-19',4);
INSERT INTO `bestellingen` VALUES(28,1,6,'2000-01-30',1);
INSERT INTO `bestellingen` VALUES(29,15,34,'2000-02-02',1);
INSERT INTO `bestellingen` VALUES(30,12,20,'2000-02-29',1);
INSERT INTO `bestellingen` VALUES(31,10,22,'2000-03-08',2);
INSERT INTO `bestellingen` VALUES(32,7,1,'2000-03-18',1);
INSERT INTO `bestellingen` VALUES(33,9,9,'2000-03-19',2);
INSERT INTO `bestellingen` VALUES(34,3,29,'2000-04-01',1);
INSERT INTO `bestellingen` VALUES(35,2,30,'2000-04-19',1);


-- Tabelstructuur voor tabel `klanten`
CREATE TABLE IF NOT EXISTS `klanten` (
  `klantnummer` INT NOT NULL AUTO_INCREMENT,
  `voornaam` TEXT,
  `achternaam` TEXT,
  `woonplaats` TEXT,
  `provincie` TEXT,
  PRIMARY KEY (`klantnummer`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- Gegevens worden uitgevoerd voor tabel `klanten`
INSERT INTO `klanten` VALUES(1,'Jan','Grijs','Sneek','Friesland');
INSERT INTO `klanten` VALUES(2,'Harry','Bruin','Baarn','Utrecht');
INSERT INTO `klanten` VALUES(3,'Eddy','Kelder','Snakkeburen','Friesland');
INSERT INTO `klanten` VALUES(4,'Lisa','Jansen','Purmerend','Noord-Holland');
INSERT INTO `klanten` VALUES(5,'Ginger','Bergsma','Utrecht','Utrecht');
INSERT INTO `klanten` VALUES(6,'Kelly','Witte','Almelo','Overijssel');
INSERT INTO `klanten` VALUES(7,'Herbert','Dalton','Almere','Flevoland');
INSERT INTO `klanten` VALUES(8,'Michael','Veenstra','Maarssen','Utrecht');
INSERT INTO `klanten` VALUES(9,'Anton','Vergo','Woerden','Zuid-Holland');
INSERT INTO `klanten` VALUES(10,'Peter','Elegast','Rotterdam','Zuid-Holland');
INSERT INTO `klanten` VALUES(11,'Marianne','Spaarzaam','Middelburg','Zeeland');
INSERT INTO `klanten` VALUES(12,'Donald','Jongsma','Aalten','Gelderland');
INSERT INTO `klanten` VALUES(13,'Linda','Salamon','Vinkeveen','Utrecht');
INSERT INTO `klanten` VALUES(14,'Sarah','Graham','Bredevoort','Gelderland');
INSERT INTO `klanten` VALUES(15,'Kevin','Smit','Delfstrahuizen','Friesland');
INSERT INTO `klanten` VALUES(16,'Conrad','Klaren','Leiden','Zuid-Holland');
INSERT INTO `klanten` VALUES(17,'Isabelle','Zandman','Utrecht','Utrecht');
    

Dit is het resultaat. Links zie je dat er drie tabellen zijn aangemaakt.

Opdracht 4 t/m 52 SQL oefenen met database winkel

Vanaf hier kan je gewoon de Reader SQL volgen, want de SQL-opdrachten werken precies zoals beschreven. Kopieer de code van Opdracht 4, plak die bij SQL en klik op de knop Starten.

Met deze SELECT vindt je 5 artikelen uit de database.

Verschillen tussen XAMPP en WebServer in Reader Programmeren in PHP en de database

In de Reader Programmeren in PHP en de database wordt beschreven hoe je met WebServer een local webserver start en hoe je vervolgens met PHP met een SQLite database kunt werken.

Met XAMPP werkt het allemaal net even anders, want XAMPP werkt met een MySQL database.

Opdracht 2 database winkel lezen met PHP

Dit is Opdracht 2 uit de Reader Programmeren in PHP en de database.

De PHP om de database winkel te lezen en te bewerken is gelukkig precies hetzelfde. Alleen het contact leggen met de database is anders. Zie de geel gemaakte code hieronder.

<!DOCTYPE html>
<html lang="nl">
  <head>
	<meta charset="utf-8">
    <title>De klanten van de winkel</title>
  </head>
  <body>
    <?php

    // Maken van verbinding
    $db = new PDO("mysql:host=localhost;dbname=winkel","root", "");

    // De code hieronder is om eventuele foutmeldingen
    // weer te geven
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Dan komt hier de code waarin je gebruik maakt van
    // de database
    $sql = "SELECT achternaam FROM klanten";
    $resultaat = $db->query($sql);
 
    foreach($resultaat as $row) {
      echo $row['achternaam'].'<br>';
    }
 
    // Sluiten van verbinding
    $db = NULL;
    ?>
  </body>
</html>
    

Opdracht 3 t/m 6 database winkel bewerken met PHP

Vanaf hier kan je gewoon de Reader Programmeren in PHP en de database volgen, want de PHP met SQL-opdrachten werken precies zoals beschreven.

Opdracht 7 t/m 8 database speelotheek opzetten

De rootmap met WebServer is dus www. De rootmap met XAMPP is htdocs.

Met XAMPP gebruik je phpMyAdmin en moet je als databasename speelotheek invullen.

Opdracht 9 database speelotheek vullen

In Opdracht 9 uit de Reader Programmeren in PHP en de database maak je de database speelotheek en vul je de database met tabellen.

De code uit de reader voor SQLite is net even anders dan de code voor mySQL. Je gebruikt weer phpMyAdmin. Kopieer daarom onderstaande code, plak die op tabblad SQL en klik op de knop Starten.

-- Table structure for categorie
CREATE TABLE `categorie` (
  `categorienummer` INTEGER NOT NULL AUTO_INCREMENT,
  `categorienaam`  TEXT,
  PRIMARY KEY (`categorienummer`)
);

-- Table structure for lid
CREATE TABLE `lid` (
  `lidnummer` INTEGER NOT NULL AUTO_INCREMENT,
  `voornaam` TEXT,
  `tussenvoegsel` TEXT,
  `achternaam` TEXT,
  `adres` TEXT,
  `postcode` TEXT,
  `woonplaats` TEXT,
  `telefoonnummer` TEXT,
  `email` TEXT,
  `lidsoortnummer` INTEGER,
  PRIMARY KEY (`lidnummer`)
);

-- Table structure for lidsoort
CREATE TABLE `lidsoort` (
  `lidsoortnummer` INTEGER NOT NULL AUTO_INCREMENT,
  `lidsoortnaam` TEXT,
  PRIMARY KEY (`lidsoortnummer`)
);

-- Table structure for speelgoed
CREATE TABLE `speelgoed` (
  `speelgoednummer` INTEGER NOT NULL AUTO_INCREMENT,
  `speelgoednaam` TEXT,
  `categorienummer` INTEGER,
  `leenduur_dagen` INTEGER,
  PRIMARY KEY (`speelgoednummer`)
);

-- Table structure for uitleen
CREATE TABLE `uitleen` (
  `uitleennummer` INTEGER NOT NULL AUTO_INCREMENT,
  `speelgoednummer` INTEGER,
  `lidnummer` INTEGER,
  `datum_uitgeleend` DATETIME,
  `datum_terug` DATETIME,
  PRIMARY KEY (`uitleennummer`)
);
    

Opdracht 10 verbinden met database speelotheek

Dit is Opdracht 10 uit de Reader Programmeren in PHP en de database.

De PHP om de database speelotheek te lezen en te bewerken is gelukkig precies hetzelfde. Alleen het contact leggen met de database is anders. Zie de geel gemaakte code hieronder.

<?php

// Maken van verbinding

$db = new PDO("mysql:host=localhost;dbname=speelotheek","root", "");

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

?>
    

Opdracht 11 t/m 17 oefenen met PHP en de database speelotheek

Vanaf hier kan je gewoon de Reader PHP met de database volgen, want alles werkt precies zoals beschreven.

In deze opdrachten oefen je met HTML, CSS, PHP en SQL. De opdrachten 18 t/m 34 mag je ook doen, maar ze zijn niet noodzakelijk.