将 php 表单信息更新到 sql 服务器数据库时出错
Error while updating php form information into sql server databases
我已经在 php 中创建了表单,想要更新 sql 服务器数据库中的数据。
以下是我的 ad.php 文件。
<html>
<title>FORM</title>
<body><br><br>
<form action ="db_connection.php" method="post">
Activity:<input type="text" name="name"><br><br>
Units: <input id="number"><br><br>
<input type="submit" value="submit">
</form>
上面表格中插入的数据应该在数据库的table'ad'中更新。
以下是我的 db_connection.php 文件:
<?php
class DB{
protected static $db;
const SERVER = "";
const SCHEMA = "";
const USER = "";
const PASS = "";
/*
* Sets up the database connection
* @return the database instance
*/
public static function databaseConnection(){
if(!self::$db){
try {
$databse = "sqlsrv:server=" . self::SERVER . ";Database=" . self::SCHEMA;
self::$db = new PDO($databse, DB::USER, DB::PASS);
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch(PDOException $e){
die("Error " . $e->getMessage());
}
}
return self::$db;
}
}
class ad{
public function dbAdmin(vat $Activity, int $Units): bool {
$conn = databaseConnection::getConnection();
$conn->beginTransaction();
$sql = "INSERT INTO ad('Activity', 'Units') VALUES (:Activity, :Units)";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':Units', $Units);
$stmt->bindParam(':Activity', $Activity);
if ($stmt->execute()) {
$conn->commit();
return true;
} else {
$conn->rollback();
return false;
}
}
}
我在提交表单后得到一个空白页面,并且数据库没有更新提交的新数据。
能否请您检查代码并帮助我进行更正。
您也必须将 name 属性放在 units 字段中..因为表单通过其字段名称提交....
更正:-
<html>
<title>FORM</title>
<body><br><br>
<form action ="db_connection.php" method="post">
Activity:<input type="text" name="name"><br><br>
Units: <input id="number" name="number><br><br>
<input type="submit" value="submit">
</form>
我不确定你到底想做什么,因为它是完全不完整的代码。
- 你的
$_POST
阵列在哪里?您如何以及在哪里检索 POST
请求数据?
dbAdmin
是您执行数据插入的方法,但是如何调用此方法??您在哪里实例化 class 并调用此方法?
- 此处声明的
vat
数据类型是什么 dbAdmin(vat $Activity, int $Units)
??
- 您的 html 表单中缺少
Units
的 name
属性。
我不得不使用 Docker 重现这个。正在使用容器 "microsoft/mssql-server-linux"。
I am using this extension **pdo_sqlsrv** and this driver https://breeto.id.au/2017/05/docker-alpine-linux-php-sql-server/
index.html
<!DOCTYPE>
<html>
<head>
<title>FORM</title>
</head>
<body>
<br/>
<br/>
<form action="index.php" method="post">
<label for="activity">Activity: </label>
<input id="activity" type="text" name="activity">
<br/>
<br/>
<label for="number">Units: </label>
<input id="number" type="number" name="units">
<br/>
<br/>
<input type="submit" value="submit">
</form>
</body>
</html>
index.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/Db.php';
require_once __DIR__ . '/Ad.php';
error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
ini_set('log_errors', '1');
$post = ['activity', 'units'];
if (!isset($_POST['activity'], $_POST['units'])) {
header('Invalid form', TRUE, 422);
exit;
}
$activity = filter_input(INPUT_POST, 'activity', FILTER_SANITIZE_SPECIAL_CHARS);
$units = (int) filter_input(INPUT_POST, 'units', FILTER_SANITIZE_NUMBER_INT);
if (!is_int($units)) {
header('A number must be given', TRUE, 422);
exit;
}
$adTable = new Ad();
$adTable->dbAdmin($activity, $units);
echo '<h1>Done</h1>';
echo "<p>Activity: {$activity}</p>";
echo "<p>Units: {$units}</p>";
Db.php
<?php
declare(strict_types=1);
/**
* Class Db
*/
class Db {
protected static $db;
public const SERVER = 'mssql';
public const SCHEMA = 'Whosebug';
public const USER = 'sa';
public const PASS = '';
/**
* Sets up the database connection
*
* @return \PDO
*/
public static function databaseConnection(): \PDO {
if (!self::$db) {
try {
$dsn = 'odbc:Driver={FreeTDS};Server=' . self::SERVER . ';Database=' . self::SCHEMA . ';Port=1433';
self::$db = new PDO($dsn, DB::USER, DB::PASS);
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die('Error ' . $e->getMessage());
}
}
return self::$db;
}
}
Ad.php
<?php
declare(strict_types=1);
/**
* Class Ad
*/
class Ad {
public function dbAdmin(string $activity, int $units): bool {
$conn = Db::databaseConnection();
$conn->beginTransaction();
$sql = /** @lang TSQL */
'INSERT INTO Whosebug.dbo.ad (Activity, Units) VALUES (:Activity, :Units)';
$stmt = $conn->prepare($sql);
$stmt->bindParam(':Activity', $activity, PDO::PARAM_STR);
$stmt->bindParam(':Units', $units, PDO::PARAM_INT);
if ($stmt->execute()) {
$conn->commit();
return TRUE;
}
$conn->rollBack();
return FALSE;
}
}
SQL 服务器 (微软) Table
CREATE TABLE ad
(
id INT IDENTITY
PRIMARY KEY,
Activity VARCHAR(255),
Units INT
)
GO
我已经在 php 中创建了表单,想要更新 sql 服务器数据库中的数据。
以下是我的 ad.php 文件。
<html>
<title>FORM</title>
<body><br><br>
<form action ="db_connection.php" method="post">
Activity:<input type="text" name="name"><br><br>
Units: <input id="number"><br><br>
<input type="submit" value="submit">
</form>
上面表格中插入的数据应该在数据库的table'ad'中更新。
以下是我的 db_connection.php 文件:
<?php
class DB{
protected static $db;
const SERVER = "";
const SCHEMA = "";
const USER = "";
const PASS = "";
/*
* Sets up the database connection
* @return the database instance
*/
public static function databaseConnection(){
if(!self::$db){
try {
$databse = "sqlsrv:server=" . self::SERVER . ";Database=" . self::SCHEMA;
self::$db = new PDO($databse, DB::USER, DB::PASS);
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch(PDOException $e){
die("Error " . $e->getMessage());
}
}
return self::$db;
}
}
class ad{
public function dbAdmin(vat $Activity, int $Units): bool {
$conn = databaseConnection::getConnection();
$conn->beginTransaction();
$sql = "INSERT INTO ad('Activity', 'Units') VALUES (:Activity, :Units)";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':Units', $Units);
$stmt->bindParam(':Activity', $Activity);
if ($stmt->execute()) {
$conn->commit();
return true;
} else {
$conn->rollback();
return false;
}
}
}
我在提交表单后得到一个空白页面,并且数据库没有更新提交的新数据。 能否请您检查代码并帮助我进行更正。
您也必须将 name 属性放在 units 字段中..因为表单通过其字段名称提交....
更正:-
<html>
<title>FORM</title>
<body><br><br>
<form action ="db_connection.php" method="post">
Activity:<input type="text" name="name"><br><br>
Units: <input id="number" name="number><br><br>
<input type="submit" value="submit">
</form>
我不确定你到底想做什么,因为它是完全不完整的代码。
- 你的
$_POST
阵列在哪里?您如何以及在哪里检索POST
请求数据? dbAdmin
是您执行数据插入的方法,但是如何调用此方法??您在哪里实例化 class 并调用此方法?- 此处声明的
vat
数据类型是什么dbAdmin(vat $Activity, int $Units)
?? - 您的 html 表单中缺少
Units
的name
属性。
我不得不使用 Docker 重现这个。正在使用容器 "microsoft/mssql-server-linux"。
I am using this extension **pdo_sqlsrv** and this driver https://breeto.id.au/2017/05/docker-alpine-linux-php-sql-server/
index.html
<!DOCTYPE>
<html>
<head>
<title>FORM</title>
</head>
<body>
<br/>
<br/>
<form action="index.php" method="post">
<label for="activity">Activity: </label>
<input id="activity" type="text" name="activity">
<br/>
<br/>
<label for="number">Units: </label>
<input id="number" type="number" name="units">
<br/>
<br/>
<input type="submit" value="submit">
</form>
</body>
</html>
index.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/Db.php';
require_once __DIR__ . '/Ad.php';
error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
ini_set('log_errors', '1');
$post = ['activity', 'units'];
if (!isset($_POST['activity'], $_POST['units'])) {
header('Invalid form', TRUE, 422);
exit;
}
$activity = filter_input(INPUT_POST, 'activity', FILTER_SANITIZE_SPECIAL_CHARS);
$units = (int) filter_input(INPUT_POST, 'units', FILTER_SANITIZE_NUMBER_INT);
if (!is_int($units)) {
header('A number must be given', TRUE, 422);
exit;
}
$adTable = new Ad();
$adTable->dbAdmin($activity, $units);
echo '<h1>Done</h1>';
echo "<p>Activity: {$activity}</p>";
echo "<p>Units: {$units}</p>";
Db.php
<?php
declare(strict_types=1);
/**
* Class Db
*/
class Db {
protected static $db;
public const SERVER = 'mssql';
public const SCHEMA = 'Whosebug';
public const USER = 'sa';
public const PASS = '';
/**
* Sets up the database connection
*
* @return \PDO
*/
public static function databaseConnection(): \PDO {
if (!self::$db) {
try {
$dsn = 'odbc:Driver={FreeTDS};Server=' . self::SERVER . ';Database=' . self::SCHEMA . ';Port=1433';
self::$db = new PDO($dsn, DB::USER, DB::PASS);
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die('Error ' . $e->getMessage());
}
}
return self::$db;
}
}
Ad.php
<?php
declare(strict_types=1);
/**
* Class Ad
*/
class Ad {
public function dbAdmin(string $activity, int $units): bool {
$conn = Db::databaseConnection();
$conn->beginTransaction();
$sql = /** @lang TSQL */
'INSERT INTO Whosebug.dbo.ad (Activity, Units) VALUES (:Activity, :Units)';
$stmt = $conn->prepare($sql);
$stmt->bindParam(':Activity', $activity, PDO::PARAM_STR);
$stmt->bindParam(':Units', $units, PDO::PARAM_INT);
if ($stmt->execute()) {
$conn->commit();
return TRUE;
}
$conn->rollBack();
return FALSE;
}
}
SQL 服务器 (微软) Table
CREATE TABLE ad
(
id INT IDENTITY
PRIMARY KEY,
Activity VARCHAR(255),
Units INT
)
GO