Problème de base de donnée
Résolu
Abdl85
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
Abdl85 Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
Abdl85 Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
Salut à tous! Je suis en train de programmer directement sur mon site distant c'est-à dire le site est déjà en ligne. Je voulais créer une page de connexion à la base de donnée msql. Comme je ne travaille pas en Local comment insérer le nom du serveur dans le code.
A voir également:
- #1046 - aucune base n'a été sélectionnée
- Base de registre - Guide
- Mon compte facebook a été désactivé - Guide
- Mon compte instagram a été désactivé - Guide
- Aucune application permettant d'ouvrir ce lien n'a été trouvée - Forum Xiaomi
- Cette photo n’a pas été prise cette année. trouvez la date, l'heure et avec quel modèle d'appareil photo elle a été prise. - Forum Réseaux sociaux
3 réponses
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.
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.
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.
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.