-1

此表单正在从 table 获取列名pracownicy。它是动态的,因为这些是新员工开始为我们公司工作时将在他的计算机上使用的应用程序的名称。因为员工使用的应用程序数量正在增加,所以
我有另一种表格用于在表格中添加列。此表格适用于每个部门的主管,用于向我们宣布新员工来工作。我在将数据插入回 mysql 时遇到问题。我怎样才能从这个表单 中发布并放入数据?每次我向数据库添加一些新应用程序时,变量的数量(来自“SHOW COLUMNS”的应用程序)都会发生变化,因此我不能使用静态变量。显示列,???pracownicy

insert into
$query = Values (Implode)

echo '<form action="formularz.php" method="POST">
<table  border=0 class=\"odd gradeX\">
<tr bgcolor=#ffdddd>
<td>Imię i nazwisko:</td>
<td><input type="text" name="imieinazwisko"></td>
</tr>
<tr bgcolor=#ddddff>
<td>Dział:</td>
<td align=center><select name="dzial">
    <option value = "LCL">LCL
    <option value = "NVOCC">NVOCC
    <option value = "ZA">ZA
    <option value = "ZAM">ZAM
    <option value = "ZLR">ZLR
    <option value = "ZR">ZR
    <option value = "ZT">ZT
</select></td>
</tr>
<tr bgcolor=#ffdddd>
<td>Telefon:</td>
<td align=center><select name="telefon">
    <option value = "Stacjonarny">Stacjonarny
    <option value = "Blackberry">Blackbery
    <option value = "Blackberry + Stacjonarny">Blackbery + Stacjonarny
</select></td>
</tr>
<tr bgcolor=#ddddff>
<td>Komputer:</td>
<td align=center><select name="komputer">
    <option value = "Laptop">Laptop
    <option value = "Laptop + Iplus">Laptop + Iplus
    <option value = "Stacjonarny">Stacjonarny
</select></td>
</tr>
<tr bgcolor=#ffdddd>
<td> <link rel="stylesheet" 
href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css" />
<script>
$(function() {
$( "#datepicker" ).datepicker();
});
</script>
</head>
<body>
<p>Data rozpoczęcia pracy: </td><td><input type="text" 
name ="data" id="datepicker"/></p></td>
</tr>
<tr bgcolor=#ddddff>
<td>Oprogramowanie:</td><td></td></tr>


<tr bgcolor=#ddddff>';



$result = mysql_query("SHOW COLUMNS FROM pracownicy") or    die(mysql_error());

        while ($row = mysql_fetch_array($result))
        {
if($row[0] == 'id' || $row[0] == 'imieinazwisko' || $row[0] == 'dzial' 
|| $row[0] == 'telefon' || $row[0] == 'komputer' || $row[0] == oprogramowanie' 
||          $row[0] == 'data')
continue;
        echo '<td bgcolor=#ddddff>'.$row[0].'<br />';


if (stripos($row[0], "uprawnienia") !== false) {
echo '<td bgcolor=#ddddff><p><a class=podpowiedz href=#>   
<input type="text" name="'.$row[0].'">
<span>Uprawnienia typu "stanowisko" lub "jak ktoś"</span></a></p>          
</td></tr>';
        }
        else
        { 
echo '<td bgcolor=#ddddff align=center><select name="'.$row[0].'">
<option value = "Nie">Nie
<option value = "Tak">Tak
</td>
</tr>';
}

}
//echo '</select></form>';
echo '

<tr>
<td><input type="submit" name="zapisz" value="Zapisz"></td>
</tr>
</form>
</table>
</form></center>';`

if(isset($_POST['zapisz'])) 
{
$imieinazwisko = trim($_POST['imieinazwisko']);
$dzial = trim($_POST['dzial']);
$telefon = trim($_POST['telefon']);
$komputer = trim($_POST['komputer']);
$data = trim($_POST['data']);
???  $rowSrray = trim($_POST[$row[0]]);           ---????

??? $query = "INSERT INTO `pracownicy` VALUES (NULL , '$imieinazwisko' , '$dzial',
'$telefon' , '$komputer' , '$data', ".implode(', ', $_POST[$row['0']]).")"; ---???
4

1 回答 1

1

你应该认真考虑改变你的数据库结构。在正在运行的数据库应用程序中动态地将列添加到表中并不是一个好主意。

您的请求并不少见,但在大多数情况下,人们通过一列指定实际应用程序来解决问题,然后在他们输入有关所选应用程序的信息的地方再添加几列(以字符、整数 odr 日期字段的形式) . 这具有保持表结构小且易于管理但同时非常灵活的优点。具有太多(大部分未使用)列的表被认为是丑陋混乱的,因为它们不必要地减慢了 SQL 服务器的速度。

因此,也许以下内容可能会对您有所帮助:

CREATE TABLE applications (apid int auto_increment PRIMARY KEY, apname varchar(64), apdescription nvarchar(1024))

-- "pracownicy" --> users?
CREATE TABLE users (usid int auto_increment PRIMARY KEY, usname varchar(64), usfirstname varchar(64), ustel varchar(64) null, uscomputer varchar(64) null)

-- and then the linking element: app2usr
CREATE TABLE app2usr (auaid int, auuid int, auinfo varchar(64) null, auactive int DEFAULT 1, PRIMARY KEY(auaid,auuid))

现在,您可以根据需要为每个用户拥有尽可能多(或尽可能少)的应用程序,而无需更改表格布局。当弹出新应用程序时,您唯一需要更新的是应用程序表,其中每个应用程序包含一行。

获取一个用户的所有应用程序信息的典型查询可能是

SELECT usname,usfirstname,apname,auinfo 
  FROM users INNER JOIN app2usr ON auuid=usid
             INNER JOIN applications ON apid=auaid 
  WHER auactive>0

当涉及更新或插入新信息时,您将app2usr相应地创建(或删除)记录。我知道这只是一个非常粗略的描述,可以让你走上“正确的道路”......

编辑:

要从表单中收集所有应用程序输入字段,您首先需要找出要分配给用户的应用程序。也许您为此使用了复选框或多个选择元素?

  • 在第一种情况下,您可以扫描 $_POST 数组以查找有效的应用程序名称(针对您应该首先从服务器获取的列表,例如SELECT apid,apname FROM applications)。
  • 在第二种情况下,选择元素会将一组 ID 放入与所选应用程序相对应的 $_POST 数组中 -如果您首先以这种方式设置了选择框。类似的东西<select name="apps" multiple="multiple"><option value="1">Application1</option>...</select>,你Application1从应用程序表中获取值和名称,应该可以解决问题。
于 2013-08-01T12:50:12.507 回答