Problème execute mysql [Résolu/Fermé]

Signaler
Messages postés
50
Date d'inscription
mercredi 24 octobre 2018
Statut
Membre
Dernière intervention
28 juin 2020
-
Messages postés
50
Date d'inscription
mercredi 24 octobre 2018
Statut
Membre
Dernière intervention
28 juin 2020
-
Bonjour, sa me fait dit comme erreur :
Fatal error: Uncaught Error: Call to a member function execute() on string in D:\Programmes\wampserver\www\index.php on line 20
Error: Call to a member function execute() on string in D:\Programmes\wampserver\www\index.php on line 20

Et le code de la ligne 19 et 20 :

$insert_partie = ('INSERT INTO '.$dossier.'(nompartie, nombre) VALUES(?, ?)');
$insert_partie->execute(array($dossier, $nombre));


Merci pour vos réponses.

2 réponses

Messages postés
29224
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 août 2020
2 693
Bonjour,

Un Execute s'utiliser après un PREPARE

Je rappelle également (à toutes fins utiles...) qu'il faut activer la gestion d'erreur PDO ET placer CHAQUE requête dans un bloc try/Catch comme expliqué ici :
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Donc ton code devient
$sql = 'INSERT INTO '.$dossier.'(nompartie, nombre) VALUES(?, ?)';
$datas = array($dossier, $nombre);
try{
  $insert_partie = $bdd->prepare($sql);
  $insert_partie->execute($datas);
}catch(Exception $e){
  echo "Erreur : " / $e->getMessage();
}



Je t'invite également à lire (et à appliquer ) les conseils donnés ici :
https://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

.


1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 58212 internautes nous ont dit merci ce mois-ci

Messages postés
29224
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 août 2020
2 693
Au passage .... la fonction htmlspecialchars ne s'utiliser QUE pour l'affichage ... et en aucun cas pour stocker les données en BDD....
Messages postés
50
Date d'inscription
mercredi 24 octobre 2018
Statut
Membre
Dernière intervention
28 juin 2020
7
Je te remercie infiniment !

Sans le try catch, ça m'aurait pas affiché l'erreur, j'ai corrigé d'autre erreurs et appliqué tous les paramètres que tu ma mis en lien.
Sa ma beaucoup aidez.

Merci pour la réponse et je t'ai mis un merci.
Messages postés
14694
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2020
242
$insert_partie = ('INSERT INTO '.$dossier.'(nompartie, nombre) VALUES(?, ?)');
Pas besoin des parenthèses ici.
Le . insert la valeur de la variable, donc ici $dossier définit le nom de la table.

Sans plus d'information, impossible d'aller plus loin.

Déjà affiche le contenu de la variable $insert_partie pour voir ce que ça donne.
Messages postés
50
Date d'inscription
mercredi 24 octobre 2018
Statut
Membre
Dernière intervention
28 juin 2020
7
Merci pour ta réponse.

Tu va trouvé le code bizarre mais tien

<?php

$bdd = new PDO('mysql:host=blablabla;dbname=jeux' , 'blablabla', 'blablabla');

$nombre_a = rand(111111 , 999999);
if(!empty($_POST['nompartie']) AND !empty($_POST['nombre'])){
 $dossier = $_POST['nompartie'].'_'.$nombre_a;
 if(is_numeric($_POST['nombre'])){
  if(!is_dir($dossier)){
  mkdir($dossier);
  $table = $bdd -> query('CREATE TABLE '.$dossier.'
   (
    id INT PRIMARY KEY NOT NULL,
    nompartie VARCHAR(100),
    nombre INT
   )');
    $nombre = htmlspecialchars($_POST['nombre']);
    sleep(1);
    $insert_partie = ('INSERT INTO '.$dossier.'(nompartie, nombre) VALUES(?, ?)');
    $insert_partie->execute(array($dossier, $nombre));

  $fichier = fopen($dossier.'\index.php' , 'w+');
  $texte = '
  <?php 
  
  $bdd = new PDO("mysql:host=blablabla;dbname=jeux" , "blablabla", "blablabla");

  ?>

  <!DOCTYPE html>
  <html>
  <head>
  </head>
  <body>
  <center>
  <form method="POST">
  <label>Nombre</label><br>
  <input type="text" name="nb" id="nb">
  <input type="submit" name="vd" id="vd">
  </form>
  </center>

  </body>
  </html>
  ';
  fwrite($fichier, $texte);
  fclose($fichier);
  echo '<center>Nom de la partie : '.$dossier.'<br>Nombre : '.$_POST['nombre'].'<br>';
  } else { echo '<center><b class="warning">Dossier deja existant.</b></center>'; }

  } else {
   echo '<center><b class="warning">Erreur !</b></center>';
  }
 

} else {
 echo '<center><b class="warning">Erreur !</b></center>';
}


?>


Le code est juste pour moi, c'est pas pour mettre en ligne

Merci pour vos réponse.
Messages postés
50
Date d'inscription
mercredi 24 octobre 2018
Statut
Membre
Dernière intervention
28 juin 2020
7
Et le nom de la table, je veux que se sois le nom du dossier, que je mets dans le input