Problème requête mysqli

Résolu
Tzmagnum Messages postés 132 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Toutes mes autres requêtes de ma page fonctionne, pourquoi pas celle-ci svp ?

Sachant que le nom de ma base de donnée est le même que l'username.

Merci d'avance.

<?php
//affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
require('config.php');
$username="supraSupra";
$password="test";
$query = "CREATE USER $username@'%' IDENTIFIED BY $password;
GRANT USAGE ON * . * TO $username@'%' IDENTIFIED BY $password;
CREATE DATABASE IF NOT EXISTS $username DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_general_ci;
GRANT ALL PRIVILEGES ON $username . * TO $username@'%';"
$res = mysqli_query($conn, $query);
?>


Configuration: Windows / Chrome 91.0.4472.114

3 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour
    Fais un echo de ta variable $query puis serts toi de ce qui va s'afficher pour tester la requête directement dans ta bdd via phpmyadmin afin de t'assurer que la requête fonctionne .
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      D'ailleurs.. tu n'as pas une mais trois requetes... Pas sûr que tu puisses les lancer en une seule fois..
      Il faudra certainement exécuter trois requetes distinctes dans le php.
      0
  2. Tzmagnum Messages postés 132 Statut Membre
     
    Voilà j'ai adapté en passant par 4 requètes et en mettant en echo query1 query2 query3 et query4
    Cela me donne ça en affichage :

    CREATE USER supraSupra@'%' IDENTIFIED BY test

    GRANT USAGE ON * . * TO supraSupra@'%' IDENTIFIED BY test

    CREATE DATABASE IF NOT EXISTS supraSupra DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_general_ci

    GRANT ALL PRIVILEGES ON supraSupra . * TO supraSupra@'%'

    Cela créer bien la table, mais pas l'utilisateur.

    Merci d'avance de ton aide.

    Voici le code adapté :

    <?php
    //affichage des erreurs php
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    require('config.php');
    $username="supraSupra";
    $password="test";
    $query1 = "CREATE USER $username@'%' IDENTIFIED BY $password";
    $res1 = mysqli_query($conn, $query1);
    $query2 = "GRANT USAGE ON * . * TO $username@'%' IDENTIFIED BY $password";
    $res2 = mysqli_query($conn, $query2);
    $query3 = "CREATE DATABASE IF NOT EXISTS $username DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_general_ci";
    $res3 = mysqli_query($conn, $query3);
    $query4 = "GRANT ALL PRIVILEGES ON $username . * TO $username@'%'";
    $res4 = mysqli_query($conn, $query4);
    ?>
    <?php echo $query1; ?><br />
    <?php echo $query2; ?><br />
    <?php echo $query3; ?><br />
    <?php echo $query4; ?><br />
    
    0
  3. Tzmagnum Messages postés 132 Statut Membre
     
    J'ai réussi, merci.

    Il manquait juste les ' ' autour des variables des mots de passes et cela devait être passé requête par requête.

    Pour les personnes intérressées, voici le code complet, parcontre je sais pas si on peut faire plus propre, j'ai bien entendu donné des exemples de username, password et nom de domaine pour des raisons de sécurité.

    Et je n'arrive pas à passer mes variables dans mon shell (voir code plus bas).

    Code page Php :

    <?php
    //affichage des erreurs php
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    require('config.php');
    
    $username="supraSupra";
    $password="test";
    
    $path = "/var/www/".$username;
    if (!is_dir($path)) {
        mkdir($path, 0777, true);
    }
    $vhost = $username.".conf";
    $query_mysql_user = "CREATE USER $username@'%' IDENTIFIED BY '$password'";
    $res_mysql_user = mysqli_query($conn, $query_mysql_user);
    $query_mysql_grant = "GRANT USAGE ON * . * TO $username@'%' IDENTIFIED BY '$password'";
    $res_mysql_grant = mysqli_query($conn, $query_mysql_grant);
    $query_mysql_create_db = "CREATE DATABASE IF NOT EXISTS $username DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_general_ci";
    $res_mysql_create_db = mysqli_query($conn, $query_mysql_create_db);
    $query_mysql_all_privilege = "GRANT ALL PRIVILEGES ON $username . * TO $username@'%'";
    $res_mysql_all_privilege = mysqli_query($conn, $query_mysql_all_privilege);
    $query_ftp = "INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('$username', '1', '".hash('MD5', $password)."', '2001', '2001', '$path', '0', '0', '', '*', '0', '0')";
    $res_ftp = mysqli_query($conn, $query_ftp);
      file_put_contents("/etc/apache2/sites-available/".$vhost, "<VirtualHost *:80>\r\n ServerName $username.test.be\r\n\r\n\r\nServerAdmin admin@test.be\r\n DocumentRoot $path\r\n\r\n\r\n ErrorLog /var/logs/apache2/error.log\r\n CustomLog /var/logs/apache2/access.log combined\r\n\r\n\r\n</VirtualHost>");
      $output = exec("./heb.sh $vhost");
    ?>
    


    Code Shell de heb.sh : (se trouvant dans le même dossier)

    #!/bin/bash
    
    sudo a2ensite $vhost
    sudo service apache2 reload
    


    Avez-vous des idées pour améliorer le code, passer les variables dans mon shell et le rendre plus propre svp ?

    Merci d'avance
    0