首页 > 解决方案 > 无法从表单将数据发送到 mysql

问题描述

我正在尝试从表单发送数据,但它发送的是名称而不是输入框的值。文件正在正确上传,输入框名称也在上传,但我需要输入值。

<form action="intern.php" enctype="multipart/form-data" method="post" autocomplete="off">
     <h3  class="register-heading">Want to be a <strong>learner Bee</strong>?</h3>
       <div class="row register-form">
          <div class="col-md-6">
            <div class="form-group">
              <input type="text" class="form-control" name="iname" placeholder="Your Certificates name" value="" required />
      </div>
      <div class="form-group">
                <input type="text" class="form-control" maxlength="14" minlength="10" name="icon" placeholder="Your 24/7 opened Phone Number" value="" required />
      </div>
     <div class="form-group">
           <input type="text" class="form-control" name="ildegree" placeholder="University you are graduating from" value="" required />
         </div>
      <div class="form-group">
           <textarea type="text" class="form-control" name="iaboutus"  placeholder="What you know about us!" value="" required ></textarea>
           </div>
       <div class="form-group">
            <textarea type="text" class="form-control" name="iaddress" placeholder="Your present address " value="" required ></textarea>
       </div>
       <div class="form-group" >
           <label class="form-control" for="iapply"><input name="icvfile" style="  border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px;" type="file" name="" id="iapply" accept=".doc, .docx, .pdf, .png, .jpg, . ppt, .pptx" required>Click here to upload your CV</label>
            </div>
      </div>
      <div class="col-md-6">
           <div class="form-group">
               <input class="form-control" name="inname" placeholder="Nick Name you like to called by" value="" required />
                </div>
         <div class="form-group">
         <input type="email" name="iemail" class="form-control" placeholder="Your own mostly used Electronic mail" value="" required />
          </div>                              
      <div class="form-group">
       <select class="form-control" name="icontrib" required>
               <option class="hidden"  selected disabled>How you can contribute us?</option>
                <option>Graphic Design</option>
                <option>Sales</option>
                <option>Creative Idea Generation</option>
        </select>
        </div>
        <div class="form-group">
          <textarea  type="text" class="form-control" name="ixp" placeholder="Your past working experience in short" value="" required ></textarea>
      </div>
      <div class="form-group">
          <textarea  type="text" class="form-control" name="ifgoal" placeholder="Where you want to see yourself after 10 years!" value="" required ></textarea>
           </div>
      <input type="submit" class="btnRegister" name="isubmit" value="Submit"/>
      </div>
      </div>
   </form>

上一个是我需要填写的表格。只是卡在某个地方,找不到。

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
header("Location: https://teambbc.asia/error.html");
        } 
        $sql = "INSERT INTO Intern (Name, Contact, University, AboutUs, Address, NickName, Email, Contribution, Experience, FutureGoal) VALUES ('iname', 'icon', 'ildegree', 'iaboutus', 'iaddress', 'inname', 'iemail', 'icontrib', 'ixp', 'ifgoal')";
        //Filename upload
        $user=$_POST['inname'];
        $cont=$_POST['icon'];
        //$filename=basename($_FILES["file"]["name"]);

        $tmp=$_FILES["icvfile"]["tmp_name"];
        $extension = explode("/", $_FILES["icvfile"]["type"]);
        $name=$user.".".$extension[1];

         move_uploaded_file($tmp, "recruitment_cv/" . $user. "-" .$cont .".".$extension[1]);


        if (mysqli_query($conn, $sql)) {
           header("Location: https://teambbc.asia/congratulations.html");
        } else {
           echo "Error: " . $sql . "" . mysqli_error($conn);
           header("Location: https://teambbc.asia/error.html");
        }
        $conn->close();
     }

我与数据库的连接很好,我没有考虑那个。

标签: phphtmlmysql

解决方案


你的问题:

您在 SQL 中插入String s [ ref ] 而不是Variable s [ ref ]。

看:

$sql = "INSERT INTO Intern (Name, Contact, University, .... )
        VALUES ('iname', 'icon', 'ildegree', .... )";

中的值'quotes'是 MySQL 字符串文字。这些值不是PHP 变量。因此,无论您向 PHP 提供什么可变数据,它们都是相同的。

解决方案基础:

要解决此问题,您需要了解,当您提交表单时,超全局变量$_POST/$_GET$_REQUEST填充表单数据。

例子:

HTML:

<form action="intern.php" enctype="multipart/form-data" method="post" autocomplete="off">
 <input type="text" class="form-control" name="iname" placeholder="Your Certificates name" value="" required />
<input type='submit' value='Button to submit the form'>
</form>

PHP:

if(!empty($_POST['iname'])){
    print_r($_POST['iname']); // This will output the value entered into the form for the iname form element. 
}

因此,将其应用于您的 SQL:

你需要在一个非常基本的水平上把你strings变成variables

$sql = "INSERT INTO Intern (Name, Contact, University, .... )
        VALUES ('".$_POST['iname']."', '".$_POST['icon']."', '".$_POST['ildegree']."', .... )";

但:

这是非常不安全的。

您绝不能相信用户提交的数据。曾经

参考参考

那么,您应该如何将这些数据安全地保存到您的 SQL 表中呢?

通过使用准备好的语句;PDOMySQLi。_

我这里的示例将使用面向对象的 MySQLi 准备语句:

    $sql = "INSERT INTO Intern (Name, Contact, University) VALUES (?,?,?)";

    $insert = $conn->prepare($sql);
    /***
     * See https://www.php.net/manual/en/mysqli-stmt.bind-param.php
     * You can add multiple values at once: 
     ***/
    $insert->bind_param("sss", $_POST['iname'],$_POST['icon'],$_POST['ildegree']);
    $insert->execute();

这将安全且轻松地将数据(例如只有三位数据,但您应该明白)插入数据库。

为了简单和冗长,我错过了很多,所以你应该阅读如何熟练使用 PDO/MySQLi

笔记:

  • ?每个占位符的 SQL 字符串中的一个。
  • bind_param每个占位符值的一个值字母。该值和对应的值字母 (i,s,d,b)必须SQL 列类型匹配(您不能将字符串类型 ( s) 值插入整数类型列(INTTINYINT等)。
  • 在 MySQLi 中顺序很重要,第一个?将与第一个bind_param值相关(在上面的示例代码块中,$_POST['iname'])。

预选赛:

您的一些 MySQL PHP 代码使用过程交互和函数 - 而您的一些 MySQL PHP 代码使用面向对象的交互和函数。这些不能混用,会给您带来错误和不一致。

始终使用面向对象的 PHP/MYSQL 交互 参考参考

面向对象的交互使用->语法。

你有:

if ($conn->connect_error) {
    error_log("Connection failed: " . $conn->connect_error);
    header("Location: https://teambbc.asia/error.html");
    }  

这是面向对象的。这是最好的。

但:

mysqli_query($conn, $sql);

这是程序性的。这不是最好的。此行的 OO 版本将是$var = $conn->query($sql).

奖金建议:

  • 不要用于die将错误消息输出到屏幕,错误消息应该始终输出到错误日志文件

  • 使用时,header("Location: ... ");您必须始终放置die()exit之后:

    例子:

    if ($conn->connect_error) {
        error_log("Connection failed: " . $conn->connect_error);
        header("Location: https://teambbc.asia/error.html");
        exit;
        } 
    

祝你好运!


推荐阅读