使用PDO向DB输入值时出现问题

时间:2015-04-19 23:01:21

标签: html mysql forms pdo

因此,这是处理表单信息的PHP代码,它应该将数据发送到数据库中。它每次都成功并向我发送成功消息但是当我查看数据库时,我看到一个新行,但没有来自表单的实际数据。

提醒:数据库连接正在运行,除了它发送空白值以填充表格而不是表单数据。

以下是由dealer.php中的PHP代码处理的HTML表单:

 <form action="dealer.php" method="POST">
    <div class="form-group">
   <label for="company">Company Name</label>
   <input type="text" class="form-control" id="company" name="company" placeholder="Company Name">
 </div>
 <div class="form-group">
   <label for="location">Location</label>
    <input type="text" class="form-control" id="location" name="location" placeholder="Location">
  </div>
  <div class="form-group">
    <label for="founded">Founded</label>
    <input type="text" class="form-control" id="founded" name="founded" placeholder="Founded">
    </div>
    <div class="form-group">
      <label for="employees"># of Employees</label>
     <input type="text" class="form-control" id="employees" name="employees" placeholder="# of employees">
  </div>
  <div class="form-group">
    <label for="employees"># of Employees</label>
     <input type="text class="form-control" id="sales" name="sales" placeholder="2014 sales">
  </div>
   <div class="radio">
   <label><p>Is the company traded publicly?</p>
    <input type="radio" name="optionsRadios" name="public" id="Yes" value="Yes">
  Yes
 </label>
</div>
<div class="radio">
  <label>
    <input type="radio" name="optionsRadios" name="public" id="No" value="No">
   No
  </label>
</div>
  <div class="form-group">
   <label class="sr-only" for="gross_2014">Gross Revenue</label>
    <div class="input-group">
      <div class="input-group-addon">$</div>
      <input type="text" class="form-control" id="gross_2014" name="gross_2014" placeholder="Gross Revenue">
      <div class="input-group-addon">.00</div>
     </div>
   </div>
  <div class="form-group">
   <label class="sr-only" for="net_2014">Net Revenue</label>
    <div class="input-group">
      <div class="input-group-addon">$</div>
      <input type="text" class="form-control" id="net_2014" name="net_2014" placeholder="Net Revenue">
     <div class="input-group-addon">.00</div>
   </div>
 </div>
   <div class="form-group">
   <label class="sr-only" for="growth_2014">Growth(%)</label>
    <div class="input-group">
     <div class="input-group-addon">%</div>
     <input type="text" class="form-control" id="growth_2014" name="growth_2014" placeholder="Growth %">
      <div class="input-group-addon">.00</div>
    </div>
  </div>
  <textarea class="form-control" rows="3"></textarea>
   <div class="form-group">
     <p class="help-block" id="customer" name="customer">Customer profile info...       </p>
  </div>
  <textarea class="form-control" rows="3"></textarea>
  <div class="form-group">
    <p class="help-block" id="products" name="products">Info about product offerings.</p>

  </div>
  <div class="checkbox">
    <label>
     <input type="checkbox"> Check me out
    </label>
  </div>
 <button type="submit" class="btn btn-default">Submit</button>
</form>

以下是处理上述HTML表单的dealer.php的内容:

<?php
$servername = "XX.XXX.XXX.XX";
$username = "smartkrawl";
$password = "Bondurant15!";
$dbname = "smartkrawl";

class companyInfo{
    public $name;
    public $location;
    public $founded;
    public $employees;
    public $sales;
    public $gross_2014;
    public $net_2014;
    public $growth_2014;

    public function     __construct($name,$location,$founded,$employees,$sales,$gross_2014, $net_2014, $growth_2014) {

    $this->name = $name;
    $this->location = $location;
    $this->founded = $founded;
    $this->employees = $employees;
    $this->sales = $sales;
    $this->gross_2014 = $gross_2014;
    $this->net_2014 = $net_2014;
    $this->growth_2014 = $growth_2014;

    }
}


try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,      $password);
     // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO companyInfo (name, location, founded, employees, sales, gross_2014, net_2014, growth_2014)
    VALUES ('$name', '$location', '$founded', '$employees', '$sales', '$gross_2014', '$net_2014', '$growth_2014')";
     // use exec() because no results are returned
    $conn->exec($sql);
    echo "New record created successfully";
    }
   catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }

    $conn = null;


     ?>

1 个答案:

答案 0 :(得分:0)

您没有在PHP代码中获取POST值,这就是行的列为空的原因。变量未设置。

我认为你不应该只使用一个班级来处理一个表格,这是不必要的。

由于您从表单中获取此数据,因此使用预准备语句来插入数据非常有用。您已经在使用PDO,因此您可以毫无问题地使用准备好的语句。

您可以在PHP手册(http://php.net/manual/en/pdo.prepared-statements.php

上阅读有关PDO准备语句的信息

我修改了你的代码,现在应该正常工作。

<?php
$name = $_POST['company'];
$location = $_POST['location'];
$founded = $_POST['founded'];
$employees = $_POST['employees'];
$sales = $_POST['sales'];
$gross_2014 = $_POST['gross_2014'];
$net_2014 = $_POST['net_2014'];
$growth_2014 = $_POST['growth_2014'];

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
     // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = $conn->prepare("INSERT INTO companyInfo (name, location, founded, employees, sales, gross_2014, net_2014, growth_2014) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
    $sql->bindValue(1, $name);
    $sql->bindValue(2, $location);
    $sql->bindValue(3, $founded);
    $sql->bindValue(4, $employees);
    $sql->bindValue(5, $sales);
    $sql->bindValue(6, $gross_2014);
    $sql->bindValue(7, $net_2014);
    $sql->bindValue(8, $growth_2014);
    $exec = $sql->execute();

    if($exec) {
        echo "New record created successfully";
    }
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}

$conn = null;

顺便说一句,在您的HTML代码中,在type属性之后,此行上缺少引号。

<input type="text class="form-control" id="sales" name="sales" placeholder="2014 sales">

替换为

<input type="text" class="form-control" id="sales" name="sales" placeholder="2014 sales">

表单上有一个您没有在PHP代码上设置的字段,即optionsRadios无线电。我没有把这个收音机放在代码中,因为你没有把它放在原始代码上。所以,如果你想把它放在那里,只需像其他任何字段一样在PHP上添加它。