Я пытаюсь сохранить данные из динамической формы в базе данных. Я застрял, я не могу понять, как правильно сохранить эти данные. У меня есть следующие файлы.
config.php
<?php
class DatabaseConnection{
public $pdo;
public function __construct(){
$user = 'user';
$pass = 'pass';
$dsn = 'mysql:charset=utf8;database;host=localhost;charset=utf8';
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
);
$this->pdo = new PDO($dsn, 'editor17_admin', 'Eciim_DB_17', $opt);
}
}
?>
functions.php
class test{
function __construct($db){
$this->db= $db;
}
public function savedata($field1,$field2,$field3$,field4,$field5){
$query = $this->db->prepare("INSERT INTO tabletest(fone,ftwo,fthree,ffour,ffive) VALUES (?,?,?,?,?)");
$query->execute(array($field1,$field2,$field3$,field4,$field5));
return true;
}
public function register($ex1,$ex2,$ex3,$ex4){
$query = $this->db->prepare("INSERT INTO userdata(name,password,age,email) VALUES (?,?,?,?)");
$query->execute(array($ex1,$ex2,$ex3,$ex4));
return true;
}
public function login($ex1,$ex2){
$query = $this->db->prepare("SELECT id,name FROM userdata WHERE name=? AND pass=?");
$query->execute(array($ex1,$ex2));
$userdata = $query->fetch();
$num=$query->rowCount();
if($num==1){
session_start();
$_SESSION['login']=true;
$_SESSION['uid']=$data['id'];
$_SESSION['uname']=$data['name'];
$_SESSION['login_msg'] = "Welcome!";
return true;
}else{
return false;
}
}
savedata.php
<?php
session_start();
require_once "functions.php";
$db = new DatabaseConnection();
$user = new test($db->pdo);
$uid = $_SESSION['uid'];
$username = $_SESSION['uname'];
$nombre = $_SESSION['name'];
if(!$user->getSession()){
header('Location: login.php');
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(e){
var html= '<p /><table><tr><td><input type="text" name="field1[]" id="field1child" placeholder="Year"></td><td><input type="text" name="field2[]" id="field2child" placeholder="Month"></td><td><input type="text" name="field3[]" id="field3child" placeholder="Name"></td> <td><input type="text" name="field4[]" id="field4child" placeholder="Surname"></td><td><input type="text" name="field5[]" id="field5child" placeholder="Nickname"></td></tr></table>';
$("#add").click(function(e){
$("#container").append(html);
});
});
</script>
</head>
<body>
<div>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$field1 = $_POST['field1'];
$field2 = $_POST['field2'];
$field3 = $_POST['field3'];
$field4 = $_POST['field4'];
$field5 = $_POST['field5'];$save = $user->savedata($field1,$field2,$field3,$field4,$field5);
if($save){
echo "Data saved succesfully";
}
}
?>
<form action="" method="post" name="reg">
<div id="container">
<table>
<tr><td><input type="text" name="field1[]" id="field1" placeholder="Year"></td>
<td>
<td><input type="text" name="field2[]" id="field2" placeholder="Month"></td>
<td><input type="text" name="field3[]" id="filed3" placeholder="Name"></td>
<td><input type="text" name="field4[]" id="field4" placeholder="Surname"></td>
<td><input type="text" name="field5[]" id="field5" placeholder="Nickname"></td>
</tr>
</table>
</div>
<a href="#" id="add"> More inputs </a>
<input type="submit" name="submit" value="Send data">
</form>
<a href="logout.php">Disconnect</a>
</div>
</body>
</html>
Я могу зарегистрировать новых пользователей и войти в систему правильно.
Я знаю, что мне нужен foreach для сохранения данных из динамической формы, проблема в том, что я не знаю, как правильно их написать и куда их поместить.
Вы должны прочитать это руководство «Как мне создать массивы в HTML?»
В основном, если у вас есть HTML-форма без массива, вы можете читать данные напрямую следующим образом:
<form method="POST">
<input type="hidden" name="foo" value="bar" />
</form>
// var_dump($_POST);
// output: array(1) { ["foo"]=> string(3) "bar" }
Однако, если форма отправляется в виде массива следующим образом, вам необходимо использовать foreach для анализа данных:
<form method="POST">
<input type="hidden" name="foo[]" value="bar" />
<input type="hidden" name="foo[]" value="bar2" />
</form>
// var_dump($_POST);
// output: array(1) { ["foo"]=> array(2) { [0]=> string(3) "bar" [1]=> string(4) "bar2" } }
// foreach ($_POST['foo'] as $value) { ... }
Других решений пока нет …