只有部分PHP表单变量被插入到MySQL表中

Che*_*ars 5 php mysql

情况::

我使用PHP连接到MySQL数据库并插入一些人口统计类型表单生成的变量和一些评分结果生成计算变量.
人口统计"形式"生成的变量正在 正确插入 *...但是计算结果生成的计算变量不是*.但是,在表单提交时自动发送给用户的电子邮件中,生成计算变量的那些评分结果将被发送并正确计算,再加上在回显/打印的初始屏幕中,两种类型的变量都是可见的.
顺便提一下,这个表格是一份工作满意度调查,每个问题有15个问题,有7个选项(单选按钮),每个选项都值得一个不同的分数.
我已经为此工作了5天,在这个网站上阅读了与此主题相关的所有主题,尝试了许多不同的配置,但没有成功,也找不到插入最后7个变量值的方法(skill_variety,task_identity,task_significant,autonomy, feed_back,total,MPS)进入MYSQL数据库.

我使用隐藏输入来插入计算结果计算变量,但没有成功

<FORM  METHOD=POST action="<?php echo $_SERVER['PHP_SELF']; ?>" NAME="action" id="action"  onSubmit="return validate(this);">
    <input type="hidden" name="action" value="true">
    <input type="hidden" name="skill_variety" id="skill_variety" value="<?php echo $_POST['skill_variety'] ?>" />
    <input type="hidden" name="task_variety" id="task_variety" value="<?php echo $_POST['task_variety'] ?>" />
Run Code Online (Sandbox Code Playgroud)

如果需要更多代码,我很乐意添加它.请告诉我.

我知道你们这些人很有帮助,而且很多时候对这样的问题感到沮丧,但我希望你能提供专业的服务和一些建议.我已经有了一头薄发,希望不要在预定的时间之前将其余的头发拉出来.

我的需要

将这些顽固变量(skill_variety,task_identity,task_significant,autonomy,feed_back,total,MPS)插入到目标MYSQL表中的一些方向/建议/解决方案.

提前感谢任何方向,并希望我在这篇文章中已经清楚完整.

BTW在这里测试URL是否有助于查看情况"en vivo" http://www.marscafe.com/php/hr2/master_9.php

这是数据库设置

CREATE TABLE IF NOT EXISTS mydb3 (  
    id int(11) NOT NULL AUTO_INCREMENT,  
    s varchar(60),  
    name varchar(50),  
    email varchar(50),  
    ordered varchar(4),  
    optype varchar(50),  
    rate varchar(50),  
    time timestamp not null default now(),  
    skill_variety varchar(8),  
    task_identity varchar(8),  
    task_significant varchar(8),  
    autonomy varchar(8),  
    feed_back varchar(8),  
    total varchar(8),  
    MPS varchar(12),  
    PRIMARY KEY (id)  
) ENGINE=MyISAM
Run Code Online (Sandbox Code Playgroud)

这是INSERT和CONNECT PHP代码

<?php

//MySQL Database Connect
include '../../../../phpinc.php';

// Only process the form if $_POST isn't empty
if ( ! empty( $_POST ) ) {

// Connect to MySQL variables are defined in the include file
$mysqli = new mysqli($hostname, $username, $password, $dbName );

// Check the connection
if ( $mysqli->connect_error ) {
    die( 'Connect Error: ' . $mysqli->connect_errno . ': ' . $mysqli->connect_error );
}

// Insert the  data
$sql = "INSERT INTO `mydb3` ( name, email, ordered, optype, rate, skill_variety, task_identity, task_significant, autonomy, feed_back, total, MPS )
            VALUES 
            ( 
                '{$mysqli->real_escape_string($_POST['name'])}',
                '{$mysqli->real_escape_string($_POST['email'])}',
                '{$mysqli->real_escape_string($_POST['ordered'])}',
                '{$mysqli->real_escape_string($_POST['optype'])}',
                '{$mysqli->real_escape_string($_POST['rate'])}',
                '{$mysqli->real_escape_string($_POST['skill_variety'])}',
                '{$mysqli->real_escape_string($_POST['task_identity'])}',
                '{$mysqli->real_escape_string($_POST['task_significant'])}',
                '{$mysqli->real_escape_string($_POST['autonomy'])}',
                '{$mysqli->real_escape_string($_POST['feed_back'])}',
                '{$mysqli->real_escape_string($_POST['total'])}',
                '{$mysqli->real_escape_string($_POST['Motivating_Potential_Score'])}'
            )";

$insert = $mysqli->query($sql);

echo $sql;

// Print response from MySQL

if ( $insert ) {
print("<br>");
echo  "Success! Row ID: {$mysqli->insert_id}";
} else {
die("Error: {$mysqli->errno} : {$mysqli->error}");
}
##  #$mysqli->close();    has been moved from here  to after the automated email code
?>
Run Code Online (Sandbox Code Playgroud)

以下是使用echo $ sql在启动画面上打印的内容;

INSERT INTO mydb3 (name, email, ordered, optype, rate, skill_variety,   task_identity, task_significant, autonomy, feed_back, total, MPS) VALUES (   'Jack White', 'mars@marscafe.com','NO', 'Other','Other', '','', '','',    '','','' )  
Success! Row ID: 46  
skill_variety -- 15  
task_identity -- 18  
task_significant -- 6  
autonomy -- 9  
feed_back -- 4  
total -- 52  
MPS -- 468   
Run Code Online (Sandbox Code Playgroud)

以下是使用时在闪屏上打印的内容

echo "<pre>";
print_r($_POST);
echo "</pre>";   

Array (  
    [action] => true  
    [skill_variety] =>   
    [task_variety] =>   
    [name] => Jack White  
    [email] => mars@marscafe.com  
    [rate] => Other  
    [ordered] => NO  
    [optype] => Other  
    [question-1-answers] => E  
    [question-2-answers] => F  
    [question-3-answers] => B  
    [question-4-answers] => C  
    [question-5-answers] => A  
    [question-6-answers] => G  
    [question-7-answers] => G  
    [question-8-answers] => G  
    [question-9-answers] => G  
    [question-10-answers] => D  
    [question-11-answers] => D  
    [question-12-answers] => D  
    [question-13-answers] => D  
    [question-14-answers] => D  
    [question-15-answers] => D  
)
Run Code Online (Sandbox Code Playgroud)

小智 2

我查看了您的代码,您可能只是尝试插入不存在的内容。

首先,这是从您的用户发送到服务器的内容:

action:true
skill_variety:
task_variety:
name:TestNibbels
email:TestNibbels@dow*****ht.de
rate:Chef
ordered:YES
optype:Corporation
question-1-answers:C
question-2-answers:C
question-3-answers:D
question-4-answers:E
question-5-answers:C
question-6-answers:C
question-7-answers:C
question-8-answers:C
question-9-answers:C
question-10-answers:C
question-12-answers:C
question-13-answers:C
question-14-answers:C
question-15-answers:C
Run Code Online (Sandbox Code Playgroud)

当您在 Crome 中按 F12 进入调试控制台时,您会看到此列表

在此输入图像描述

或者当你像你一样打印 $_POST 时。Jason K 评论了缺失的 $_POST[ Motivating_Potential_Score]。并且没有task_significant,,autonomyfeed_back发送total回来。这就是为什么你的 $_POST-Array 没有为这些键设置。

skill_variety下面两行是$_POST[ ] 和$_POST[ task_variety] 为空但已设置的原因。您可以在最后一个代码块的第 8 行和第 9 行中看到这一点。

<input type="hidden" name="skill_variety" id="skill_variety" value="" />
<input type="hidden" name="task_variety" id="task_variety" value="" />
Run Code Online (Sandbox Code Playgroud)

您尝试通过 html 代码将这两个变量转发回来。为什么?尝试

session_start();
$_SESSION['skill_variety'] = 'something';
Run Code Online (Sandbox Code Playgroud)

当您的访问者回答您的表单时,将您的值存储在您的服务器中。当他成功提交您的代码后,从服务器端存储的会话中获取该值,如下所示:

session_start();
$thisissomething = $_SESSION['skill_variety'];
Run Code Online (Sandbox Code Playgroud)

然后你可以省略这些:

<input type="hidden" name="skill_variety" id="skill_variety" value="<?php echo $_POST['skill_variety'] ?>" />
<input type="hidden" name="task_variety" id="task_variety" value="<?php echo $_POST['task_variety'] ?>" />
Run Code Online (Sandbox Code Playgroud)

其次:您似乎忘记question-XX-answers使用某些功能来处理您的内容。无论这个函数是什么,它都应该填充数据库的值。我的意思是那些你(无论为什么)尝试在你的 POST-Request 中找到的: $_POST['skill_variety'] $_POST['task_identity'] $_POST['task_significant'] $_POST['autonomy'] $_POST['feed_back'] $_POST['total'] $_POST['Motivating_Potential_Score']