【问题标题】:Edit Form PHP PDO编辑表单 PHP PDO
【发布时间】:2016-09-01 15:23:19
【问题描述】:

我在 SQL Server 数据库中有一个表。我创建了一个“edit.php”,我们可以在其中更新数据库。使用 PDO 建立数据库连接。

我在表中有很多 Null 值。当我单击“编辑”选项时,表单会弹出。如果我完全填写记录,数据库就会更新。否则我会收到此错误消息。

SQLSTATE[42000]:[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]将数据类型 nvarchar 转换为数字时出错。

我的edit.php的代码如下:

require_once('database.php');
if (isset($_POST['btn_submit'])) {
        $id = $_POST['txt_id'];
        $site = $_POST['txt_site_code'];
        $location = $_POST['txt_location_name'];

 try {
       $stmt = $conn->prepare("UPDATE MATRIX SET Site_Code=:site, Location_name=:location
WHERE OBJECTID =:id");
$stmt->execute(array(':site' => $site, ':location' => $location,':id' => $id));
if ($stmt) {


                   header('Location:index.php');

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

    $object_id = '';
    $site = '';
    $location = '';

 if (isset($_GET['id'])) {
        $id = $_GET['id'];
        $stmt = $conn->prepare("SELECT * FROM MATRIX WHERE OBJECTID=:id");
        $stmt->execute(array(':id' => $id));
        $row = $stmt->fetch();
        $object_id = $row['OBJECTID'];
        $site = $row['Site_Code'];
        $location = $row['Location_name'];
}

?>
    <h2>Edit the records</h2>

    <form action="" method="post">
        <table border="3px" cellpadding="5px">

            <tr>
                <td>Site Code</td>
                <td><input type="text" name="txt_site_code"  value="<?= $site; ?>"></td>
            </tr>

            <tr>
                <td>Location Name</td>
                <td><input type="text" name="txt_location_name" value="<?= $location; ?>"></td>
            </tr>

             <tr>
                <td><input type="hidden" name="txt_id" value="<?= $object_id; ?>"></td>
                <td><input type="submit" name="btn_submit" value="Submit"></td>
            </tr>

</table>
</form>

感谢您的帮助。

【问题讨论】:

  • 如果任何答案帮助您将其标记为正确。

标签: php sql-server edit


【解决方案1】:

您必须防止 php 接收到空数据。

例子:

$site = '';
if(isset($_POST['site'])) {
    $site = $_POST['site'];
}

在更新数据库之前,为每个要保护的值执行此操作。

【讨论】:

  • 非常感谢凯文。我不再无知了。
  • 它适用于具有文本数据类型 (NVARCHAR) 的列,但对于具有数字数据类型的列,我仍然会遇到相同的错误。
  • 对数值使用 0 而不是 '' 做同样的事情。数字字段不能用字符串初始化。
  • 嘿凯文,我尝试为数字类型分配 0。仍然没有工作。下面是两个字段,一个是文本类型,另一个是数字类型。 if (isset($_POST['txt_arc_capacity'])){ $arc = $_POST['txt_arc_capacity']; }else{ $arc = 0; }
【解决方案2】:

如果没有提交数据而不是数字值,则插入字符串值(例如“0”)。由于将数值插入字符串类型列而导致的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2018-06-13
    • 2015-05-17
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多