我在php中有以下表单,但我想进行insert.php
操作,将所有内容插入MySQL中的新行...我不知道该怎么做,因为有几个字段集,使用一个简单的表单很容易,但不适用于每个$_cliente
和$_servicio
代码更新
<?php
require("database.class.php");
//database server
define('DB_SERVER', "localhost");
//database usuario
define('DB_USER', "root");
//database password
define('DB_PASS', "root");
define('DB_DATABASE', "nivelservicio");
$db = new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
$db->connect();
$sql = "SELECT * FROM servicios";
$_row = $db->query($sql);
$_servicios = array();
while($row = $db->fetch_array($_row)) {
$_servicios[$row['id']] = $row['nombre'];
}
$sql = "SELECT * FROM clientes";
$_row = $db->query($sql);
$_clientes = array();
while($row = $db->fetch_array($_row)) {
$_clientes[$row['id']] = $row['nombre'];
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<style>
body{
margin:0;
border:0;
}
#formfieldset{
width: 350px;
font-family: helvetica, sans-serif, verdana;
font-size:12px;
}
h1 {
font-size:36px;
font-family: Georgia;
font-style: italic;
border-bottom:1px solid #000;
}
h2 {
font-size:18px;
font-color:#1E1E1E;
}
</style>
</head>
<body>
<form action="insert.php" method="post">
<div id="formfieldset">
<?php foreach ($_clientes as $key_cliente => $cliente) :
switch ($cliente) {
case "Produban":
$_servicios = array_diff($_servicios, array(
"GESTI",
"VULCANO"
));
break;
} ?>
<h1><?php echo $cliente ?></h1>
<input type='hidden' name='cliente_id[<?php echo $key_cliente ?>' value='<?php echo $key_cliente ?>'>
<?php foreach($_servicios as $key_servicio => $servicio) : ?>
<h2><?php echo $servicio ?></h2>
<input type="hidden" name="servicio_id[<?php echo $key_cliente ?>][<?php echo $key_servicio ?>]" value="<?php echo $key_servicio; ?>">
<label>Estado</label>
<select name="estado[<?php echo $key_cliente ?>][<?php echo $key_servicio ?>">
<option value="OK">OK</option>
<option value="KO">KO</option>
</select>
<label>Texto</label><input type="text" name="texto">
<?php endforeach; ?>
<?php endforeach; ?>
<br>
<input type="submit" name="insertar" value="Insertar">
</div>
</form>
</body>
</html>
<?php
$db->close();
?>
insert.php
if(isset($_POST['insertar'])){
var_dump($_POST);
foreach ($clientes as $key_cliente => $cliente) {
foreach ($servicios as $key_servicio => $servicio) {
//echo $_POST['estado'][$key_cliente][$key_servicio] . '<br />';
$sql = "INSERT INTO datos
(servicio_id, cliente_id, estado, texto, fecha)
VALUES
('".$_POST['servicio_id'][$key_cliente][$key_servicio]."',
'".$_POST['cliente_id'][$key_cliente][$key_servicio]."',
'".$_POST['estado'][$key_cliente][$key_servicio]."',
'".$_POST['texto'][$key_cliente][$key_servicio]."',
'".date('d-m-Y')."'
)";
$db->query($sql);
}
}
echo "Valores insertados";
}
答案 0 :(得分:3)
您需要将输入字段的名称更改为以下数组:
<select name="estado[]">
然后在你的PHP中你可以这样做:
<?php
foreach ($_POST['estatdo'] as $key => $val) {
echo $_POST['estatdo'][$key] . ' - ' echo $_POST['texto'][$key] . ' - ' echo $_POST['servicio_id'][$key] . '<br />';
}
以下是一个完整的例子:
<form action="insert.php" method="post">
<div id="formfieldset">
<?php foreach ($_clientes as $key_cliente => $cliente) :
switch ($cliente) {
case "Produban":
$_servicios = array_diff($_servicios, array(
"GESTI",
"VULCANO"
));
break;
} ?>
<h1><?php echo $cliente ?></h1>
<input type='hidden' name='cliente_id[<?php echo $key_cliente ?>]' value='<?php echo $key_cliente ?>'>
<?php foreach($_servicios as $key_servicio => $servicio) : ?>
<h2><?php echo $servicio ?></h2>
<input type="hidden" name="servicio_id[<?php echo $key_cliente ?>][<?php echo $key_servicio ?>]" value="<?php echo $key_servicio; ?>">
<label>Estado</label>
<select name="estado[<?php echo $key_cliente ?>][<?php echo $key_servicio ?>]">
<option value="OK">OK</option>
<option value="KO">KO</option>
</select>
<label>Texto</label><input type="text" name="texto">
<?php endforeach; ?>
<?php endforeach; ?>
<br>
<input type="submit" name="insertar" value="Insertar">
</div>
</form>
因此,在此示例中,我们有一个双嵌套数组,而不是estado[]
我们有estado[][]
。而不是使用[],它使一个数组具有连续的数字键(即0,1,2,3),我已将其更改为使用客户端ID和服务ID,如下所示:
<select name="estado[<?php echo $key_cliente ?>][<?php echo $key_servicio ?>]>
然后在你的php中你可以像这样循环它:
foreach ($clientes as $key_cliente => $cliente) {
foreach ($servicios as $key_servicio => $servicio) {
echo $_POST['estado'][$key_cliente][$key_servicio] . '<br />;
}
}