Php 如何根据所选内容在数据库中添加信息。?
我有这个选择Php 如何根据所选内容在数据库中添加信息。?,php,Php,我有这个选择 <select name="tipi"> <option value="gp">Gradinita Privata</option> <option value="gs">Gradinita de stat</option> <option value="cr">Cres
<select name="tipi">
<option value="gp">Gradinita Privata</option>
<option value="gs">Gradinita de stat</option>
<option value="cr">Cresa</option>
</select>
我想根据所选内容在数据库中添加信息。
我试过了
我有以下错误:
警告:第31行C:\xampp\htdocs\Proiect\adaugag-d.php中未定义的数组键tipi
警告:第49行C:\xampp\htdocs\Proiect\adaugag-d.php中未定义变量$sql
致命错误:未捕获值错误:mysqli_查询:参数2$query在C:\xampp\htdocs\Proiect\adaugag-d.php中不能为空:49堆栈跟踪:0 C:\xampp\htdocs\Proiect\adaugag-d.php49:mysqli_queryObjectmysqli,在第49行的C:\xampp\htdocs\Proiect\adaugag-d.php中抛出1{main}
我有以下错误:警告:未定义的数组键tipi在
第31行的C:\xampp\htdocs\Proiect\adaugag-d.php
您的访问over GET请求和POST未设置,或者您的表单未实际过帐值,在外部
警告:中未定义的变量$sql
第49行的C:\xampp\htdocs\Proiect\adaugag-d.php
这是一个级联错误,您没有定义$sql,因为它只在if语句中定义,而由于上一个问题,该语句不是真实的,不是POST'ing value或GET请求
致命错误:未捕获值错误:mysqli\u查询:参数2$query
在C:\xampp\htdocs\Proiect\adaugag-d.php:49堆栈中不能为空
跟踪:0 C:\xampp\htdocs\Proiect\adaugag-d.php49:
mysqli_queryObjectmysqli,抛出1{main}
第49行的C:\xampp\htdocs\Proiect\adaugag-d.php
同样,它希望设置$sql
您应该检查POST请求、验证用户输入并使用准备好的查询
<?php
$errors = [];
// its a POST!
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// validate form inputs
if (!isset($_POST["tipi"])) {
$errors['tipi'] = 'Tipi is a required field';
} elseif(!in_array($_POST["tipi"], ['gp', 'gs', 'cr'])) {
$errors['tipi'] = 'Invalid tipi value';
}
// @todo: add validation for $denumire, $email, $adresa, $telefon, $pret
// $errors is empty so must be no errors, continue to do query..
if (empty($errors)) {
// determine table, could use an if statement, or not do it as its already been validated as either gp, gs or cr
$table = '';
switch ($_POST["tipi"]) {
case: "gp": $table = 'gradiniteprivate'; break;
case: "gs": $table = 'gradinitestat'; break;
case: "cr": $table = 'crese'; break;
}
// run prepared query
$stmt = $mysqli->prepare("
INSERT INTO $table (
denumire,
email,
adresa,
telefon,
pret
) VALUES (?,?,?,?,?)");
$stmt->bind_param("sssss", $denumire, $email, $adresa, $telefon, $pret);
$stmt->execute();
}
}
?>
// if form is after this
<form>
...
<select name="tipi">
<option value="gp">Gradinita Privata</option>
<option value="gs">Gradinita de stat</option>
<option value="cr">Cresa</option>
</select>
<?= !empty($errors['tipi']) ? '<div class="invalid-feedback">'.$errors['tipi'].'</div>' : '' ?>
...
</form>
您输入的代码没有特别的问题,您发布的错误消息来自另一个部分,需要更详细地告知此问题html表单和照片代码是否在同一个文件中?如果是,您应该测试$\u POST是否已使用functionWarning初始化:您完全可以使用参数化的准备语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。
<?php
$errors = [];
// its a POST!
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// validate form inputs
if (!isset($_POST["tipi"])) {
$errors['tipi'] = 'Tipi is a required field';
} elseif(!in_array($_POST["tipi"], ['gp', 'gs', 'cr'])) {
$errors['tipi'] = 'Invalid tipi value';
}
// @todo: add validation for $denumire, $email, $adresa, $telefon, $pret
// $errors is empty so must be no errors, continue to do query..
if (empty($errors)) {
// determine table, could use an if statement, or not do it as its already been validated as either gp, gs or cr
$table = '';
switch ($_POST["tipi"]) {
case: "gp": $table = 'gradiniteprivate'; break;
case: "gs": $table = 'gradinitestat'; break;
case: "cr": $table = 'crese'; break;
}
// run prepared query
$stmt = $mysqli->prepare("
INSERT INTO $table (
denumire,
email,
adresa,
telefon,
pret
) VALUES (?,?,?,?,?)");
$stmt->bind_param("sssss", $denumire, $email, $adresa, $telefon, $pret);
$stmt->execute();
}
}
?>
// if form is after this
<form>
...
<select name="tipi">
<option value="gp">Gradinita Privata</option>
<option value="gs">Gradinita de stat</option>
<option value="cr">Cresa</option>
</select>
<?= !empty($errors['tipi']) ? '<div class="invalid-feedback">'.$errors['tipi'].'</div>' : '' ?>
...
</form>