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>