IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Configuration : PDO avec Serveur Linux ?


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Configuration : PDO avec Serveur Linux ?
    Bonjour à tous,

    Pour un projet de fin d'année je dois créer un site qui permet :
    --> Inscription
    --> Connexion
    --> Créer des tickets de support
    --> Modifier ces tickets
    --> Supprimer ces tickets

    Pour le moment tout fonctionne sur Xampp et tout allait bien jusqu'à ce que j'importe le site sur mon serveur Linux qui va héberger le site. Dès lors, la création des tickets de support ne fonctionne plus et je n'ai pas d'erreurs d'afficher.

    Je pense que le PDO fait tout merder car à part la création des tickets de support tout est en MySQL et il n'y a aucun problème sur Windows ou Linux pour ceux là.
    Je pense donc que je dois activer PDO pour Linux or, je l'ai fais et rien ne fonctionne....

    Ce que j'ai fais :
    Editer le fichier php.ini dans /etc/php/7.4/apache2 en ajoutant :
    extension=pdo.so
    extension=pdo_mysql.so
    extension=php_pdo_mysql.dll
    display_errors = On


    La page d'insertion des tickets en PDO :
    Nom : Capture.JPG
Affichages : 1190
Taille : 48,6 Ko

    Mais cela ne sert pas car en créant un nouveau ticket il ne s'affiche toujours pas...

    Comment faire?
    Merci..

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Editer le fichier php.ini dans /etc/php/7.4/apache2 en ajoutant :
    extension=pdo.so
    extension=pdo_mysql.so
    extension=php_pdo_mysql.dll
    display_errors = On
    Normalement tu n'es pas censé éditer le fichier php.ini directement pour gérer les divers modules. Ceux-ci le sont par le biais des fichiers .ini situés dans le répertoire /etc/php7.4/apache2/conf.d.
    Donc commence par virer ou commenter les lignes que tu as ajouter dans le php.ini (conserve le display_errors = On):
    Code ini : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    extension=pdo.so
    extension=pdo_mysql.so
    extension=php_pdo_mysql.dll
    (À noter que la dernière ligne n'a aucun sens, vu qu'on est pas sous Windows, mais mettons ça sur le compte du désespoir.)

    En listant /etc/php7.4/apache2/conf.d tu remarqueras que chaque nom de fichier commence par un nombre suivi d'un tiret.
    Ce nombre définit la priorité des modules (plus il est bas, plus la priorité est haute). Or, le module pdo.so doit être chargé avant le module pdo_mysql.so.
    Par exemple, dans mon répertoire j'ai: 10-pdo.ini et 20-pdo_mysql.ini.

    Voici leur contenu:

    Donc vérifie que tu as bien ça et crée les au besoin.

    Ensuite, dés que tu fais une modification sur les paramètres d'initialisation de php, tu dois redémarrer Apache pour que ceux-ci soient pris en compte:
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo service apache2 restart
    ou bien
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo /etc/init.d/apache2 restart

    Pour ce qui est de ton code PHP, il y a à redire, mais j'attends que tu remplaces ta copie d'écran, par le texte de ton code entre les balises prévues pour.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour merci pour la réponse,
    J'ai commenté les lignes vous vous m'avez dit de commenter (la 3e était sur le compte du désespoir oui....), été vérifier 10-pdo.ini et 20-pdo_mysql.ini qui sont correct et avec le bon numéro et effectuer un redémarrage d'apache mais sans succès

    Voici donc le code PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    /* Connexion à une base ODBC avec l'invocation de pilote */
    $dsn = 'mysql:dbname=registration;host=localhost';
    $user = 'root';
    $password = '';
     
    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connexion échouée : ' . $e->getMessage();
    }
    if (isset ($_POST['valider'])){
                    $nom=$_POST['nom'];
                    $email=$_POST['email'];
                    $description=$_POST['description'];
                    $attribuerà=$_POST['attribuerà'];
                    $dbh->exec("INSERT INTO adherants(id,nom,email,description,attribuerà) VALUES('','$nom','$email','$description','$attribuerà')");
                }
    ?>
    <meta http-equiv="refresh" content="0;URL=index.php">

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Donc pas de problème de ce coté là.

    Pour que PDO émette des messages d'erreurs, tu dois lui préciser via le paramètre PDO::ATTR_ERRMODE.

    Pour cela, tu peux le lui transmettre lors de la connexion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $dsn = 'mysql:host=localhost;dbname=registration;charset=utf8mb4';
    $user = 'root';
    $password = '';
     
     
    $options = [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES => false
    ];
     
    try {
        $dbh = new PDO($dsn, $user, $password, $options);
    } catch (PDOException $e) {
        echo 'Connexion échouée : ' . $e->getMessage();
    }
    Les accents dans les noms de variables et les noms de colonnes de ta base c'est une très mauvaise idée. Utilise le singulier pour les noms de table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbh->exec("INSERT INTO adherants(id,nom,email,description,attribuerà) VALUES('','$nom','$email','$description','$attribuerà')");
    Un des intérêts de PDO est justement d'éviter d'écrire ce genre de choses (concaténation de variables provenant de l'extérieur directement dans la requête). C'est un trou de sécurité dans lequel peut s'insinuer une injection SQL, et une source d'ennuis avec des caractères qu'il faut échapper (par exemple si ta description contient un quote). Tu dois utiliser une requête préparée pour solutionner d'un coup ces deux problèmes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $query = 'INSERT INTO adherent (nom, email, description, attribuer)
    VALUES (:nom, :email, :description, :attribuer)';
     
    $stmt = $dbh->prepare($query);
    $stmt->execute([
        'nom' => $nom,
        'email' => $email,
        'description' => $description,
        'attribuer' => $attribuer
    ]);
    À noter qu'il n'est pas utile de préciser l'id si celui-ci est en AUTO_INCREMENT.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Donc pas de problème de ce coté là
    Re bonsoir,

    J'ai donc implanté votre code et voici ce qu'il en résulte :
    Nom : dfgdfCapture.JPG
Affichages : 939
Taille : 116,9 Ko
    .
    Nom : Captur22e.JPG
Affichages : 904
Taille : 52,3 Ko
    (le ticket ID 39 est un ticket mis manuellement dans phpmyadmin)

    Je ne comprends pas pourquoi cela marque connexion échouée alors que les identifiants sont bon... étrange...
    Images attachées Images attachées  

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Essai en remplaçant localhost par l'adresse IP et ajoute le port 3306:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $host = '127.0.0.1';
    $port = '3306';
    $db = 'registration';
    $charset = 'utf8mb4';
     
    $dsn = "mysql:host=$host:$port;dbname=$db;charset=$charset";
    $user = 'root';
    $password = '';
    (Pitié arrête les copies d'écran, c'est 200ko par image alors qu'il suffit de remplacer par du texte qui ne pèse rien et qu'on peut copier/coller.)

Discussions similaires

  1. Connexion sur BD distante avec serveur LINUX
    Par tissard dans le forum Oracle
    Réponses: 9
    Dernier message: 11/08/2009, 16h49
  2. HTML -> RTF avec Serveur Linux
    Par xxkirastarothxx dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 14/01/2009, 12h52
  3. Réseau avec Serveur Linux / Client Windows
    Par rems033 dans le forum Administration système
    Réponses: 4
    Dernier message: 04/12/2008, 16h48
  4. Problème Ajax avec serveur IIS en ASP/C#
    Par silvinus dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/05/2008, 17h42
  5. [InetAdress] isReachable : pb ping avec serveurs linux
    Par tck-lt dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 23/08/2005, 19h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo