Вставка в базу данных из формы (Silex, postgreSQL, PHP)

0

Я делаю заявку в Heroku. В конечном итоге я хочу сделать страницу регистрации пользователя, но мне сложно разобраться в синтаксисе, и поэтому на данный момент я просто хочу, чтобы страница, в которой перечислены все имена в базе данных (Postgres), имеет открытое текстовое поле и после нажатия кнопка "Зарегистрироваться" добавляет (подготовленное!) имя в базу данных и обновляет страницу, чтобы теперь отображалось имя. Мне трудно понять, как это сделать. Я могу отображать имена, но не могу понять, как добавить их из текстового поля

В моем коде index.php:

$app->get('/db/', function() use($app) {
  $st = $app['pdo']->prepare("SELECT * FROM users  ");
  $st->execute();

  $usernames = array();
  while ($row = $st->fetch(PDO::FETCH_ASSOC)) {
    $app['monolog']->addDebug('Row ' . $row['username']);
    $usernames[] = $row;
  }
/*
{ THIS IS WHERE I WANT TO READ IN THE NEW NAME BUT I'M NOT SURE HOW
}
*/


  $st = $app['pdo']->prepare("INSERT INTO users ( username)
      VALUES ('[PUT THE NEW NAME HERE]')");
  $st->execute();


  return $app['twig']->render('database.twig', array(
    'names' => $usernames
  ));

});



$app->get('/twig/{name}', function($username) use($app) {
  return $app['twig']->render('index.twig', array(
    'username' => $username,
  ));
});


$app->run();

?>

И вот мой файл database.twig:

Получили эти строки из базы данных da:

<ul>
{% for n in names %}
  <li> {{ n.username}} at {{ n.email }}</li>
{% else %}
  <li>Nameless!</li>
{% endfor %}
</ul>

<form action="#" method="post">

 <fieldset>


<div class="form-group">

<input autofocus class="form-control" name="username" placeholder="Username" type="text"/>

</div>


<div class="form-group">

<button type="submit" class="btn btn-default">Register</button>

</div>

</fieldset>

</form>

<div>
    or <a href="login.php">log in</a> for an account
</div>
Теги:
heroku

1 ответ

0
/**
  * The best option is to use HttpFoundation to catch parameters either   
  * via POST or GET. 
  * So, if you're using httpFoundation (the default behaviour with 
  * Silex) change the header like:
  */
$app->('/db/', function() use($app, Request $request){
    // rest of the code inside
});

/** for catching the new username with HttpFoundation is as easy as   
  * asking for the all or as in this case for just one field:
  */
$username = $request->request->get('username');

/**
  * Once you have the username, you can insert it into the query, but 
  * it is a nice idea to
  * bind it just to avoid sql injection, between modify
  */
$stmt = $app['db']->prepare('INSERT INTO users (?)');
$stmt->bindValue(1, $username, PDO::PARAM_INT);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню