Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在db.php中将post数组格式化为class.php和PDO insert函数_Php_Mysql_Database_Forms_Pdo - Fatal编程技术网

在db.php中将post数组格式化为class.php和PDO insert函数

在db.php中将post数组格式化为class.php和PDO insert函数,php,mysql,database,forms,pdo,Php,Mysql,Database,Forms,Pdo,我想知道在提交表单发布值和使用PDO Insert函数将值输入数据库时,您是否可以帮助我解决一个问题。一旦有人能帮我找到问题,我就可以在表单区域再次使用代码。我已经检查了$conn PDO语句,它已正确连接到数据库,只是我无法从表单插入数据 我的编码布局: 表单位于cust_Form.php中,表单字段的名称与数据库中相同,但插入时生成的autoID除外。 php用于获取POST值并发送到位于db.php中的Insert函数 db.php <?php //dbdt database cla

我想知道在提交表单发布值和使用PDO Insert函数将值输入数据库时,您是否可以帮助我解决一个问题。一旦有人能帮我找到问题,我就可以在表单区域再次使用代码。我已经检查了$conn PDO语句,它已正确连接到数据库,只是我无法从表单插入数据

我的编码布局: 表单位于cust_Form.php中,表单字段的名称与数据库中相同,但插入时生成的autoID除外。 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;
?>

您不需要发送字段参数,因为如果该数组的顺序与值的顺序不同,则代码将无法工作。使用以下值中的数组键:

//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的情况下使用prepare来执行SQL语句,因为必须引用字符串,而不是整数或浮点数。

var\u dump$value;看看那里发生了什么。这将告诉你你的价值观经历了什么。你知道为什么它不起作用。检查PHP和SQL方面的错误。您可能希望在insert查询中将变量用单引号括起来:$insert=insert INTO'$table'autoID',$fields'VALUES',$VALUES';并遵循上面@Fred ii的建议--检查您的错误日志etc@MichaelDoye部分是的。但在“$table”autoID“$fields”中插入的是“表/列的记号,而不是单引号”。仅适用于字符串值。工作编辑的代码在上面有您的帮助,谢谢!您好,$handler在上面的代码中来自哪里?复制/粘贴问题。可能是$conn参数。他使用$query=$conn->prepare$insert;编辑了带有解决方案的问题;。
<!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>
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();
    }
}