Les querys "INSERT" ne fonctionnent pas sur mon CMS.

Résolu
M3NSONG3 Messages postés 670 Statut Membre -  
M3NSONG3 Messages postés 670 Statut Membre -
Bonjour,

J'utilise un cms que j'avais développer qui marchait très bien, puis j'ai changé d'hebergeur, et là c'est le drame. J'ai l'impression qu'aucune de mes querys INSERT ne marchent, aucune erreur, quelqu'un aurait une idée ?

Je suis sous Debian8 avec apache2.

Exemple de query :
bdd('player_alpha')->exec("INSERT INTO item (owner_id, window, pos, count, vnum,socket0,socket1,socket2) VALUES (" . $_SESSION['id'] . ", 'MALL', '$pos', '$nb_item', '$item','1','1','1')");

Alors que les querys SELECT marchent très bien, exemple :

("SELECT flag FROM item_proto WHERE vnum = '$item' ");

--
Cordialement, M3NSONG3 !

3 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Tu utilises quoi PDO ou mysqli ?
    Ensuite... as tu essayé de faire un ECHO de la requête pour voir ce qu'elle contient exactement ?
    As tu ensuite testé cette requête DIRECTEMENT dans ta bdd (via phpmyadmin par exemple) ?

    1
    1. M3NSONG3 Messages postés 670 Statut Membre 162
       
      J'utilise PDO. Oui j'ai fais des echos, ma requète contient toute les infos, et oui elle marche si je la lance de Navicat !


      Cordialement.
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Ah .. et puis... vu que tu utilises PDO .. il serait temps de passer aux requêtes préparées pour éviter les soucis d'injection SQL...
      Dans l'idéal, ta requête s'écrirait ainsi :
      //récupération PROPRE des variables AVANT de les utiliser !
      $id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
      
      
      
      //préparation de la requête et des variables
       $sql = "INSERT INTO item (owner_id, window, `pos`, `count`, vnum,socket0,socket1,socket2) 
                         VALUES (:id, :window, :pos, :nb_item,:vnum,socket0,:socket1,:socket2)";
      
       $datas = array(':id'=>$id,
                      ':window' =>'MALL',
                      ':pos' =>$pos,
                      ':nb_item' =>$nb_item,
                      ':vnum' =>$item,
                      ':socket0' =>1,
                      ':socket1' =>1,
                      ':socket2' =>1
                      );
      
      //Execution de la requete
      try{
        $requete = $bdd -> prepare($sql) ;
        $requete->execute($datas) ;
      }catch(Exception $e){
        // en cas d'erreur :
         echo " Erreur ! ".$e->getMessage();
         echo " Les datas : " ;
        print_r($datas);
      }
      
      
      0
  2. Pitet Messages postés 2845 Statut Membre 530
     
    Salut,

    As tu essayer de gérer le retour de la méthode exec pour afficher l'éventuel message d'erreur ?
    Par exemple :

    $pdo = bdd('player_alpha');
    
    $result = $pdo->exec("INSERT INTO item (owner_id, window, pos, count, vnum,socket0,socket1,socket2) VALUES (" . $_SESSION['id'] . ", 'MALL', '$pos', '$nb_item', '$item','1','1','1')");
    
    if ($result === false) {
        print_r($pdo->errorInfo());
    } else {
        echo 'Insertion réussie';
    }
    


    Bonne journée,
    1
  3. M3NSONG3 Messages postés 670 Statut Membre 162
     
    Merci de vos réponses !
    Après une vérification, les erreurs PHP ne s'affichent pas (j'ai essayé d'enlever un ; pour vérifier) Comment puis-je les remettre ? c'est un bout de code que j'avais ajouté ? (ça fait très très très longtemps que j'ai pas touché, et comme j'ai appris beaucoup de langage pendant ce temps là, j'ai des trous de mémoire).

    (J'ai aussi remarqué que le code ce stop net sur les querys avec INSERT.)
    Merci de votre aide !

    Cordialement, M3NSONG3 !
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Pour activer l'affichage des erreurs PHP :
      error_reporting(E_ALL);
      ini_set('display-errors','on');
      
      
      0
    2. M3NSONG3 Messages postés 670 Statut Membre 162
       
      Merci, mais même avec ça je n'obtiens toujours aucune erreur :/

      Si j'enlève par exemple un point virgule, la page ne s'affiche pas, mais sans erreur.
      0
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > M3NSONG3 Messages postés 670 Statut Membre
       
      Dans ce cas faut regarder dans les paramètres du serveur. (dans le php.ini)

      et.. à tout hasard.. si tu regardes dans le code source (le code source GENERE )de la page (via ton navigateur, lorsque la page s'affiche... ) si tu ne pourrais pas y voir l'erreur ??
      0
    4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Au pire, vérifie aussi dans le phpinfo les paramètres d'affichage des erreurs php.
      0
    5. Pitet Messages postés 2845 Statut Membre 530
       
      Si tu as une erreur de syntaxe php (point virgule manquant par exemple), PHP ne pourra alors pas exécuter ton fichier.
      Si tu as activer l'affichage des erreurs dans ce même fichier, alors cette activation ne sera pas prise en compte à cause de l'erreur de syntaxe.

      Même si les erreurs ne sont pas affichées (ce qui est mieux si le site est en ligne), elles devraient au moins être enregistrées dans le journal d'erreur de ton serveur web.
      0