Problème de base de donnée
Résolu/Fermé
Abdl85
Messages postés
18
Date d'inscription
jeudi 28 novembre 2019
Statut
Membre
Dernière intervention
31 mai 2022
-
28 févr. 2020 à 21:31
Abdl85 Messages postés 18 Date d'inscription jeudi 28 novembre 2019 Statut Membre Dernière intervention 31 mai 2022 - 30 mai 2020 à 05:03
Abdl85 Messages postés 18 Date d'inscription jeudi 28 novembre 2019 Statut Membre Dernière intervention 31 mai 2022 - 30 mai 2020 à 05:03
A voir également:
- #1046 - aucune base n'a été sélectionnée
- Le fichier à télécharger correspond au contenu brut d’un courrier électronique. de quel pays a été envoyé ce message ? - Forum Mail
- Gigaset ne reconnait plus sa base - Forum telephonie fixe
- Localiser l'expéditeur d'un mail - Guide
- Exemple base de données access à télécharger gratuit - Forum Access
3 réponses
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 718
28 févr. 2020 à 22:15
28 févr. 2020 à 22:15
Bonjour,
De la même façon que tu mets tes autres codes....
Via FTP.
Pour ce qui est du nom d'hôte... il faut utiliser celui fourni par ton hébergeur.
De la même façon que tu mets tes autres codes....
Via FTP.
Pour ce qui est du nom d'hôte... il faut utiliser celui fourni par ton hébergeur.
heliconius
Messages postés
539
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
23 juin 2023
139
9 avril 2020 à 00:52
9 avril 2020 à 00:52
Bonsoir,
Pour ma part, j'ai toujours un fichier init.php (ci-dessous) et les deux premières lignes de mes pages web commencent toutes par
Dès lors, je suis systématiquement connecté à ma BDD que j'interroge ainsi :
NB: Si exceptionnellement une page n'avait pas besoin d'accéder à la BDD ni avoir besoin des variables et fonctions incluses dans init.php, la ligne 2 : require() pourrait être commentée.
Si je voulais traiter les différentes erreurs possibles
Tu rédiges tes scripts tels quels sur ta machine locale puis tu les transfères par FTP sur ton hébergement.
Attention pour le nom du serveur. Il dépend de ton hébergeur. Pourquoi ?
Parce que celui qui crée la base de données (totobase) donne accès à un utilisateur (toto) de cette façon :
- soit à partir de n'importe où :
- soit à partir d'une machine donnée. Sur la machine 157.12.28.104 accès à la BDD ; sur une autre, non.
- soit à partir de la machine qui héberge le serveur de BDD :
A partir de n'importe où :
Cela veut dire que tu peux accéder à distance à ta BDD. Si tu as par exemple sur TA machine locale, à la maison, un programme client mysql DOS, tu peux très bien, sans aller sur le serveur, taper dans l'interface DOS (commande 'cmd') la commande :
A partir d'une machine donnée :
Tu ne pourras taper la commande ci-dessus seulement qu'à partir de la machine 157.12.28.104
A partir de la machine qui héberge le serveur de BDD :
L'exécuteur de la commande (personne physique connectée en SSH ou un script déposé sur le serveur) doit être SUR le serveur qui ne sera reconnu que par 'localhost' ou '127.0.0.1'
Dans ce cas là, dans init.php ci-dessous, la définition de serveur : define("SERVER", "..."); doit être soit 'localhost' soit '127.0.0.1' mais pas le numéro de la machine elle-même.
Voilà. J'espère t'avoir été utile.
Pour ma part, j'ai toujours un fichier init.php (ci-dessous) et les deux premières lignes de mes pages web commencent toutes par
<?php require('init.php'); ... ?> <html> ...
Dès lors, je suis systématiquement connecté à ma BDD que j'interroge ainsi :
$requete = "SELECT ... FROM ... WHERE ... [etc.] ...;"; $resultat = ExecRequete($requete,$connexion); while($r = mysql_fetch_object($resultat)) { // Instructions. Ex: // $nom = $r->nom; // $prenom = $r->prenom; // $dnaiss = cvdate($r->dnaiss,'-'); // cvdate() dans init.php // etc... }
NB: Si exceptionnellement une page n'avait pas besoin d'accéder à la BDD ni avoir besoin des variables et fonctions incluses dans init.php, la ligne 2 : require() pourrait être commentée.
Si je voulais traiter les différentes erreurs possibles
$resultat = ExecRequete($requete,$connexion,1); // ... ,1 switch ($mysqlerr) { // $mysqlerr dans init.php case 1049 : /* instructions pour base inexistante */ break; case 1146 : /* instructions pour table inexistante */ break; case .... : /* instructions selon le cas */ break; }
Tu rédiges tes scripts tels quels sur ta machine locale puis tu les transfères par FTP sur ton hébergement.
Attention pour le nom du serveur. Il dépend de ton hébergeur. Pourquoi ?
Parce que celui qui crée la base de données (totobase) donne accès à un utilisateur (toto) de cette façon :
- soit à partir de n'importe où :
GRANT ALL PRIVILEGES ON totobase.* TO 'toto' IDENTIFIED BY ('mot-de-passe'); // ou GRANT ALL PRIVILEGES ON totobase.* TO 'toto'@'%' IDENTIFIED BY ('mot-de-passe'); // en mysql, % = n'importe quoi, n'importe où
- soit à partir d'une machine donnée. Sur la machine 157.12.28.104 accès à la BDD ; sur une autre, non.
GRANT ALL PRIVILEGES ON totobase.* TO 'toto'@'157.12.28.104' IDENTIFIED BY ('mot-de-passe');
- soit à partir de la machine qui héberge le serveur de BDD :
GRANT ALL PRIVILEGES ON totobase.* TO 'toto'@'localhost' IDENTIFIED BY ('mot-de-passe'); // ou GRANT ALL PRIVILEGES ON totobase.* TO 'toto'@'127.0.0.1' IDENTIFIED BY ('mot-de-passe'); // 127.0.0.1 = localhost
A partir de n'importe où :
Cela veut dire que tu peux accéder à distance à ta BDD. Si tu as par exemple sur TA machine locale, à la maison, un programme client mysql DOS, tu peux très bien, sans aller sur le serveur, taper dans l'interface DOS (commande 'cmd') la commande :
mysql --host=159.162.21.214 --user=toto --password=mot-de-passe --execute="SELECT ... FROM totobase.matable ... WHERE ...;"
A partir d'une machine donnée :
Tu ne pourras taper la commande ci-dessus seulement qu'à partir de la machine 157.12.28.104
A partir de la machine qui héberge le serveur de BDD :
L'exécuteur de la commande (personne physique connectée en SSH ou un script déposé sur le serveur) doit être SUR le serveur qui ne sera reconnu que par 'localhost' ou '127.0.0.1'
Dans ce cas là, dans init.php ci-dessous, la définition de serveur : define("SERVER", "..."); doit être soit 'localhost' soit '127.0.0.1' mais pas le numéro de la machine elle-même.
<?php // Fichier init.php // ---------- Infos de connexion à la BDD sur le serveur define ("NOM", "username"); // Nom de l'utilisateur mysql define ("PASS", "xxxxxx"); // Mot de passe define ("SERVER", "111.222.333.444"); // IP ou nom FQDN ou localhost define ("BASE", "basename"); // Nom de la base // Affiche un éventuel message d'erreur et stopppe tout. function showError($error,$sql) { $cnx = $GLOBALS["connexion"]; if($error == 1) { echo "Serveur indisponible !"; } if($error == 2) { echo "Base de données indisponible !"; } if($error == 3) { echo "Erreur dans la requête !<br/>".mysql_error($cnx)."<br/>$sql"; } exit; } // Exécute une requête et retourne son résultat ou un message d'erreur // $re = 0|1 : 1=retourne le numéro d'erreur dans une variable (à traiter) function ExecRequete($request,$connexion,$re=0) { global $mysqlerr; $result = mysql_query($request,$connexion); if($result) { return $result; } else { if($re) { $mysqlerr = mysql_errno(); return; } showError(3,$request); } } // Effectue la connexion au serveur de BDD puis sélectionne la BDD if(!@$connexion = mysql_pconnect(SERVER,NOM,PASS)) { showError(1); } if(!@$ok = mysql_select_db(BASE,$connexion)) { showError(2); } // ---------- Autres définitions $mysqlerr = 0; dernière erreur mysql. Pour éventuel traitement // ... // ... // Autres définitions de variables et de fonctions utiles en permanence // - date mysql -> date fr, date fr -> date mysql // - écriture du/des menu(s) // - etc. // Si une fonction est très féquemment utilisée dans l'application : incluse dans init.php // Si une fonction est rarement utilisée dans l'application : incluse dans la page concernée // Exemples : // ===== Fonction de conversion de date // $d = date à mettre en forme // $sep = séparateur ('-' ou '/') // si $sep = '-' => date = AAAA-MM-JJ. On veut donc du JJ/MM/AAAA // si $sep = '/' => date = JJ/MM/AAAA. On veut donc du AAAA-MM-JJ function cvdate($d,$sep) { $td = explode($sep, $d); switch ($sep) { case '-' : return $td[2]."/".$td[1]."/".$td[0]; break; case '/' : return $td[2]."-".$td[1]."-".$td[0]; break; } } // etc... ?>
Voilà. J'espère t'avoir été utile.
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 718
9 avril 2020 à 07:43
9 avril 2020 à 07:43
Bonjour
Depuis le 28 février... J'espère qu'il a déjà résolu son souci.
Je note également que tu es en retard aussi sur la librairie mysql.
Il serait temps de passer à PDO ou mysqli.
:-)
Depuis le 28 février... J'espère qu'il a déjà résolu son souci.
Je note également que tu es en retard aussi sur la librairie mysql.
Il serait temps de passer à PDO ou mysqli.
:-)
heliconius
Messages postés
539
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
23 juin 2023
139
>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
9 avril 2020 à 13:37
9 avril 2020 à 13:37
Je l'espère aussi pour lui, mais je ne l'ai vu qu'hier. C'était plus pour donner une manière de travailler que résoudre le problème qui est probablement aujourd'hui résolu, quoiqu'il n'ait pas été marqué comme résolu.
Tu as raison, je devrais passer à PDO ou mysqli mais je n'arrive pas à m'y faire. je ne trouve pas de doc suffisamment claire expliquant la philosophie de ces interfaces ni des exemples pertinents. C'est comme les classes d'objets PHP, je suis toujours à l'ancienne méthode. Pas de fonction __construct(), le constructor, c'est la fonction qui porte le nom de la classe ; pas de fonctions public ou private. etc...
Je vois des trucs : "faites comme ça, tapez ceci..." mais aucune explication du pourquoi et je ne retiens pas si je ne comprends pas pourquoi.
Faudrait que je me botte les fesses, mais bon... je procrastine sur ce plan...
En tout cas, merci de me le rappeler. Ce serait pourtant le temps en ce moment avec le confinement. J'aurais le temps ; reste à trouver la motivation...
Bonne continuation à toi.
Tu as raison, je devrais passer à PDO ou mysqli mais je n'arrive pas à m'y faire. je ne trouve pas de doc suffisamment claire expliquant la philosophie de ces interfaces ni des exemples pertinents. C'est comme les classes d'objets PHP, je suis toujours à l'ancienne méthode. Pas de fonction __construct(), le constructor, c'est la fonction qui porte le nom de la classe ; pas de fonctions public ou private. etc...
Je vois des trucs : "faites comme ça, tapez ceci..." mais aucune explication du pourquoi et je ne retiens pas si je ne comprends pas pourquoi.
Faudrait que je me botte les fesses, mais bon... je procrastine sur ce plan...
En tout cas, merci de me le rappeler. Ce serait pourtant le temps en ce moment avec le confinement. J'aurais le temps ; reste à trouver la motivation...
Bonne continuation à toi.
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 718
>
heliconius
Messages postés
539
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
23 juin 2023
9 avril 2020 à 13:50
9 avril 2020 à 13:50
La meilleur motivation que je puisse te donner c'est que c'est obsolète. (que ce soit l'extension mysql_* ou les classes telles que tu les écris .. )
Depuis PHP >7 ton code ne fonctionne plus.
Sachant que php7 et au moins 3 fois plus performant que le php5 ...et qu'il ne sera bientôt plus disponible chez les hébergeurs web...
Bonne après midi à toi.
Depuis PHP >7 ton code ne fonctionne plus.
Sachant que php7 et au moins 3 fois plus performant que le php5 ...et qu'il ne sera bientôt plus disponible chez les hébergeurs web...
Bonne après midi à toi.
heliconius
Messages postés
539
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
23 juin 2023
139
>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
9 avril 2020 à 18:50
9 avril 2020 à 18:50
P...tain ! Tu me fous le moral à plat ! Déjà qu'il y a le confinement, ça en plus, c'est le pompon sur le gâteau ou la cerise sur le bouquet, au choix ! Bon, trêve de plaisanterie, il va donc falloir que je m'y mette...
Entre PDO et mysqli, tu me conseillerais quoi, plutôt et pourquoi ?
Entre PDO et mysqli, tu me conseillerais quoi, plutôt et pourquoi ?
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 718
>
heliconius
Messages postés
539
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
23 juin 2023
9 avril 2020 à 20:23
9 avril 2020 à 20:23
Personnellement j'ai une net préférence pour PDO.
Mysqli est strictement réservé aux bdd mysql alors que PDO est compatible avec plusieurs SGBD.
Mysqli est strictement réservé aux bdd mysql alors que PDO est compatible avec plusieurs SGBD.
Abdl85
Messages postés
18
Date d'inscription
jeudi 28 novembre 2019
Statut
Membre
Dernière intervention
31 mai 2022
30 mai 2020 à 05:03
30 mai 2020 à 05:03
Merci pour votre aide.