如何使用php将可变数量的值插入数据库

时间:2014-01-07 19:57:01

标签: php mysql database

我有一个表单,用户可以选择他们想要输入标记的问题数量(不超过10个)。

  

输入问题数: _ __ _

弹出另一个表单,其中包含用户可以输入标记的所需问题数。

  

如果输入3:

     

问题1: _ __ _

     

问题2: _ __ _

     

问题3: _ __ _

我有一个名为11行的问题表,其中ID自动递增,如果在该问题中没有输入标记,则其他问题可以为空

  

| ID | Q1 | Q2 | 。 。 。 | Q10 |

这引出了我的问题,因为用户选择的问题数量可能会有所不同,我如何使用PHP将这些值输入数据库。

2 个答案:

答案 0 :(得分:1)

您可以将答案字段的“名称”属性设置为“answer [0]”“answer [1]”,依此类推。然后在PHP中你可以做$ _GET ['answer'],这将返回一个包含你所有答案的数组。

答案 1 :(得分:0)

首先,请确保在问题表和代表页面的主表之间使用多对多表(在我的下方架构中称为“yourPrimaryTable_has_questions”)。

然后循环查看问题,并在多对多表中为每个问题添加一行。如果您在括号中使用带括号但没有值的名称,则在PHP服务器接收数据时它将自动递增。

if (isset($_POST) && $_POST  && $_POST['questions'])
{
    echo("<form name='xxx'>");
    foreach($_POST['questions'] as $question)
    {
        //Insert record with answer into your many to many table
    }
    echo("</form>");
}
else
{
    for ($i = 1; $i <= $count; $i++) {
        echo("Question {i} <input name='question[] type='text' /><br>");
    }
}


SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`questions`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`questions` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `otherData` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`yourPrimaryTable`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`yourPrimaryTable` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `otherData` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`yourPrimaryTable_has_questions`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`yourPrimaryTable_has_questions` (
  `yourPrimaryTable_id` INT NOT NULL ,
  `questions_id` INT NOT NULL ,
  `answer` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`yourPrimaryTable_id`, `questions_id`) ,
  INDEX `fk_yourPrimaryTable_has_questions_questions1_idx` (`questions_id` ASC) ,
  INDEX `fk_yourPrimaryTable_has_questions_yourPrimaryTable_idx` (`yourPrimaryTable_id` ASC) ,
  CONSTRAINT `fk_yourPrimaryTable_has_questions_yourPrimaryTable`
    FOREIGN KEY (`yourPrimaryTable_id` )
    REFERENCES `mydb`.`yourPrimaryTable` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_yourPrimaryTable_has_questions_questions1`
    FOREIGN KEY (`questions_id` )
    REFERENCES `mydb`.`questions` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;