试图用HTML表单填充SQL表

时间:2018-07-03 08:45:24

标签: php html sql

我试图在表'Colaboradores'中创建一个新行,但是没有填充,但是当我'echo'时'$ sql'与连接一起工作正常。我已经检查了sql表中列的名称。我正在使用MAMP作为服务器

 <?php
       include("../../config.php");
       session_start();

       if($_SERVER["REQUEST_METHOD"] === "POST") {

    $nomeF = $_POST['nomeF']; 
    $nomeL = $_POST['nomeL'];
    $Prof = $_POST['Profissao'];
    $morada = $_POST['morada'];
    $cod = $_POST['cod'];
    $num = $_POST['num'];
    $mail = $_POST['mail'];
    $ordeb = $_POST['ordb'];
    $orde = $_POST['orde'];
    $dataI = $_POST['dataI'];
    $dataF = $_POST['dataF'];
    $notas1 = $_POST['notas1'];
    $notas2 = $_POST['notas2'];

    try
    {
        $db = new PDO('mysql:host=localhost;dbname=SCMMM;charset=utf8', 'root', 'root');
    }
    catch(Exception $e)
    {
        die('Error : '.$e->getMessage());
    }


    $sql = "INSERT INTO Colaboradores (NomeF, NomeL, Profissao, Morada, CodPostal, Telemovel, mail, precoh, precohmais, dataI, dataF, notas1, notas2) 
      VALUES (:nomeF, :nomeL, :Prof, :morada, :cod, :num, :mail, :ordeb, :orde, :dataI, :dataF, :notas1, :notas2)";

    $stmt = $db->prepare($sql);
    $stmt->bindValue('nomeF', $nomeF, PDO::PARAM_STR);
    $stmt->bindValue('nomeL', $nomeL, PDO::PARAM_STR);
    $stmt->bindValue('Prof', $Prof, PDO::PARAM_STR);
    $stmt->bindValue('morada', $morada, PDO::PARAM_STR);
    $stmt->bindValue('cod', $cod, PDO::PARAM_STR);
    $stmt->bindValue('num', $num, PDO::PARAM_INT);
    $stmt->bindValue('mail', $mail, PDO::PARAM_STR);
    $stmt->bindValue('ordb', $ordeb, PDO::PARAM_INT);
    $stmt->bindValue('orde', $orde, PDO::PARAM_INT);
    $stmt->bindValue('dataI', $dataI, PDO::PARAM_STR);
    $stmt->bindValue('dataF', $dataF, PDO::PARAM_STR);
    $stmt->bindValue('notas1', $notas1, PDO::PARAM_STR);
    $stmt->bindValue('notas2', $notas2, PDO::PARAM_STR);
    $stmt->execute();

       }

    ?>

1 个答案:

答案 0 :(得分:1)

您可以轻松地改进代码:

  • 在数据库中避免使用符号ã+
  • 避免数据库中的空间(由_代替)
  • 通知自己有关OOP和PDO
  • 通知自己有关SQL注入,准备查询等...
  • 对变量名称使用约定,小写驼峰式?上驼箱?除了保持规律之外,一切

现在尝试使用此代码

$nomeF = $_POST['nomeF']; 
$nomeL = $_POST['nomeL'];
$descP = $_POST['descP'];
$morada = $_POST['morada'];
$num = $_POST['num'];
$mail = $_POST['mail'];
$dataI = $_POST['dataI'];
$dataF = $_POST['dataF'];
$ordeb = $_POST['ordeb'];
$orde = $_POST['orde'];
$notas1 = $_POST['notas1'];
$notas2 = $_POST['notas2'];

try
{
    $db = new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8', 'USERNAME', 'PASSWORD');
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}


$sql = "INSERT INTO Colaboradores (nomeF, nomeL, descP, morada, mail, ordeb, orde, dataI, dataF, notas1, notas2) 
  VALUES (:nomeF, :nomeL, :descP, :morada, :num, :mail, :ordeb, :orde, :dataI, :dataF, :notas1, :notas2)";

$stmt = $db->prepare($sql);
$stmt->bindValue('nomeF', $nomeF, PDO::PARAM_STR);
$stmt->bindValue('nomeL', $nomeL, PDO::PARAM_STR);
$stmt->bindValue('descP', $descP, PDO::PARAM_STR);
$stmt->bindValue('morada', $morada, PDO::PARAM_STR);
$stmt->bindValue('num', $num, PDO::PARAM_INT);
$stmt->bindValue('mail', $mail, PDO::PARAM_STR);
$stmt->bindValue('ordeb', $ordeb, PDO::PARAM_STR);
$stmt->bindValue('dataI', $dataI, PDO::PARAM_STR);
$stmt->bindValue('dataF', $dataF, PDO::PARAM_STR);
$stmt->bindValue('notas1', $notas1, PDO::PARAM_STR);
$stmt->bindValue('notas2', $notas2, PDO::PARAM_STR);
$stmt->execute();

编辑

我在计算机上构建您的项目,尝试添加

$error = $stmt->errorInfo();
print_r($error);

查看请求期间发生的情况。

在我这一边,我发现单词ordebordb不匹配

例如:$stmt->bindValue('ordb', $ordeb, PDO::PARAM_INT);

您还可以检查日期格式吗,它应该是“ Y-m-d H:i:s”)

注意::表中的所有列均为text类型,文本应仅用于长文本(例如在textarea中),而应使用varchar最多可以保存255个字符。