注册表单-复选框插入到数据库中的新行上


Registration Form - Checkbox Is Inserted on new rows in Database

我正在练习PHP编程。我已经做了一份登记表格,上面有

2文本区(姓名)2个单选按钮(用于性别选择-尚未开始工作)8复选框(主题和爱好各4个)

我有一个名为person的数据库表,其中包含

5列(姓、名、性别、主题、爱好)

正在从表单中提取数据,但是每个复选框都插入到名称下面的下一行。

例如大卫贝克汉姆主题php asp和嗜好电视阅读而不是出现在同一行和对记录的名称,他们出现在下一行。

由于这是我第一次来,我的问题是

Q1:-这是如何记录这样一个形式应该出现?-如果不是,那么问题在哪里/是什么?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>
$gender=$_POST['gender'];
$chkhobby=implode(',',$_POST['chkhobby']);
<tr>
                        <th>Gender</th>
                        <td>
                            Male<input type="radio" name="gender" checked="checked" value="1">
                            Female<input type="radio" name="gender" checked="checked" value="0">
                        </td>
                </tr>
                <tr>
                        <th>Hobbies</th>
                        <td>
                            read<input id="check_1" type="checkbox" name="chkhobby[]" value="read">
                            write<input id="check_2" type="checkbox" name="chkhobby[]" value="write">
                            play<input id="check_4" type="checkbox" name="chkhobby[]" value="play"> 
                        </td>
                </tr>

表的结构是怎样的?我需要看到的结构,能够给你一个实际的查询,但它看起来像我你插入每个值到数据库作为一个单独的查询的一部分(这将始终导致单独的行被插入数据库)。如果要在表的一行中存储人名、姓氏、爱好和运动等,则需要在一个查询中执行查询并插入值,而不是在单独的查询中。所以如果你现在在做:

"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安排标签和复选框,如你所愿(浮动等)。为了使复选框正确显示并与标签垂直对齐,我通常使用表格。这不是理想的(因为这不是表的预期用途),但它可以解决跨浏览器的问题(以及旧浏览器的问题),在一些浏览器中这些项目的垂直对齐,以及保持标签与复选框本身在同一行。例如:

<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扩展)