Я делаю заявку в 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>
/**
* 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);