[RESOLU] probleme create table

Eléphant du PHP | 345 Messages

08 oct. 2021, 15:45

Bonjour,

J'essaie de créer une table mais sans succès
<?php
session_start();
require_once 'config.php';
include 'verif_PA.php';
$idMembreSession = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;

$pdostat = $bdd->prepare("SELECT msg_nom_ville FROM map LEFT JOIN membres ON map.pos_x = membres.pos_x AND map.pos_y = membres.pos_y WHERE membres.id=:id");
$pdostat->bindvalue(':id',$idMembreSession ,PDO::PARAM_INT);
$pdostat->execute();
$membreSession = $pdostat->fetch();    
if (!empty($membreSession )) { 
$msg_nom_ville = $membreSession['msg_nom_ville'];
 }

$sql = "CREATE '$msg_nom_ville' (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tile VARCHAR(30) NOT NULL,
pos_x SMALLINT(5) NOT NULL,
pos_y SMALLINT(5) NOT NULL,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 oct. 2021, 16:38

As-tu activé la gestion d'erreur de PDO sur PDO::ERRMODE_WARNING ?
https://www.php.net/manual/fr/pdo.error-handling.php
Cela peut aider à débuguer.
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 2703 Messages

08 oct. 2021, 19:18

sans exécuter la requête, cela marche forcément beaucoup moins bien.

quel est le but de ces tables ? car je doute que ce soit la meilleure solution.

Eléphant du PHP | 345 Messages

09 oct. 2021, 23:02

$sql = "CREATE '$msg_nom_ville' 
(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tile VARCHAR(30) NOT NULL,
pos_x SMALLINT(5) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
$bdd->exec($sql);
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''testville' ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, tile VARCHAR(30' à la ligne 1 in C:\wamp64\www\create_ville.php on line 22

En fait, chaque membre se déplace sur une map principale et peut éventuellement batir une ville, d'où la création d'une table (au nom de ladite ville préalablement créée) qui générera une autre map. S'il se trouve une solution moins tordue, je suis preneur. Il reste cependant cette erreur que je n'arrive pas à solutionner.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 oct. 2021, 15:16

Salutations !

Il ne faut pas d'apostrophes autour du nom de la table dans la requête :)

Mais je rejoins or1, la logique serait d'avoir une seule table de villes dans laquelle tu viens ajouter un enregistrement pour chaque ville créée plutôt que de créer des tables à la volée... quitte à faire une seconde table qui référence ta table ville avec toutes les tiles et autres informations dont tu peux avoir besoin :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 345 Messages

10 oct. 2021, 22:50

Oui, j'ai déjà une table ville, le soucis, c'est que dans le gameplay de mon projet, le joueur peut aussi y créer des batiments, et donc d'autres tiles.
J'ai donc un probleme au niveau des coordonnées qui vont se chevaucher, voire se mélanger entre les différentes villes, voire avec la map principale. Je ne peux donc pas créer ces futures table par avance, ne connaissant pas (encore) le nom de la ville et ce que le joueur y batira.
(j'espère que je suis clair!).
Ce n'est pas vital de toutes façons. Les joueurs batiront leurs villes directement sur la map principale.