Php 试图从数组中创建名为输入字段的变量,但不起作用
我正在做一个项目,并试图创建一个通用部分来将各种表单数据保存到数据库中。我写下了以下代码,将所有数据发送到php字段,并将其发送到数据库。但问题是,这给了我一个错误Php 试图从数组中创建名为输入字段的变量,但不起作用,php,html,jquery,Php,Html,Jquery,我正在做一个项目,并试图创建一个通用部分来将各种表单数据保存到数据库中。我写下了以下代码,将所有数据发送到php字段,并将其发送到数据库。但问题是,这给了我一个错误 if(isset($_POST['data_for']) && $_POST['data_for']=='save') { $data = $_POST['formdata']; print_r($data); // This is showing proper array as an output
if(isset($_POST['data_for']) && $_POST['data_for']=='save') {
$data = $_POST['formdata'];
print_r($data); // This is showing proper array as an output
foreach ($data as $key => $value) {
echo $value['name']; //This gives the key (index value) of the form "Eg. email"
echo $value['value']; //This gives the value of the user input "eg. abc@xyz.com"
$$value['name'] = $value['value']; //This line gives error as "Array to string conversion"
}
echo $email; //This is just a test to print a variable created in runtime
//The insertion to database code goes here.
}
上面的代码从下面的jquery中获取值
$(document).on('submit','form.cat1', function(e){
e.preventDefault();
var forum = $(this).attr('forum');
var method = $(this).attr('method');
var nonce = $(this).attr('nonce');
var data_for = $(this).attr('data-for');
var formdata = $(this).serializeArray();
//alert(formdata);
$.ajax({
url:'formSubmitPoint.php',
method:method,
data:{formdata:formdata, nonce:nonce, forum:forum, data_for:data_for},
//processData: false,
//contentType: false,
success:function(data){
console.log(data);
if (data['result']=='success') {
if (data['action']=='redirect') {
window.location.href=data['location'];
}
if (data['action']=='show') {
$(data['location']).html(data['message']);
}
}
if (data['result']=='error') {
if (data['action']=='show') {
$(data['location']).html(data['message']);
}
}
},
error:function(data){
console.log(data);
}
});
})
jquery从下面的html中提取数据
<form class="was-validated cat1" method="post" forum='feedback' data-for="save" nonce="{$nonce}">
<div class="form-group">
<label for="newPass">Name</label>
<input type="text" class="form-control" id="name" placeholder="Your Name" name="name" required>
<div class="valid-feedback">Valid.</div>
<div class="invalid-feedback">Please fill out this field.</div>
</div>
<div class="form-group">
<label for="newPass">Email</label>
<input type="email" class="form-control" id="email" placeholder="Your Email Address" name="email" required>
<div class="valid-feedback">Valid.</div>
<div class="invalid-feedback">Please fill out this field.</div>
</div>
<div class="form-group">
<label for="newPass">Contact Number</label>
<input type="number" class="form-control" id="contact" placeholder="Your contact number" name="contact" required>
<div class="valid-feedback">Valid.</div>
<div class="invalid-feedback">Please fill out this field.</div>
</div>
<div class="form-group">
<label for="newPass">Message</label>
<textarea class="form-control" id="message" name="message" required></textarea>
<div class="valid-feedback">Valid.</div>
<div class="invalid-feedback">Please fill out this field.</div>
</div>
<button type="submit" name="submit" class="btn btn-primary btn-sm">Submit</button>
</form>
名称
有效。
请填写这个字段。
电子邮件
有效。
请填写这个字段。
联系电话
有效。
请填写这个字段。
消息
有效。
请填写这个字段。
提交
当$value['name']的值为$value时,$$value['name']将给我$email
将发送电子邮件
这是不可能的。您可以通过执行以下操作来存储它的值或对该对象的引用
$email = $value['value']; //this is a copied object
$email = &$value['value']; //this is a reference
编辑
你能行
foreach ($data as $key => $value) {
echo $value['name'];
echo $value['value'];
$text = $value['name'];
$$text = $value['value'];
echo $email;
}
不能从数组中创建变量,因为要将数组转换为字符串。您必须创建一个字符串类型变量来帮助它
foreach ($data as $key => $value) {
$text = $key;
$$text = $value;
echo $email;
}
$$value['name']=$value['value'[;
,修复语法$$value['name']=$value['value'];
您的第二个“[”应该是一个“]”这里:$value['value'.$$的意思是什么?很抱歉,这里是一个打字错误…我在代码中写得正确,仍然不起作用。@Nikkorian the$$var(双美元)是一个引用变量,它在其中存储$variable的值。@nagyi,它在其他项目中也以同样的方式工作。我在同一组代码上工作了很长时间。这一次我缺少了一些东西,这导致了错误。@VikashMishra你能告诉我$email和它的值“email”之间的区别吗不是引用/或新对象?或者你能告诉我$$value['name']是做什么的吗?@nagyi我只是想用变量的值创建一个新变量。例如,$$value['name']的值为$value['name']时会给我$email将是email
当它将是其他变量时,变量名将是其他变量。我没有硬编码变量名,因为它将在运行时生成。这没关系,但为什么您需要它?为什么您不能只将值存储在普通变量中?xd为什么这样做而不是以逻辑方式受益?这对我有帮助在多个方面,例如,我不必为使用此方法提交的每个表单硬编码变量名称。