[英]Form post array to class.php and PDO insert function in db.php
我想知道在將表單提交給POST值並使用PDO插入函數將值輸入數據庫時是否可以幫助我解決問題。 一旦有人可以幫助我找到問題,我將能夠在表單區域再次使用代碼。 我已經檢查了我的$ conn PDO語句,它正確連接到數據庫,只是我無法從表單中插入數據。
我的編碼布局:表單位於cust_form.php中,表單字段的名稱與數據庫中的相同,但插入時生成的autoID除外。 Class.php用於獲取POST值並將其發送到位於db.php中的Insert函數。
db.php中
<?php
//dbdt database class
if(!class_exists('dbdt')){
class dbdt {
//Connect and select database
function connect() {
try {
require_once('config.php');
$conn = new PDO('mysql:host=localhost;dbname=displaytrends', $DB_USER, $DB_PASS);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
//Connect to above
function __construct() {
$this->connect();
}
//Insert data into database
function insert($conn, $table, $fields, $values) {
try{
$fields = implode(", ", $fields);
$values = implode(", ", $values);
$insert = "INSERT INTO $table (autoID, $fields) VALUES ('', $values)";
$query = $handler->prepare($insert);
$query->execute();
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
}
}
$dbdt = new dbdt;
?>
class.php
<?php
if(!class_exists('cust_form')){
class cust_form {
/*
CUSTOMER FORM = cust_form.php
*/
function cust_upd_cre_del(){
if ( isset( $_POST['cust_upd'] ) ) {
$int_custID=$_POST['int_custID'];
$cust_company=$_POST['cust_company'];
$cust_address=$_POST['cust_address'];
$cust_postcode=$_POST['cust_postcode'];
$cust_contact_1=$_POST['cust_contact_1'];
$cust_contact_2=$_POST['cust_contact_2'];
$cust_tel=$_POST['cust_tel'];
$cust_mob=$_POST['cust_mob'];
$cust_DDI=$_POST['cust_DDI'];
$cust_email=$_POST['cust_email'];
$cust_notes=$_POST['cust_notes'];
require_once('db.php');
$table = 'customers';
$fields = array(
'int_custID',
'cust_company',
'cust_address',
'cust_postcode',
'cust_contact_1',
'cust_contact_2',
'cust_tel',
'cust_mob',
'cust_DDI',
'cust_email',
'cust_notes'
);
$values = array (
'int_custID' => $int_custID,
'cust_company' => $cust_company,
'cust_address' => $cust_address,
'cust_postcode' => $cust_postcode,
'cust_contact_1' => $cust_contact_1,
'cust_contact_2' => $cust_contact_2,
'cust_tel' => $cust_tel,
'cust_mob' => $cust_mob,
'cust_DDI' => $cust_DDI,
'cust_email' => $cust_email,
'cust_notes' => $cust_notes
);
$insert = $dbdt->insert($conn, $table, $fields, $values);
if ( $insert == TRUE ) {
}
} else {
die('Your form was not submitted.');
}
}
}
}
$cust_form = new cust_form;
?>
cust_form.php
<!doctype html>
<?php
require_once('load.php');
?>
<html>
<head>
<meta charset="UTF-8">
<title>Customer Form</title>
</head>
<body>
<form action="" method="POST" name="cust_details_form" id="cust_details_form">
<label>Account No:</label>
<input type="text" name="int_custID" id="int_custID" />
<label>Company:</label>
<input type="text" name="cust_company" id="cust_company"/>
<label>Address:</label>
<textarea type="text" rows=5 name="cust_address" id="cust_address"></textarea>
<label>Postcode:</label>
<input type="text" name="cust_postcode" id="cust_postcode"/>
<label>Contact 1:</label>
<input type="text" name="cust_contact_1" id="cust_contact_1"/>
<label>Contact 2:</label>
<input type="text" name="cust_contact_2" id="cust_contact_2"/>
<label>Telephone:</label>
<input type="text" name="cust_tel" id="cust_tel"/>
<label>Mobile:</label>
<input type="text" name="cust_mob" id="cust_mob"/>
<label>DDI:</label>
<input type="text" name="cust_DDI" id="cust_DDI"/>
<label>Email:</label>
<input type="email" name="cust_email" id="cust_email"/>
<label>Notes:</label>
<textarea type="text" rows=5 colums=1 name="cust_notes" id="cust_notes"></textarea>
<input type="submit" name="cust_upd" id="cust_upd" value="Update">
<input type="submit" name="cust_del" id="cust_del" value="Delete">
</form>
</body>
</html>
load.php包含require_once db.php,class.php和config.php(包含用戶名和密碼)。 這個文件還可以。
感謝您提供的任何幫助!
編輯感謝您的所有幫助! 這是任何需要它的人的工作代碼!
function ins_upd($table, $values) {
try{
include('config.php');
$conn = new PDO('mysql:host=localhost;dbname=displaytrends;charset=utf8', $DB_USER, $DB_PASS);
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//Strip $_POST array to fields with values
$values=array_filter($values);
//Take array keys from array
$field_keys=array_keys($values);
//Implode for insert fields
$ins_fields=implode(",", $field_keys);
//Implode for insert value fields (values will binded later)
$value_fields=":" . implode(", :", $field_keys);
//Create update fields for each array create value = 'value = :value'.
$update_fields=array_keys($values);
foreach($update_fields as &$val){
$val=$val." = :".$val;
}
$update_fields=implode(", ", $update_fields);
//SQL Query
$insert = "INSERT INTO $table ($ins_fields) VALUES ($value_fields) ON DUPLICATE KEY UPDATE $update_fields";
$query = $conn->prepare($insert);
//Bind each value based on value coming in.
foreach ($values as $key => &$value) {
switch(gettype($value)) {
case 'integer':
case 'double':
$query->bindParam(':' . $key, $value, PDO::PARAM_INT);
break;
default:
$query->bindParam(':' . $key, $value, PDO::PARAM_STR);
}
}
$query->execute();
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
您不需要發送“字段”參數,因為如果該數組的順序不同於“值”的順序,則您的代碼將無法工作。 使用“值”中的數組鍵:
//Insert data into database
function insert($conn, $table, $values) {
try {
$keys = array_keys($values);
$fields = implode(", ", $keys);
$values = ":" . implode(", :", $keys);
$insert = "INSERT INTO $table ($fields) VALUES ($values)";
$query = $handler->prepare($insert);
foreach ($values as $key => &$value) {
switch(gettype($value)) {
case 'integer':
case 'double':
$query->bindParam(':' . $key, $value, PDO::PARAM_INT);
break;
default:
$query->bindParam(':' . $key, $value, PDO::PARAM_STR);
}
}
$query->execute();
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
希望能幫助到你。 沒有完整的代碼,我無法測試。
PS:避免在不使用bindParam的情況下使用准備執行SQL語句,因為您必須引號而不是整數或浮點數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.