-1

このフォームは table から列名を取得していますpracownicy。これらは、新入社員が当社で働き始めたときにコンピューターで使用するアプリケーションの名前であるため、動的です。従業員が使用しているアプリケーションの数が増えているため
、テーブルに列を追加するための別のフォームがあります。このフォームは、各部署の上司が新入社員の入社をお知らせするためのものです。mysql へのデータの挿入に問題があります。このフォームから POST してデータに入れるにはどうすればよいですか? 変数 (「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

データベース構造の変更について真剣に検討する必要があります。実行中のデータベース アプリケーションのテーブルに列を動的に追加することはお勧めできません。

あなたの要求は珍しいものではありませんが、ほとんどの場合、実際のアプリケーションを指定する 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))

これで、テーブル レイアウトを変更することなく、ユーザーごとに好きな数 (または少数) のアプリケーションを持つことができます。新しいアプリケーションがポップアップしたときに更新する必要があるのは、アプリケーションごとに 1 行を含むアプリケーション テーブルだけです。

1 人のユーザーのすべてのアプリケーション情報を取得するための一般的なクエリは、次のようになります。

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)。
  • 2 番目のケースでは、select 要素は、選択したアプリケーションに対応する ID の配列を $_POST 配列に入れます -最初にそのように選択ボックスを設定した場合。<select name="apps" multiple="multiple"><option value="1">Application1</option>...</select>アプリケーションテーブルから値と名前を取得する のようなものでうまくいくApplication1はずです。
于 2013-08-01T12:50:12.507 に答える