[RESOLU] Accès spécifique à une table

Eléphant du PHP | 345 Messages

17 oct. 2021, 11:57

Bonjour,

je souhaiterai accéder à une table (dont le nom est aussi une colonne dans une autre table) (le tout dans un script php) :roll:

Voici l'exemple:

table villes avec une colonne nom_ville (contient "testville")


table testville avec une colonne nom_ville (contient "testville")

la finalité devant être

......header('Location:testville.php');
test en cours ci dessous
<?php
$pdostat = $bdd->prepare("SELECT nom_ville FROM villes LEFT JOIN membres ON villes.pos_x_map = membres.pos_x AND villes.pos_y_map = membres.pos_y WHERE membres.id=:id");
$pdostat->bindvalue(':id',$idMembreSession ,PDO::PARAM_INT);
$pdostat->execute();
$membreSession = $pdostat->fetch();    
if (!empty($membreSession )) { 
$nom_ville = $membreSession['nom_ville'];
}
$table = $nom_ville;
header('Location: $table.php');
?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

17 oct. 2021, 12:07

As-tu bien activé la gestion des erreurs de ta base de données ?
Pour PDO il faut la mettre à PDO::ERRMODE_WARNING pour t'aider au debugage
https://www.php.net/manual/fr/pdo.error-handling.php

Ensuite pour la concaténation des variables, il faut utiliser le point :
header('Location: '.$table.'.php');
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 345 Messages

17 oct. 2021, 12:29

En concaténant proprement, c'est mieux. Il reste un problème que j'avais escamoté:
$nom_ville peut parfois avoir un espace ( espace qui a été remplacé par un underscore lors de la création de la table du meme nom, sinon ça coinçait!)
(par exemple Las Vegas -----> Las_Vegas)
je n'arrive pas à trouver la bonne syntaxe pour le renommage:
$nom_ville = $membreSession['nom_ville'];
rename("$nom_ville", "$nom_ville" . '_'  .");
header('Location: '.$nom_ville.'.php');

Mammouth du PHP | 2703 Messages

17 oct. 2021, 13:39

rename("$nom_ville", "$nom_ville" . '_' .");
que dit la doc sur ce que fait cette fonction ?

à noter qu'il n'y aurait pas tous ces problèmes d'espaces, d'accents, si la structure de la base de données était correcte avec une seule table villes.

Eléphant du PHP | 345 Messages

18 oct. 2021, 01:21

J'ai retesté avec seulement la table villes mais ça ne fonctionne pas. A cause des déplacements (pos_x, pos_y) déjà.

Mammouth du PHP | 2703 Messages

18 oct. 2021, 12:27

il est possible qu'il faille une autre table pour ces déplacements, mais il faudrait comprendre ce que doit faire l'appli pour être affirmatif.

Eléphant du PHP | 345 Messages

18 oct. 2021, 14:05

Je continue sur mon idée !
<?php
$pdostat = $bdd->prepare("SELECT nom_ville FROM villes LEFT JOIN membres ON villes.pos_x_map = membres.pos_x AND villes.pos_y_map = membres.pos_y WHERE membres.id=:id");
$pdostat->bindvalue(':id',$idMembreSession ,PDO::PARAM_INT);
$pdostat->execute();
$membreSession = $pdostat->fetch();    
if (!empty($membreSession )) { 
$nom_ville = $membreSession['nom_ville'];
}
$nom_ville = str_replace(' ', '_', $nom_ville);
?>
(Ne reste plus qu'à créer un script générique qui affichera la map pour n'importe quelle ville.)