abstract class BasicTableGateway
{
protected $db;
protected $table;
protected $fields;
protected $primary = 'id';
public function __construct(\PDO $db)
{
$this->db = $db;
}
public function read($id): ?array
{
$stmt =$this->db->prepare("SELECT * FROM `$this->table` WHERE `$this->primary`=?");
$stmt->execute([$id]);
return $stmt->fetch();
}
public function insert($data): int
{
$this->validate($data);
$fields = '`'.implode("`,`", array_keys($data)).'`';
$placeholders = str_repeat('?,', count($data) - 1) . '?';
$sql = "INSERT INTO `$this->table` ($fields) VALUES ($placeholders)";
$this->db->prepare($sql)->execute(array_values($data));
return $this->db->lastInsertId();
}
protected function validate($data)
{
$diff = array_diff(array_keys($data), $this->fields);
if ($diff) {
throw new \InvalidArgumentException("Unknown field(s): ". implode($diff));
}
}
}class UserGateway extends BasicTableGateway {
protected $table = 'gw_users';
protected $fields = ['email', 'password', 'name', 'birthday'];
}
$userGateway = new UserGateway($pdo);
$data = [
'email' => 'foo@bar.com',
'password' => 123,
'name' => 'Fooster',
];
$id = $userGateway->insert($data);
$user = $userGateway->read($id);
echo json_encode($user),PHP_EOL;function pdo($pdo, $sql, $args = NULL)
{
if (!$args)
{
return $pdo->query($sql);
}
$stmt = $pdo->prepare($sql);
$stmt->execute($args);
return $stmt;
}// Create
pdo($pdo, "INSERT INTO users VALUES (null, ?,?,?)", [$name, $email, $password]);
// Read
$user = pdo($pdo, "SELECT * FROM users WHERE email=?", [$email])->fetch();
// Update
pdo($pdo, "UPDATE users SET name=:name WHERE id=:id", ['id'=>$id, 'name'=>$name]);
// Delete
$deleted = pdo($pdo, "DELETE FROM users WHERE id=?", [$id])->rowCount();$password = password_hash($password, PASSWORD_DEFAULT);Где логика?echo "../local/$id.*.$login_*";? Соответствует ли вывод ожиданиям? Если нет - то в чем различия? Что должно вывести и что вывелось?var_dump(glob("../local/$id.*.$login_*")); Соответствует ли вывод ожиданиям? Если нет - то в чем различия? Что должно вывести и что вывелось?$commands = ['hi' => 'hi', 'hello' => 'hello', 'etc' => 'etc'];
$commands['hi']();6a - По поводу HTML сущностей. Хотя в приведённом примере нет ни одного символа, который бы требовал перекодирования в HTML-сущности, тем не менее, при выводе любого текста в HTML, эти сущности действительно должны быть перекодированы в обязательном порядке, всегда, в 100% случаев. Причем с помощью не какой-то левой addslashes, а функции, которая действительно это делает, htmlspecialchars($var_zametka)echo json_encode($var_zametka)<tr>
<td><input type="text" name="name[$mas['id']]" value="'.htmlspecialchars($mas['name']).'"></td>
<td><input type="text" name="cena_no_dost[$mas['id']]" value="'.htmlspecialchars($mas['cena_no_dost']).'"></td>
</tr>$stmt = mysqli_prepare($connect, "INSERT INTO `bd` (`id`, `name`, `tel`) VALUES (NULL, ?, ?)");
mysqli_stmt_execute($stmt, [$_POST['name'], $_POST['tel']]);function prepared_query($mysqli, $sql, $params, $types = "")
{
$types = $types ?: str_repeat("s", count($params));
$stmt = $mysqli->prepare($sql);
$stmt->bind_param($types, ...$params);
$stmt->execute();
return $stmt;
}$sql = "INSERT INTO `bd` (`name`, `tel`) VALUES (?,?)";
prepared_query($connect, $sql, [$_POST['name'], $_POST['tel']]);