0

私はPHPプログラミングを練習しています。登録フォームを作成しました

2 テキストエリア (姓名用) 2 ラジオボタン (性別選択用 - まだ作業を開始していません) 8 チェックボックス (件名と趣味用にそれぞれ 4 つ)

私は持っている人の名前でデータベーステーブルを持っています

5列(名、姓、性別、件名、趣味)

フォームからのデータがフェッチされていますが、各チェック ボックスは名前の下の次の行に挿入されています。

たとえば、David Bekham の件名 php asp と趣味のテレビの読書は、同じ行に表示される代わりに、レコードの名前に対して、次の行に表示されます。

初めてなので質問です

Q1 :- そのようなフォームのレコードは、どのように表示されるはずですか? Q2 :- そうでない場合、どこに/何が問題なのですか? Q3 :- ラジオ ボタンのコードを教えていただくか、それを学ぶための簡単なリンクを教えてください。

HTMLフォーム

<!DOCTYPE>
<html>
<head>

<title>Insert Data</title>
</head>

<body>
<h1> Insert to Register </h1>


<form name="form1" method="post" action="insert.php" >
<fieldset>
<legend> Registration Form </legend> 

FirstName <input type="text" name="a" value="Enter firstname"/>
<br/><br/>
LastName <input type="text" name="b" value="Enter lastname"/>
<br/><br/>



<h3> Gender selection </h3>
Male <input type="radio" name="gender"/> female <input type="radio" name="gender"/>
<br/><br/>


<h3> Subject selection </h3>
<input type="checkbox" name="sb[]" value="php"/> PHP 
<br/>
<input type="checkbox" name="sb[]" value="asp"/> ASP.NET 
<br/>
<input type="checkbox" name="sb[]" value="html"/> HTML 
<br/>
<input type="checkbox" name="sb[]" value="css"/> CSS 
<br/><br/>


<h3> Hobbies selection </h3>
<input type="checkbox" name="hb[]" value="tv"/> Tv 
<br/>
<input type="checkbox" name="hb[]" value="pc"/> Computer  
<br/>
<input type="checkbox" name="hb[]" value="book"/> Reading books 
<br/>
<input type="checkbox"  name="hb[]" value="games"/> Games 
<br/><br/>
<input type="submit" name="submit" value="Submit"/>

</fieldset>

</form>

</body>
</html>

phpファイル

<!DOCTYPE>
<html>
<head>

<title>Processing_Insert_main</title>
</head>

<body>

<?php

// =============== code for Connection_SQLi ==============================      

$con=mysqli_connect("localhost","root","","Ismat_db");
//check connection
if(mysqli_connect_errno())
{
echo "Cannot connect to mysqli:" . mysqli_connect_error();
}

// =============== code for Submit_input type ================================

if(isset($_POST['submit']))
{

// ========== code for Name_TextArea ===============        

$sqlta = "INSERT INTO persons(FirstName,LastName)VALUES ('$_POST[a]','$_POST[b]')";

if (!mysqli_query($con,$sqlta))
  {
  die('Error: ' . mysqli_error($con));
  }
echo "record added for name<br/>";


  // ====== code for subject_checkbox ================  
$s = $_POST['sb'];
$how_many=count($s);

for($i=0;$i<$how_many;$i++)
{
    echo "You Selected: " .$s[$i]."<br/>";

    if(!mysqli_query($con,"INSERT INTO persons(Subject) VALUES('$s[$i]')"))
    {
        echo "Not Recorded".mysqli_error($con);
    }
    echo "Record Added for subject<br/>";
}

   // ============ Code for Hobbies_checkbox ========================   
$h = $_POST['hb'];
$how_many=count($h);

for($i=0;$i<$how_many;$i++)
{
    echo "You Selected: " .$h[$i]."<br/>";

    if(!mysqli_query($con,"INSERT INTO persons(Hobbies) VALUES('$h[$i]')"))
    {
        echo "Not Recorded".mysqli_error($con);
    }
    echo "Record Added for Hobby<br/>";
}

     //============================================================

   echo '<br/>'.'<a href="insert_main.html">'. "Back" . '</a>'; 

   }

   ?>
   </body>
   </html>
4

2 に答える 2

-1

テーブルはどのように構成されていますか? 実際のクエリを提供できるようにするには、構造を確認する必要がありますが、各値を個別のクエリの一部としてデータベースに挿入しているように見えます (常に個別の行がデータベースに挿入されます)。 . 人物の名、姓、趣味、スポーツなどをテーブルの 1 つの行に格納する場合は、クエリを実行し、個別のクエリではなく 1 つのクエリに値を挿入する必要があります。したがって、現在行っている場合:

"INSERT INTO persons(FistName, LastName)VALUES ('$_POST[a]','$_POST[b]')";
"INSERT INTO persons(Subject) VALUES('$s[$i]')"
"INSERT INTO persons(Hobbies) VALUES('$h[$i]')"

あなたはむしろするべきです:

"INSERT INTO persons(FistName, LastName, Subject, Hobbies) VALUES('$_POST[a]','$_POST[b]','$s[$i]','$h[$i]')"

また、正しい HTML 標準への準拠、読みやすさ、およびテキスト リーダーを使用するユーザーのアクセシビリティなどのために、各入力のテキストをラベルとして挿入する必要があります。だから私が意味するのは、代わりに:

<input type="checkbox" name="sb[]" value="php"/> PHP 
<br/>
<input type="checkbox" name="sb[]" value="asp"/> ASP.NET

あなたが使用する必要があります:

<input type="checkbox" name="sb[]" id="checkbox_php" value="php"/><label for="checkbox_php">PHP</label> 
<br/>
<input type="checkbox" name="sb[]" id="checkbox_asp" value="asp"/><label for="checkbox_asp">ASP.NET</label>

次に、CSS を使用して、必要に応じてラベルとチェックボックスを配置できます (float など)。チェックボックスが正しく表示され、ラベルと垂直方向に整列されるようにするには、通常、テーブルを使用します。これは理想的ではありませんが (テーブルの意図された使用法ではないため)、一部のブラウザーでこれらのアイテムの垂直方向の配置に関するクロスブラウザーの問題 (および古いブラウザーの問題) を回避し、チェックボックスと同じ行にラベルを保持します。自体。例えば:

<table>
<tr>
<td><input type="checkbox" name="sb[]" id="checkbox_php" value="php"/></td>
<td><label for="checkbox_php">PHP</label></td>
</tr>
</table>

余談ですが、あなたのコードは SQL インジェクションに対して非常に脆弱です。mysql_real_escape_stringまたはmysqli_real_escape_string (MySQLi 拡張機能を使用している場合)について読む必要があります。

于 2013-06-15T22:50:57.727 に答える