簡體   English   中英

在class.php和db.php中的PDO插入函數中形成表單數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM