php - 无法从表单将数据发送到 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();
}
我与数据库的连接很好,我没有考虑那个。
解决方案
你的问题:
您在 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 表中呢?
我这里的示例将使用面向对象的 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
) 值插入整数类型列(INT
、TINYINT
等)。- 在 MySQLi 中顺序很重要,第一个
?
将与第一个bind_param
值相关(在上面的示例代码块中,$_POST['iname']
)。
预选赛:
您的一些 MySQL PHP 代码使用过程交互和函数 - 而您的一些 MySQL PHP 代码使用面向对象的交互和函数。这些不能混用,会给您带来错误和不一致。
面向对象的交互使用->
语法。
你有:
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; }
祝你好运!
推荐阅读
- excel - 参考过滤表中的 Excel 单元格
- django - 迭代在 Django 上创建的批量数据中的模型约束
- c++ - 为什么`using`关键字不能用于静态类成员?
- python - How to render timestamp according to the timezone in Python
- c# - 如何根据原点单元格获取周围网格单元格的圆圈
- android-studio - 警报通知不适用于 API>=26 android 模拟器
- email - 使用谷歌应用脚本发送的邮件中显示为“function () { [native code] }”的变量
- symfony5 - 我无法使用 symfony 5 创建实体 ~'ConsoleErrorEvent.php' 无法打开流:没有这样的文件或目录。~
- django - 供应商 ID 在电子商务应用程序 Django 中的放置位置
- javascript - 如何在地图 React JS 中使用 null