Page 1 sur 1

Accès spécifique à une table

Posté : 17 oct. 2021, 11:57
par nestor94
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');
?>

Re: Accès spécifique à une table

Posté : 17 oct. 2021, 12:07
par @rthur
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');

Re: Accès spécifique à une table

Posté : 17 oct. 2021, 12:29
par nestor94
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');

Re: Accès spécifique à une table

Posté : 17 oct. 2021, 13:39
par or 1
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.

Re: Accès spécifique à une table

Posté : 18 oct. 2021, 01:21
par nestor94
J'ai retesté avec seulement la table villes mais ça ne fonctionne pas. A cause des déplacements (pos_x, pos_y) déjà.

Re: Accès spécifique à une table

Posté : 18 oct. 2021, 12:27
par or 1
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.

Re: Accès spécifique à une table

Posté : 18 oct. 2021, 14:05
par nestor94
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.)