2012-06-20 16 views
6

これは私の最初のウェブサイトで、サーバー側の技術を利用しています。 それはまた、MYSQLに沿って働いているPHPに私の最初の掘り下げです。 私は働いていて、勉強しています。PHP - チェックボックスのフォームからMYSQLにデータを挿入する

私は小規模なウエディングドレスビジネスのための製品エントリーのデータベースのための基本的な管理ページを作成しました。

私は、管理者が新しいエントリをデータベースにアップロードするために使用できるフォームの機能に取り組んできました。

これらのエントリのいくつかが含まれます:私は悩み複数のチェックからデータを取得するに実行した

ドレス名[テキスト入力]

カラー可用性 [チェックボックスをオン]

をボックスをHTMLフォームからデータベースに追加します。チェックボックスで

選択肢は(はい/いいえ - 1/0)ブール値を表すべきではありません

ここではフォームの構造です:

<form action="inventory_list.php" enctype="multipart/form-data" name="myForm" id="myform" method="post"> 
    <table width="90%" border="0" cellspacing="0" cellpadding="6"> 
    <tr> 
    <td width="20%" align="right">Dress Name</td> 

    <td width="80%"><label> 
    <input name="Dress_name" type="text" id="Dress_name" size="64" /> 
    </label> 
    </td> 
    </tr> 

    <tr> 
    <td align="right">Collections</td> 
    <td> 
    <label> 
     <select name="collections" id="collections"> 
      <option value="other">Other</option> 
      <option value="hermione">Hermione</option> 
      <option value="jora">Jora</option> 
      <option value="manon">Manon</option> 
     </select> 
    </label></td> 
    </tr> 
    <tr> 
    <td align="right">Available Sizes</td> 
    <td> 
     <input type="checkbox" name="sizes[]" value="1" /> Sizes 2-6<br /> 
     <input type="checkbox" name="sizes[]" value="1" /> Sizes 6-10 <br /> 
     <input type="checkbox" name="sizes[]" value="1" /> Sizes 10-14<br /> 
     <input type="checkbox" name="sizes[]" value="1" /> Sizes 14-18 <br /> 
     <input type="checkbox" name="sizes[]" value="1" /> Sizes 18-22<br /> 
     <input type="checkbox" name="sizes[]" value="1" /> Sizes 22-26 <br /> 

    </td> 
    </tr> 
    <tr> 
    <td align="right">Dress Colours</td> 
    <td> 
     <input type="checkbox" name="colours[]" value="1" /> Pinks/Reds <br /> 
     <input type="checkbox" name="colours[]" value="1" /> Blues/Greens <br /> 
     <input type="checkbox" name="colours[]" value="1" /> Violet/Purple<br /> 
     <input type="checkbox" name="colours[]" value="1" /> Yellow/Orange/Brown/Gold <br /> 
     <input type="checkbox" name="colours[]" value="1" /> Black/White<br /> 

    </td> 
    </tr> 
    <tr> 
    <td align="right">Product Image</td> 
    <td><label> 
     <input type="file" name="fileField" id="fileField" /> 
    </label></td> 
    </tr>  
    <tr> 
    <td>&nbsp;</td> 
    <td><label> 
     <input type="submit" name="button" id="button" value="Add This Item Now" /> 
    </label></td> 
    </tr> 
</table> 
</form> 

そして、ここでは、私が構築したPHPでデータベースにデータを提出するフォームを処理します。

<?php 
if (isset($_POST['Dress_name'])) { 

$dress_name = mysql_real_escape_string($_POST['Dress_name']); 
$collections = mysql_real_escape_string($_POST['collections']); 
$sizesArray = $_POST['sizes']; 
$coloursArray = $_POST['colours']; 

foreach ($sizesArray as $key => $value) 
{ 
    echo "Key = $key || Value = $value<br />"; 
} 

foreach ($coloursArray as $ckey => $cvalue) 
{ 
    echo "Key = $ckey || Value = $cvalue<br />"; 
} 

//See if that product name is an identical match to another product in the system 
$sql = mysql_query("SELECT ID FROM names WHERE Dress='$dress_name' LIMIT 1"); 
$productMatch = mysql_num_rows($sql); // count the output amount 
if ($productMatch > 0) { 
    echo 'Sorry you tried to place a duplicate "Product Name" into the system, <a href="inventory_list.php">click here</a>'; 
    exit(); 
} 


//Add this product into the database now 
$sql = mysql_query("INSERT INTO names (Dress) 
    VALUES('$dress_name')") or die (mysql_error()); 
$pid = mysql_insert_id(); 



//Place image in the folder 
$newname = "$pid.jpg"; 
move_uploaded_file($_FILES['fileField']['tmp_name'], "../inventory_images/$newname"); 
header("location: inventory_list.php"); 
exit(); 
} 
?> 

ご覧のとおり、データを配列に入れています。そして今、私はちょっとしたレンガの壁に当たっています。私はどこでも理にかなった答えを見つけられないようです。

ブール値をデータベーステーブルの正しい列に取得するにはどうすればよいですか?

あなたの時間を感謝してください!

+0

HTMLフォームのチェックボックスはすべて同じ値を持っています。適切なサイズ? – andrewsi

+0

MySQLの[論理型](http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html)は0と1のように見えます。値がtrueの場合は、列に1を格納します。値がfalseの場合(またはより単純に真でない場合)は、ゼロを格納します。 – buley

+0

実際、MySQLがブーリアンを処理する方法のために、TINYINTを使用する方がはるかに優れています。 boolean型は奇妙なエラーを引き起こす可能性があります。単に上向きまたは下向きのフラグが必要な場合は、長さ1の整数を使用してください。 –

答えて

8

最初に知っておくべきことは、HTMLチェックボックスがチェックされていると結果を返し、チェックを外すと何も返されないことです。

//Note that 'names' and 'collections are overloaded 
    //words and should be avoided 
table BRANDS 
    id INT AUTOINCREMENT 
    collectionname VARCHAR 

table SIZES 
    id INT AUTOINCREMENT 
    sizecategory VARCHAR //ie 'Sizes 18-22' 

table COLOURS 
    id INT AUTOINCREMENT 
    colourname VARCHAR 

table INVENTORY 
    id INT AUTOINCREMENT 
    brandid INT FOREIGN KEY (BRAND) 
    imageurl VARCHAR 

table INVENTORY_SIZES 
    inventoryid INT FOREIGN KEY 
    sizeid FOREIGN KEY 

table INVENTORY_COLOURS 
    inventoryid INT FOREIGN KEY 
    colourid FOREIGN KEY 

は、COLOURSSIZESテーブルがあることをBRAND必要がありますあなたの:

<td align="right">Available Sizes</td> 
<td> 
    <input type="checkbox" name="sizes[]" value="1" /> Sizes 2-6<br /> 
    <input type="checkbox" name="sizes[]" value="2" /> Sizes 6-10 <br /> 
    <input type="checkbox" name="sizes[]" value="3" /> Sizes 10-14<br /> 
    <input type="checkbox" name="sizes[]" value="4" /> Sizes 14-18 <br /> 
    <input type="checkbox" name="sizes[]" value="5" /> Sizes 18-22<br /> 
    <input type="checkbox" name="sizes[]" value="6" /> Sizes 22-26 <br /> 
</td> 

A完全に正規化されたデータベース・スキーマは次のようになります。したがって、あなたの値の増分を持っているあなたのhtmlで重要です理論上、これらのテーブルのデータを使用してページを動的に読み込むことができます。これらのテーブルの各行のIDは、チェックボックス配列の値として終了するはずです。

//get your inputs 
$query_values = array(); 
$query_values[':brandid'] = $dress_name = $_POST['Dress_name'];//note that you should change the value in your options here to the unique ids in your database. 
$query_values[':sizeid'] = getSize($_POST[]); 
$query_values[':colourid'] = getColour($_POST[]); 
$query_values[':quantity'] = $_POST['quantity']; 
$query_values[':imageurl'] = $_POST['imageurl']; 


//Prepare and execute your sql 
    //Note that PDO will handle escaping problematic inputs. 
$sql = "INSERT INTO INVENTORY ('brandid', 'imageurl') VALUES (:brandid, :sizeid, :colourid, :quantity, :imageurl)"; 
executeInsert($sql, $query_values); 
$inventoryid = mysql_insert_id(); 

saveSizes($_POST['sizes'], $inventoryid); 
saveColours($_POST['colours'], $inventoryid); 

function saveSizes($size_array, $inventoryid) { 
    $sql = "INSERT INTO INVENTORY_SIZES ('inventoryid', 'sizeid') VALUES (:inventoryid, :sizeid)"; 
    foreach ($size_array as $sizeid) { 
    $query_values = array(); 
    $query_values[':inventoryid'] = $inventoryid; 
    $query_values[':sizeid'] = $sizeid; 
    executeInsert($sql, $query_values); 
    } 
} 

function saveColours($colour_array) { 
    $sql = "INSERT INTO INVENTORY_COLOURS ('inventoryid', 'colourid') VALUES (:inventoryid, :colourid)"; 
    foreach ($size_array as $sizeid) { 
    $query_values = array(); 
    $query_values[':inventoryid'] = $inventoryid; 
    $query_values[':colourid'] = $colourid; 
    executeInsert($sql, $query_values); 
    } 
} 

function executeInsert($sql, $query_values) { 
    $query = $conn->prepare($sql); 
    $query->execute($query_values); 
} 

セキュリティ上の問題を防ぐためにPHP PDOを使用してください。私はかなりそのうちのいくつかが抽象化されていることが分かりました/清掃されたが、これは仕事をする必要があります。 (私はこの寒さをテストしていないので、私はかなりバグがあると確信していますが)。

0

名前がデータベースに既に存在するかどうかを確認する 'if'の後の 'else'ステートメントにinsertステートメントを配置する必要があります。

データベースに「チェックボックス」値を入れるために実行している文がないので、正確に何をしようとしているのかわかりません。 sizes配列を出力として管理者がエコーして、このフォームを送信した後に見ることができますが、データベースに入れないでください。

データベース構造(列名)を共有できるかどうかが役立ちます。あなたはサイズ2-5 &他のカテゴリのための任意の列を持っていない場合は、それらの&は、次のおINSERT文を変更、追加:

INSERT INTO names (Dress,Size2to5,Size5to10,Size10to15,Size15to20) VALUES('$dress_name','$size[0]','$size[1]','size[2]','size[3]')

は、この情報がお役に立てば幸いです。これがうまくいくかどうか私たちにお知らせください。

関連する問題