====== creer-son-site-web-en-php _ Installer mysql, créer une BDD pour un site en php objet ====== * Objet : Mise en place d'une base de données mysql, organiser le code de son site web selon les conventions de la programmation //orientée objet//. * Niveau requis : {{tag>avisé}} * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) ===== Installations relative à la base de données ===== apt-get install php5-mysql apt-get install mysql-server apt-get install phpmyadmin ===== Utilisation ===== ====Base de données, table membre==== ===On crée la base de données === * Voir script sh et explication : https://debian-facile.org/utilisateurs:hypathie:config:script_creation_bdd_mysql_et_user ./creerMysqlBDDetUser.sh essaiLogin essaiLogin === Création des tables membre et login=== #-- fichier : /home/$user/createTableMembreLogin.sql USE essaiLogin; DROP TABLE IF EXISTS `login`; CREATE TABLE IF NOT EXISTS login( login_id int NOT NULL AUTO_INCREMENT, pseudo VARCHAR(20) NOT NULL, motPasse VARCHAR(100) NOT NULL, cle VARCHAR(50) NULL, actif TINYINT(1) NULL, mail VARCHAR(50) NOT NULL, lastConnect TIMESTAMP DEFAULT 0, PRIMARY KEY (login_id), UNIQUE KEY username (pseudo) )ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `membre`; CREATE TABLE IF NOT EXISTS membre( membre_id int NOT NULL AUTO_INCREMENT, prenom VARCHAR(50) NOT NULL, nom VARCHAR(50) NOT NULL, isAdmin tinyint(1) NOT NULL DEFAULT 0, dateInscription TIMESTAMP DEFAULT CURRENT_TIMESTAMP(), dateModif TIMESTAMP DEFAULT 0, idLogin int NOT NULL, PRIMARY KEY (membre_id), CONSTRAINT FK_login FOREIGN KEY(`idLogin`) REFERENCES login(`login_id`) )ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql -uessaiLogin -p === Quelques insertions pour les tests=== #--fichier : /home/$user/insertTableMembreLogin.sql USE essaiLogin; SET FOREIGN_KEY_CHECKS=0; TRUNCATE `login`; SET FOREIGN_KEY_CHECKS=1; DELETE FROM `login`; INSERT INTO login(pseudo, motPasse, mail) VALUES ('admin', '$2y$09$vDdO6/IMSHdk/ja2MQGHfO1KJasWHNRCUDr4ZCecaZjtl4GpM3I9m', 'admin@adm.fr'); SET FOREIGN_KEY_CHECKS=0; TRUNCATE `membre`; DELETE FROM `membre`; INSERT INTO membre(prenom, nom, isAdmin, dateInscription, idLogin) VALUES ('admin', 'Admin', 1, now(), 1); mysql -uessaiLogin -p * La ligne ''isAdmin tinyint(1)NOT NULL DEFAULT 0,'' \\ signifie que le champs est rempli par défaut avec la valeur ''FALSE''.\\ La valeur ''TRUE'' sera ''1''. * Voir : http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html BOOL, BOOLEAN These types are synonyms for TINYINT(1). A value of zero is considered false. Nonzero values are considered true * Le mot de passe pour admin a été généré à titre d'exemple par la fonction php suivante. \\ La documentation déconseille l'utilisation de md5 et de sha1 http://php.net/manual/fr/faq.passwords.php // pour première insertion $pseudo = "admin"; $motPasse = "admin"; echo "

mot de passe pour " .$pseudo. ":

"; $motPasseHash = password_hash($motPasse,PASSWORD_BCRYPT,['cost' => 9]); echo "

".$motPasseHash."

"; // $bool = password_verify($motPasse, $motPasseHash); var_dump($bool); // retour : //mot de passe pour admin: //$2y$09$OLK0HP3JDYjMKSoJxC00o.MCnMWHjT/sUI.rynSHxw.p9A6tSZYM. //boolean true
**Remarque sur les dates :** Pour le champ ''dateModif'', si on avait choisi le type ''DATE'' à la place de ''TIMESTAMP'' CREATE TABLE IF NOT EXISTS membre( <...> dateInscription TIMESTAMP DEFAULT CURRENT_TIMESTAMP, dateModif DATE, <...> )ENGINE=InnoDB DEFAULT CHARSET=utf8; On aurait pu modifier la date seulement * avec la fonction mysql ''now()'' : UPDATE `membre` SET `dateModif`=NOW() WHERE `pseudo`='admin'; * ou avec la fonction mysql ''CURRENT_TIMESTAMP()'' : UPDATE `membre` SET `dateModif`=CURRENT_TIMESTAMP() WHERE `pseudo`='admin'; * qui donneraient ce résultat : select pseudo, dateModif from membre where pseudo='admin'; +-------+------------+ | pseudo | dateModif | +-------+------------+ | admin | 2016-06-24 | +-------+------------+