【问题标题】:PHP form text field to mysql based on selected checkbox [closed]基于所选复选框的PHP表单文本字段到mysql [关闭]
【发布时间】:2017-07-31 18:11:35
【问题描述】:

我正在尝试创建注册表单,它有多个文本字段(姓名、电子邮件、电话、..)并有多个复选框选项。

我还在 mysql 数据库中创建了多个表,每个复选框一个。
我的目标是将文本字段中的值存储到选定的复选框数据表中。

我的问题是如何创建 if 语句来查看选中了哪个复选框,因此它将文本字段的输入存储到该表中

input.php

<html>
<head>

</head>
<script type="text/javascript">
function toggle(source) {
  checkboxes = document.getElementsByName('chk1[]');
  for(var i=0, n=checkboxes.length;i<n;i++) {
    checkboxes[i].checked = source.checked;
  }
}
</script>
<body>
<h2><font color="white">Welcome to Cars and Coffee</h2>
<p>Sign up to receive if you are interested in 
    receiving information from Cars and Coffee.</p>
<p>Please select at least one option</p>
<form name="newEntry" action="page.php" method="POST">
name<input type=text length=60 size=30 name="name"><br>
email<input type=text length=60 size=30 name="email"><br>
car<input type=text length=60 size=30 name="car"><br>
phone<input type=text length=60 size=30 name="phone"><br>
<input type="submit" name="submit" email="add" car="add" phone="add" >

</form>

<form action="page.php" method="POST">

<input type="checkbox" name="chk[]" value="cars_coffee">Cars  & Coffee<br>
<input type="checkbox" name="chk[]" value="kentucky">Kentucky Derby Party<br>
<input type="checkbox" name="chk[]" value="july">July 4th<br>
<input type="checkbox" name="chk[]" value="labor">Labor Day<br>
<input type="checkbox" name="chk[]" value="new_year">New Years Day<br>
<input type="checkbox" name="chk[]" value="all" onClick="toggle(this)">Select All<br>

</form>
<?php
mysql_connect("localhost", "db", "pw");
mysql_select_db("db");
$qh = mysql_query("select * from  all_emails order by id desc");
if (@mysql_num_rows($qh)) { /* the if(@...) syntax makes PHP supress any
warnings that might come out of that function. */
        /* mysql_fetch_object(query handle);
         * returns an object whose contents are that of one rotw in the
database. */
        while ($obj = mysql_fetch_object($qh)) {
                echo "
<p>
$obj->email<br>
$obj->name<br>
$obj->car<br>
$obj->phone<br>
<p>
<hr>
";
       }
}
?>

</body>
</html>

page.php

<?php
mysql_connect("localhost", "db", "pw");
mysql_select_db("db");
mysql_query("insert into all_emails (name, email, car, phone) values ('".$_POST['name']."','".$_POST['email']."','".$_POST['car']."', '".$_POST['phone']."' )");
?>
<html>
<head>
<meta http-equiv=refresh content="0; URL=./input.php">
</head>
</html>

这是我正在尝试的 if 语句。

<?php
mysql_connect("localhost", "db", "pw");
mysql_select_db("db");

if( isset($_POST["cars_coffee"] ) ) {
    $sql = "INSERT INTO cars_and_coffee (name, email, car, phone) values ('".$_POST['name']."','".$_POST['email']."','".$_POST['car']‌​."', '".$_POST['phone']."' )");
    mysql_query($sql) or die(mysql_error());
    }
    echo "Record  is inserted";
}

?>

【问题讨论】:

  • 我没有看到提出的实际问题或需要解决的问题?
  • “我还在 mysql 数据库中创建了多个表,每个复选框一个。” - 认真吗?你 100% 确定要这样做吗?你最好重新考虑一下,认真地
  • @Zak 我刚刚编辑过,基本上我正在寻找如何使用 if 语句来检查选中的复选框
  • @Fred-ii- 你可能是对的,但我的目标是制作特定于目标的表格以获取所有电子邮件并向他们发送电子邮件。
  • 首先,名称必须与 name='MT' 相同,并且各个复选框的值必须不同,例如 。如果要检查多个值,则必须在名称中使用数组,例如 。确保你专注于 name='MT' 和 name = 'MT[]'

标签: javascript php mysql


【解决方案1】:

您好,请使用以下代码:

注意:我强烈建议您使用 mysqli 或 PDO。 mysql 函数已弃用且已过时。

请在插入数据库之前清理或安全转换您的数据。

另请注意:在表单中,我将重定向到相同的表单页面。请使用合适的php文件名或路由路径。

db_connect.php

$host       =   'localhost';
$user       =   'root';
$password   =   'root';
$database   =   'skerp';


$connection_error   =   'Sorry!!! We are experiencing problems with the database settings';

$link   =   mysqli_connect($host, $user, $password, $database) or DIE($connection_error);

以下是实现

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if($_SERVER['REQUEST_METHOD'] == 'POST'){
   include_once ('db_connection.php');

   if(in_array('cars_coffee', $_POST['chk'])){
        $emails =   mysqli_query($link, "INSERT INTO all_emails (name, email, car, phone) VALUES ('".$_POST['name']."','".$_POST['email']."','".$_POST['car']."', '".$_POST['phone']."' )");
   }else{
    //If it fails then put the condition here or you may skip else part
      echo 'Not Exists';
   }

   echo '<pre>';
   print_r($_POST);
}
?>
<!doctype html>
<html lang="en">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">

    <input type="checkbox" name="chk[]" value="cars_coffee">Cars  & Coffee<br>
    <input type="checkbox" name="chk[]" value="kentucky">Kentucky Derby Party<br>
    <input type="checkbox" name="chk[]" value="july">July 4th<br>
    <input type="checkbox" name="chk[]" value="labor">Labor Day<br>
    <input type="checkbox" name="chk[]" value="new_year">New Years Day<br>
    <input type="checkbox" name="chk[]" value="all" onClick="toggle(this)">Select All<br>
    <input type="submit" value="Submit" />
       </form>
   </body>
</html>

希望对您有所帮助。快乐编码!

【讨论】:

  • 非常感谢您花时间提供帮助! 1)在上面的代码中,它连接我的mysql数据库? 2)我假设您故意留下文本字段。因为文本字段中的值是我想要添加到表中的值
  • @mtkilic,我建议您在上述文件的顶部创建一个 db_connect.php 或具有类似文件名和 require_once 或 include_once 的文件。是的,我没有做任何连接,但你可以把上面的条件放在 if($_SERVER['REQUEST_METHOD'] == 'POST'){ //连接到你的数据库 }
  • 我这样做了,我认为这应该可以吗? gist.github.com/mtkilic/d1a17321d0a737ddc400bacb1b98a082
  • @mtkilic 是的,它会起作用,请您使用更合适的更新代码。我强烈建议您在插入之前对数据进行清理。
  • 非常感谢!这很好用!
【解决方案2】:

您可以使用 isset 方法检查是否选中了复选框。

if ( isset ( $_POST ["cars_coffee"] ) )
{
    // do something
}    
if ( isset ( $_POST ["kentucky"] ) )
{
    // do something else
}
...

【讨论】:

  • 如果将文本字段存储到 cars_coffee 表中,这是我在里面做的吗? $sq = "INSERT INTO cars_coffee (name, email, car, phone) values ('".$_POST['name']."','".$_POST['email']."','".$_POST['car']."', '".$_POST['phone']."' )");
  • 我的 SQL 能力不是很强,但我认为您使用了太多引号。试试这个:$sq = "INSERT INTO cars_coffee ( name, email, car, phone ) values ( $_POST['name'], $_POST['email'], $_POST['car']‌, $_POST['phone'] )";
【解决方案3】:

您的逻辑似乎有一点问题,因为您使用复选框从用户那里检索数据。如果您希望用户只选择一个复选框,请使用单选按钮。这将使他们无法选择多个。如果我只是没有正确理解您并且您确实希望用户能够选择多个框,那么请继续使用复选框,但将每个复选框的名称属性更改为唯一。因为现在,每个复选框都有相同的名称,所以它只会读取他们选中的最后一个复选框。

如果你继续使用复选框并给每个复选框一个唯一的名称,逻辑会变成这样:

$sql = '';
// make sure that the checkbox is set
if(isset($_POST['kentucky_checkbox'])){
{
   $sql += 'INSERT INTO kentucky VALUES ...;';
}
if(isset($_POST['labor_checkbox'])){
{
   $sql += 'INSERT INTO labor VALUES ...;';
}

etc.

...

// execute $sql

如果你使用单选按钮,逻辑会变成这样:

// make sure that the variable is set
if(isset($_POST['chk[]'])){
{
   // check what the value is
   switch ($_POST['chk[]']) {
      case 'option1':
         // set the table
         $table = 'table1';
         break;
      case 'option2':
         $table = 'table2';
         break;
      case 'option3':
         $table = 'table3';
         break;
   }
}

...

$sql = 'INSERT INTO ' . $table . ' VALUES ...';

【讨论】:

  • 感谢您的指出,但我确实希望用户能够选择更多,如果他们愿意的话。这意味着他们只会收到来自选定复选框的电子邮件
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多