如何发送输入值以及选择选项到php

如何发送输入值以及选择选项到php

问题描述:

我有以下代码。我如何发送此表格到PHP,所以在PHP我可以访问它像studentName course2 year3。基本上我有一张表,看起来像这样studentName|course|year。我我正在寻找正确的方式来组织数据,以便将其插入到我的表中。我试图发送表单不是作为一个数组,但我必须编写3个查询来插入3个inputs.Is有任何方式来循环数据并插入?如何发送输入值以及选择选项到php

<form id="myform" method="POST"> 
    <label>college:</label><input type="text" id="clg" name="clg"/><br/> 
    <label>Student:-</label><input type="text" name="name[]" id="name" /> 
    <select name="taskOpen[]"> 
    <option value="1">course1</option> 
    <option value="2">course2</option> 
    <option value="3">course3</option> 
    <option value="4">course4</option> 
    </select> 
    <select name="year[]"> 
    <option value="1">year1</option> 
    <option value="2">year2</option> 
    <option value="3">year3</option> 
    <option value="4">year4</option> 
    </select> 
<label>Student:-</label><input type="text" name="name[]" id="name" /> 
    <select name="taskOpen[]"> 
    <option value="1">course1</option> 
    <option value="2">course2</option> 
    <option value="3">course3</option> 
    <option value="4">course4</option> 
    </select> 
    <select name="year[]"> 
    <option value="1">year1</option> 
    <option value="2">year2</option> 
    <option value="3">year3</option> 
    <option value="4">year4</option> 
    </select> 
    <input type="button" value="search" id="btn"/> 
    </form> 

这是我在php--

if(isset($_POST['name']) && isset($_POST['taskOpen']) 
&& isset($_POST(['year'])){ 
$name=$_POST['name'],$course=$_POST['taskOpen'],$year=$_POST['year'] 
} 
else { 
echo "something"; 
} 
foreach($name as $student){ 
$sql=$conn->prepare("INSERT INTO `student`(`studentName`) VALUES(:s_n)"); 
$sql->execute(array(":s_n"=>$student)); 
} 
foreach($course as $courseN){ 
$sql=$conn->prepare("INSERT INTO `student`(`course`) VALUES(:co)"); 
$sql->execute(array(":co"=>$courseN)); 
} 
foreach($year as $yearD){ 
$sql=$conn->prepare("INSERT INTO `student`(`year`) VALUES(:ya)"); 
$sql->execute(array(":ya"=>$yearD)); 
} 
+0

让我们看看你有在PHP端的东西,所以我们可以帮你调整它。 – cmorrissey

+0

通过将'改为'开始,所以你可以提交表格。然后使用'print_r($ _ POST)'分析帖子内容。 –

+0

@PedroLobito我发送表单使用ajax。并且我可以打印php –

这里是我想你会的...

HTML

<!-- THE NAMES OF INPUT ELEMENTS WRAPPED IN A college_data--> 
    <form id="myform" method="POST"> 
     <label>college:</label><input type="text" id="clg" name="college_data[clg]"/><br/> 
     <label>Student:-</label><input type="text" name="college_data[name]" id="name"/> 
     <select name="college_data[taskOpen1]"> 
      <option value="1">course1</option> 
      <option value="2">course2</option> 
      <option value="3">course3</option> 
      <option value="4">course4</option> 
     </select> 

     <select name="college_data[year1]"> 
      <option value="1">year1</option> 
      <option value="2">year2</option> 
      <option value="3">year3</option> 
      <option value="4">year4</option> 
     </select> 

     <label>Student:-</label><input type="text" name="name[]" id="name"/> 
     <select name="college_data[taskOpen2]"> 
      <option value="1">course1</option> 
      <option value="2">course2</option> 
      <option value="3">course3</option> 
      <option value="4">course4</option> 
     </select> 

     <select name="college_data[year2]"> 
      <option value="1">year1</option> 
      <option value="2">year2</option> 
      <option value="3">year3</option> 
      <option value="4">year4</option> 
     </select> 
     <input type="submit" value="search" id="btn"/> 
    </form> 

PHP

<?php 

     $college  = isset($_POST['college_data']['clg'])   ? htmlspecialchars(trim($_POST['college_data']['clg']))   :null; 
     $studentName = isset($_POST['college_data']['name'])   ? htmlspecialchars(trim($_POST['college_data']['name']))  :null; 
     $studentName2 = isset($_POST['college_data']['name2'])  ? htmlspecialchars(trim($_POST['college_data']['name2']))  :null; 
     $taskOpen1  = isset($_POST['college_data']['taskOpen1']) ? htmlspecialchars(trim($_POST['college_data']['taskOpen1'])) :null; 
     $taskOpen2  = isset($_POST['college_data']['taskOpen2']) ? htmlspecialchars(trim($_POST['college_data']['taskOpen2'])) :null; 
     $year1   = isset($_POST['college_data']['year1'])  ? htmlspecialchars(trim($_POST['college_data']['year1']))  :null; 
     $year2   = isset($_POST['college_data']['year2'])  ? htmlspecialchars(trim($_POST['college_data']['year2']))  :null; 


     // TEST::: DELETE EVERYTHING BELOW THIS LINE ONCE YOU ARE DONE CONFIRMING THAT IT IS OK 
     // CLICK THE SUBMIT BUTTON TO SEE THE VALUES REFLECTED HERE AS SOON AS THE FORM GETS SUBMITTED...   
     var_dump($college); 
     var_dump($studentName); 
     var_dump($studentName2); 
     var_dump($taskOpen1); 
     var_dump($taskOpen2); 
     var_dump($year1); 
     var_dump($year2); 
    ?> 

验证

<?php 

     // FIRST CREATE AN ARRAY TO HOLD MESSAGES TO BE SHOWN TO THE USER 
     // SHOULD ANYTHING GO WRONG... & ALSO AN EMPTY ERROR MESSAGE STRING... 
     $arrErrorBag = array(); 
     $strErrorMsg = ""; 

     if(isset($_POST['submit'])) { 
      // LET'S ASSUME FOR THE MOMENT YOU HAVE SPECIAL CONSTRAINTS 
      // TO BE APPLIED TO EACH FIELD DURING YOUR VALIDATION PROCESS. 
      // WE WILL USE SIMPLE REGULAR EXPRESSIONS HERE FOR DEMONSTRATION 

      // BUILD VALIDATION REG-EXES FOR THE FIELD:: WE WANT ONLY A MINIMUM OF 10 CHARACTERS FOR STUDENT & COLLEGE 
      // AGAIN; YOU CAN GO WILD BUT WE ARE KEEPING IT SIMPLE 
      // PLUS, DOING IT LIKE THIS IS JUST SO THAT YOU GET THE DRIFT... ;-) 
      $rxColStudent = "#(.){10,}#si"; 

      // FOR THE SELECTS, WE KNOW THAT THE VALUES ARE NUMBERS 
      // WHICH ARE BETWEEN 1 & 4; BUT WE TAKE IT TO "BETWEEN 1 & 9" 
      // AND WE INTEND USING ONE REGEX FOR ALL OF THEM SINCE THEY ARE SIMILAR. 
      $rxCourseYear = "#\d#"; 

      // NOW WE HAVE THE REGEXES: THEN WHAT? 
      // VALIDATION BEGINS... ;-) 


      // TO MAKE IT EASIER ON OURSELVES, WE BUNDLE ALL THE STUDENT, STUDENT1 & COLLEGE FIELDS 
      // INTO AN ARRAY & LOOP THROUGH THE ARRAY, BUILDING THE ERRORS ON EACH ITERATION THROUGH THE LOOP. 
      // VALIDATE COLLEGE, STUDENT & STUDENT2... 
      $arrStringValFields = array(
       "student" => array("Student Nr. 1", $studentName), 
       "student2" => array("Student Nr. 2 ", $studentName2), 
       "college" => array("College",   $college), 
      ); 

      // RUN THE LOOP & KEEP BUILDING THE ERRORS AS YOU VALIDATE THROUGH EACH ITERATION. 
      foreach ($arrStringValFields as $fieldName => $arrErrStringVal) { 
       if (!preg_match($rxColStudent, $arrErrStringVal[1])) { 
        $arrErrorBag[$fieldName] = $arrErrStringVal[0] . " is expected to have a minimum of 10 Characters. Please, check that you have not missed something."; 
       } 
      } 

      // TO MAKE IT AGAIN EASIER ON OURSELVES, WE BUNDLE ALL OTHER FIELDS THAT HAVE NUMERIC VALUES 
      // INTO AN ARRAY & LOOP THROUGH THE ARRAY, BUILDING THE ERRORS ON EACH ITERATION THROUGH THE LOOP. 
      $arrNumericFields = array(
       "taskOpen1" => array("Open Task Nr. 1",  $taskOpen1), 
       "taskOpen2" => array("Open Task Nr. 2 ",  $taskOpen2), 
       "year1"  => array("College Year Section 1", $year1), 
       "year2"  => array("College Year Section 2", $year2), 
      ); 

      // RUN THE LOOP & KEEP BUILDING THE ERRORS AS YOU VALIDATE THROUGH EACH ITERATION. 
      foreach ($arrNumericFields as $fieldName => $arrErrStringVal) { 
       if (!preg_match($rxCourseYear, $arrErrStringVal[1])) { 
        $arrErrorBag[$fieldName] = $arrErrStringVal[0] . " is expected to be a Single Digit & it should. Did you try to *NUKE OUR ASSES OFF*. Please, don't. We are your Brothers ;-)"; 
       } 
      } 

      // MAMA MIA!!! SO MUCH FOR A SIMPLE 6-FIELD VALIDATION... 
      // HAPPILY ENOUGH; WE ARE THERE... ONLY; NOT JUST YET... 

      // CHECK THE ERROR BAG TO SEE IF IT CONTAINS ANYTHING. 
      // IF IT DOES; THEN WE HAVE TO FIND A WAY TO DISPLAY THIS TO THE END-USER. 
      if (!empty($arrErrorBag)) { 
       // TURN THE ERROR BAG ARRAY TO A STRING & ASSIGN IT BACK TO THE ERROR MESSAGE STRING FOR DISPLAY... 
       $strErrorMsg = "<span class='has-error'>" . implode("</span><br /><span class='has-error'>", $arrErrorBag); 
      } 
      else { 
       // WE HAVE REACHED THE CLIMAX OF OUR POLICE-WORK... 
       // SO WE EITHER STORE THE DATA TO THE DATABASE TABLE OR 
       // WE BAKE & CAKE IT FOR CHRISTMAS - YOUR CALL ;-) 
      } 
     } 

    ?> 

现在,那也无妨。但是,用户如何知道存在错误,并且他/她如何避免再次输入相同的信息?

我们的HTML文件应该早就建成了,以考虑到这一点,但是再次,EINTEIN WAS RIGHT !!!人类的愚蠢和宇宙一样无限......但这就是我们来这里的原因吧?为了减少我们愚蠢的无限,并成长为真正的人类;-)所以我们修改我们的HTML来考虑这些。

HTML - 修订:释放出DRAGON!

<!-- WE ADD A SLOT FOR OUR ERROR MESSAGE: JUST BEFORE THE FORM. --> 
    <div class="error-slot"><?php echo $strErrorMsg; ?></div> 
    <form id="myform" method="POST"> 
     <label>college:</label><input type="text" id="clg" name="college_data[clg]" value="<?php echo $college; ?>" /><br/> 
     <label>Student:-</label><input type="text" name="college_data[name]" value="<?php echo $studentName; ?>" id="name"/> 
     <select name="college_data[taskOpen1]"> 
      <option value="1" <?php if($taskOpen1=="1"){echo "selected";} ?>>course1</option> 
      <option value="2" <?php if($taskOpen1=="2"){echo "selected";} ?>>course2</option> 
      <option value="3" <?php if($taskOpen1=="3"){echo "selected";} ?>>course3</option> 
      <option value="4" <?php if($taskOpen1=="4"){echo "selected";} ?>>course4</option> 
     </select> 

     <select name="college_data[year1]"> 
      <option value="1" <?php if($year1=="1"){echo "selected";} ?>>year1</option> 
      <option value="2" <?php if($year1=="2"){echo "selected";} ?>>year2</option> 
      <option value="3" <?php if($year1=="3"){echo "selected";} ?>>year3</option> 
      <option value="4" <?php if($year1=="4"){echo "selected";} ?>>year4</option> 
     </select> 

     <label>Student:-</label><input type="text" name="college_data[name2]" value="<?php echo $studentName2; ?>" id="name"/> 
     <select name="college_data[taskOpen2]"> 
      <option value="1" <?php if($taskOpen2=="1"){echo "selected";} ?>>course1</option> 
      <option value="2" <?php if($taskOpen2=="2"){echo "selected";} ?>>course2</option> 
      <option value="3" <?php if($taskOpen2=="3"){echo "selected";} ?>>course3</option> 
      <option value="4" <?php if($taskOpen2=="4"){echo "selected";} ?>>course4</option> 
     </select> 

     <select name="college_data[year2]"> 
      <option value="1" <?php if($year2=="1"){echo "selected";} ?>>year1</option> 
      <option value="2" <?php if($year2=="2"){echo "selected";} ?>>year2</option> 
      <option value="3" <?php if($year2=="3"){echo "selected";} ?>>year3</option> 
      <option value="4" <?php if($year2=="4"){echo "selected";} ?>>year4</option> 
     </select> 
     <input type="submit" value="search" name="submit" id="btn"/> 
    </form> 
+0

如果用户只填写一个输入,该怎么办?我的意思是如果第二个输入是可选的呢? –

+0

@Toni Reese没有问题....它仍然是可选的...只要您未验证这些可选字段并且未将html REQUIRED关键字添加到任何字段。***这就是为什么当用户没有填充它们时,我们将所有变量像$ college,$ year1,$ year2等默认为NULL。***您可以**将NULL更改为任何默认值**你希望甚至将它们设置为如下所示的空字符串:**“”** – Poiz

+0

谢谢我将尝试:-) –

从它看起来像要插入一个学生,他们的课程和一年中他们都在服用它,除非你要验证表单的数据库表格的设计,使学生的数量匹配课程数量和年数,以便您可以根据其索引轻松循环和插入,但我不明白它如何轻松完成。 例子:

$_POST = Array(
    'name' = Array ('Kelly', 'Tom', 'Jack'), 
    'course' = Array ('Course1', 'Course2', 'Course3'), 
    'year' = Array ('2007', '2008', '2009'), 
); 


for ($i = 0; i < count($_POST['student_name']); i++) { 
    $sql = sprintf("INSERT INTO test (student_name, course, year) VALUES ( %s, %s, %d)", 
     $_POST['student_name'][$i], $_POST['course'][$i], $_POST['year'][$i] 
    ); 
$conn->query($sql); 
} 
+0

我会投票给你已经给出的例子。我会尽力实施你的例子并回复你:-) –