1

我正在尝试使用 php 验证表单,因为它有一个需要验证的文件输入。

基本上,我的表单操作将其发送到 validate.php,它验证表单字段并使用 cURL 中的 POST 将无效数据发送回表单:

$data = array(
    'nameError' => $nameError,
    'name' => $name,
    'description' => $desc,
    'descError' => $descError,
    'spriceError' => $spriceError,
    'sprice' => $sprice,
    'iprice' => $iprice,
    'incprice' => $incprice,
    'incprice' => $incprice,
    'durError' => $durError,
    'location' => $location,
    'img' => $imgError
);

foreach($data as $key=>$value){
    $field_string .= $key.'='.$value.'&';

}
rtrim($field_string, '&');


$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'sellanitem.php');
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $field_string);

curl_exec($ch);

curl_close($ch);
header("Location: sellanitem.php");

在我的表单页面中,我检查是否设置了帖子数据:

if(isset($_POST['name'])){
    $name = $_POST['name'];

}else{
    $name = "";
}

if(isset($_POST['nameError'])){
    $nameError = $_POST['nameError'];
}else{
    $nameError = "";
}

if(isset($_POST['durError'])){
    $durError = $_POST['durError'];

}else{
    $durError = "";
}

if(isset($_POST['description'])){
    $desc = $_POST['description'];

}else{
    $desc = "";
}

等等

然后我根据变量的值显示消息:

            <td>
                <textarea id="name" name="name" title="name" rows="2" cols ="60" style="resize:none; float:right; font-family: Arial;" value=""><?php echo $name;?></textarea>
<?php
if($nameError != ""){
    echo $nameError;
}

在谷歌中查找“自动提交表单 php”后,我来到了这个方法。我的想法是,如果我可以自动提交表单,我可以简单地将错误消息作为数据字段包含在我的 sellanitem.php 中。我不知道怎么想,这个 cURL 的东西让我很困惑,到目前为止,我提交了带有无效输入的表单字段来测试它,它只是加载了一个空白页面。我也尝试放置标题(“位置:selleritem.php”),但没有显示错误消息。

什么可能是错误的/可以达到相同结果的替代方法的建议?

干杯,邦迪

4

2 回答 2

3

如果要解析 cURL 请求的返回,则需要:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

此外

$output = curl_exec($ch);

但是,这似乎是一个本地文件......为什么你不能直接include 'sellanitem.php'而不是通过 cURL 传递帖子数据?

还值得注意的是Location标题应该使用Absolute URI

于 2012-09-18T13:33:01.500 回答
1

您没有设置输出缓冲区,因此您需要将 exec 分配给变量:

$data = curl_exec($ch);

数据就是它返回的东西。如果您发回一个 json 错误字符串等,那么您就是金子。

于 2012-09-18T13:25:54.157 回答