【问题标题】:HTML Form posting correct values in Database except for TinyINTHTML 表单在数据库中发布正确的值,除了 TinyINT
【发布时间】:2017-10-04 02:01:40
【问题描述】:

我对 php 有点陌生,我很难将 HTML 表单中的值导入我的数据库。我遇到问题的列是 TINYINT。据我了解,这可以有 2 个值,1 或 0,但我没有在我的数据库中得到这个结果。表格的其余部分似乎相应地工作。这是我的代码和逻辑的示例;

HTML 表单如下所示:

    <form action="" method="post" id="createBoard" enctype="multipart/form-data">
        <label for="boardTitle">Name</label>
        <input type="text" name="boardTitle" id="boardTitle">

        <label for="privateSwitch">Private?</label>
        <input id="privateSwitch" name="status" type="checkbox" checked>
        <br>
        <input type="submit" value="Submit" />
    </form>

html之前的PHP逻辑是:

if (!empty($_POST)) {
    try {
        // create prepared statement
        $newBoard = new Board();
        $newBoard->setBoardName($_POST["boardTitle"]);
        if (empty($_POST['status'])){
            $privateSwitch = 0;
        } else {
            $privateSwitch = 1;
        }
        $newBoard->setPrivateSwitch($privateSwitch);
        if ($newBoard->create()){
            $feedback = "Board saved";
            header("Location: user_uploads.php?success=true");
        }

    } catch (Exception $e) {
        echo $e->getMessage();
    }
}

包含的类如下:

Setter 和 Getter:

public function setPrivateSwitch($privateSwitch)
{
  $this->privateSwitch = $privateSwitch;
}

public function getPrivateSwitch()
{
    return $this->privateSwitch;
}

创建“板”的功能:

public function create()
{
    $conn = Db::getInstance();
    $stmt = $conn->prepare("INSERT INTO board (boardTitle, userID, private) VALUES (:boardTitle, :userID, :private)");
    $stmt->bindValue(":boardTitle", $this->boardTitle);
    $stmt->bindValue(":userID", $_SESSION["id"]);
    $stmt->bindValue(":private", $this->private);
    return $stmt->execute();
}

正在数据库中创建董事会,但私有行仍然获得 NULL 值。它看起来像这样:

我在这里缺少什么? 感谢您的宝贵时间和反馈!

【问题讨论】:

  • TINYINT 值可以大于 0 或 1。最大范围为 0-255。您可能正在考虑 BYTE。
  • "TINYINT。据我了解,这可以有 2 个值,1 或 0" ... TINYINT,默认情况下,实际上是 INT(3),有一个可能的范围的 -128 > +127 或 0 - 255 取决于它是否已签名。
  • 显示课程的其余部分。在表格中它是“私人的”,但您在问题中包含的课程部分并未显示您设置该列名称
  • 感谢大家提供这些信息,@Sloan Thrasher 正如你所说,我正在考虑一个 BYTE

标签: php mysql database forms post


【解决方案1】:

setter 函数似乎是个问题。尝试将 setter 函数更改为:

public function setPrivateSwitch($privateSwitch)
{
  $this->private = $privateSwitch;
}

和吸气剂:

public function getPrivateSwitch()
{
  return $this->private;
}

【讨论】:

  • ... 或确保它只能是 0|1 你可以做$this-&gt;private = $privateSwitch ? 1 : 0;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
相关资源
最近更新 更多