[PHP-MYSQL] même auto-increment sur 2 tables différentes
Posté : 13 janv. 2015, 11:51
Bonjour,
Je fait actuellement un questionnaire en ligne, avec une inscription avant de répondre aux questions.
Pour cela j'ai créer 3 tables dans mysql, une table user, une table liste_questions et une table reponses_user
J'aimerai que le auto_increment de l'user, se retrouve dans la table reponse_user lorsque le participant à répondu à la question.
Le problème c'est que si il y a deux user qui on le même nom et bien l'auto-increment ajouté est celui du premier user (et j'aimerai bien que ce soit celui du deuxieme)
voici mon code :
connexioncontroller.php
QuestionController.php
PlayersManager_PDO.php
ReponseManager_PDO.php
Je fait actuellement un questionnaire en ligne, avec une inscription avant de répondre aux questions.
Pour cela j'ai créer 3 tables dans mysql, une table user, une table liste_questions et une table reponses_user
J'aimerai que le auto_increment de l'user, se retrouve dans la table reponse_user lorsque le participant à répondu à la question.
Le problème c'est que si il y a deux user qui on le même nom et bien l'auto-increment ajouté est celui du premier user (et j'aimerai bien que ce soit celui du deuxieme)
voici mon code :
connexioncontroller.php
public function executeIndex(\Library\HTTPRequest $request)
{
unset($_SESSION['auth']);
unset($_SESSION['player_name']);
$player = new \Library\Entities\Player(array(
'player_name' => $request->postData('player_name'),
'player_mail' => $request->postData('player_mail')
))
;
$formBuilder = new \Library\FormBuilder\PlayersFormBuilder($player);
$formBuilder->build();
$form = $formBuilder->form();
if($request->method() == 'POST' && $form->isValid())
{
$this->managers->getManagerOf('Players')->save($player);
$this->app->user()->setFlash('Votre compte a bien été crée ;-)');
}
$this->page->addVar('form', $form->createView());
$this->page->addVar('title', '1ere question');
$this->page->addVar('title', 'Connexion');
if ($request->postExists('player_name'))
{
$player_name = $request->postData('player_name');
$player_mail = $request->postData('player_mail');
if (!empty($player_name) && !empty($player_mail))
{
$_SESSION['player_name'] = $player_name;
$this->app->user()->setAuthenticated(true);
$this->app->httpResponse()->redirect('/questions-1.html');
}
else
{
$this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
}
}
}
}
QuestionController.php
public function executeShow(\Library\HTTPRequest $request)
{
$infos_questions = $this->managers->getManagerOf('Questions')->getQuestion($request->getData('id'));
$infos_player = $this->managers->getManagerOf('Players')->getPlayers($_SESSION['player_name']);
$reponse = new \Library\Entities\Reponse(array(
'numero_question' => $request->getData('id'),
'id_player' => $infos_player['id_player'],
'question' => $infos_questions['question'],
'choix1' => $infos_questions['choix1'],
'choix2' => $infos_questions['choix2'],
'choix3' => $infos_questions['choix3'],
'reponse' => $request->postData('reponse')
))
;
$formBuilder = new \Library\FormBuilder\QuestionsFormBuilder($reponse);
$formBuilder->build();
$form = $formBuilder->form();
if($request->method() == 'POST' && $form->isValid())
{
$reponse_question = $infos_questions['reponse'];
if ($reponse_question == $request->postData('reponse'))
{
$this->managers->getManagerOf('Reponses')->save($reponse);
$this->app->user()->setFlash('Votre réponse a bien été ajoutée ;-)');
$this->app->httpResponse()->redirect('questions-'.$request->getData_next('id').'.html');
}
else
{
$this->managers->getManagerOf('Reponses')->save($reponse);
$this->app->user()->setFlash('Votre réponse est fausse et votre session a expiré');
$this->app->httpResponse()->redirect('/');
}
}
$this->page->addVar('infos_questions', $infos_questions);
$this->page->addVar('form', $form->createView());
$this->page->addVar('title', '1ere question');
}
PlayersManager_PDO.php
protected function add(Player $player)
{
$q = $this->dao->prepare('INSERT INTO user SET player_mail = :player_mail, player_name = :player_name, date = NOW()');
$q->bindValue(':player_name', $player->player_name());
$q->bindValue(':player_mail', $player->player_mail());
$q->execute();
$player->setId($this->dao->lastInsertId());
}
public function getPlayers($id)
{
$q = $this->dao->prepare('SELECT * FROM user WHERE player_name = :id_player');
$q->bindValue(':id_player', $id);
$q->execute();
$q->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\Library\Entities\Player');
return $q->fetch();
}
ReponseManager_PDO.php
protected function add(Reponse $reponse)
{
$q = $this->dao->prepare('INSERT INTO reponses_utilisateurs SET id_session = :id_player, reponse = :reponse, question = :question, numero_question = :numero_question, date = NOW()');
$q->bindValue(':id_player', $reponse->id_player());
$q->bindValue(':numero_question', $reponse->numero_question());
$q->bindValue(':question', $reponse->question());
$q->bindValue(':reponse', $reponse->reponse());
$q->execute();
$reponse->setId($this->dao->lastInsertId());
}
Merci de m'éclairer