【问题标题】:Upload multiple form $_post arrays to database将多个表单 $_post 数组上传到数据库
【发布时间】:2011-01-26 12:25:50
【问题描述】:

我正在尝试将使用相同字段名称的表单上传到数据库,作为 CMS 的一部分。

这是表格(我使用 JQuery 将 div 乘以每个产品的选项数):

<form method="post" enctype="multipart/form-data" action="testing.php">
<div class="OptExtra1">
  <h3>Additional Option</h3>
  <label for="RESAddType">File type (i.e. &ldquo;CD&rdquo; or &ldquo;Download&rdquo;)</label>
  <input name="RESAddType[]" type="text" id="RESAddType" size="48" class="FW" />
  <label for="RESAddTitle">File title (i.e. &ldquo;Boxed Set of 4 CDs&rdquo;)</label>
  <input name="RESAddTitle[]" type="text" id="RESAddTitle" size="48" class="FW" />
  <label for="RESAddFType">File format (As &ldquo;MP3&rdquo; // &ldquo;WORD&rdquo; // &ldquo;PDF&rdquo;)</label>
  <input name="RESAddFType[]" type="text" id="RESAddFType" size="48" class="FW" />
  <label for="RESAddPrice">File price (Enter as &ldquo;6.99&rdquo; &ndash; <strong>NO &ldquo;&pound;&rdquo; SIGN!</strong>)</label>
  <input name="RESAddPrice[]" type="text" id="RESAddPrice" size="48" class="FW" />
  <label for="RESAddFName">File name</label>
  <input name="RESAddFName[]" type="text" id="RESAddFName" size="48" class="FW" />
  <label for="RESAddTxt">File text</label>
  <textarea name="RESAddTxt[]" id="RESAddTxt" cols="70" rows="50" class="mceAdvanced"></textarea>
  <label for="RESAddSample">File text</label>
  <textarea name="RESAddSample[]" id="RESAddSample" cols="70" rows="50" class="mceVSimple"></textarea>
 <input type="button" value="Add another option" class="SubmitButton" onclick="inserter()" />
 <hr />
</div>
<p><input type="submit" name="submit" value="Add Resource" class="SubmitButton"/><input type="hidden" name="RESCatCode" value="2" /><input type="hidden" name="RESCatSubCode" value="5" /><input type="hidden" name="submitted" value="true" /></p>

这就是我目前所拥有的 PHP

if(isset($_POST['submitted'])){

 $RESCode = 100;
 $RESAddType = $_POST['RESAddType'];
 $RESAddTitle = htmlentities($_POST['RESAddTitle'], ENT_QUOTES);
 $RESAddFType = $_POST['RESAddFType'];
 $RESAddPrice = $_POST['RESAddPrice'];
 $RESAddFName = $_POST['RESAddFName'];
 $RESAddTxt = mysql_real_escape_string($_POST['RESAddTxt']);
 $RESAddSample = mysql_real_escape_string($_POST['RESAddSample']);


 for ($i=0; $i < count($_POST['RESAddType']); $i++) {
  $OptionQuery = mysql_query ("INSERT INTO ResAdd (RESAddCode, RESCode, RESAddType, RESAddTitle, RESAddFType, RESAddPrice, RESAddFName, RESAddTxt, RESAddSample) VALUES ('', '".$RESCode."', '".$RESAddType."', '".$RESAddTitle."', '".$RESAddFType."', '".$RESAddPrice."', '".$RESAddFName."', '".$RESAddTxt."', '".$RESAddSample."');");
 }

header("Location: welcome.php");
exit;
}

它有点工作,但只是将“数组”这个词放入数据库中。 htmlentities 和 mysql_real_escape_string 帖子也不会向数据库上传任何内容。

有什么想法吗?

【问题讨论】:

  • 您需要将 mysql_real_escape_thing 应用于 all 值,包括数组条目。顺便说一句,在表单中命名为RESAdd[FType][] 可能更好。

标签: php database arrays forms


【解决方案1】:

你忘记了什么:)

$OptionQuery = mysql_query ("INSERT INTO ResAdd (RESAddCode, RESCode, RESAddType, RESAddTitle, RESAddFType, RESAddPrice, RESAddFName, RESAddTxt, RESAddSample) VALUES ('', '".$RESCode[$i]."', '".$RESAddType[$i]."', '".$RESAddTitle[$i]."', '".$RESAddFType[$i]."', '".$RESAddPrice[$i]."', '".$RESAddFName[$i]."', '".$RESAddTxt[$i]."', '".$RESAddSample[$i]."');");

在上面的代码中查看所有这些$i。如果您不使用它们,脚本将尝试使用整个数组(并且尝试将数组打印或保存为字符串总是会导致打印“Array”)。

P.S.我已经编辑了我的答案。对不起上一个,我误解了代码并发布了错误的答案。

【讨论】:

    【解决方案2】:

    你需要循环

    $cnt=count($_POST['RESAddType']);
    
    for ($counter=0; $counter < $cnt; $counter++)
    {
       $_POST['RESAddType'][$counter]// to access the value
       $_POST['RESAddPrice'][$counter]//
       //create your query here
    }
    

    【讨论】:

    • 谢谢你,它们似乎都可以工作,但这个更短:)
    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2021-11-07
    • 2014-12-03
    • 2014-08-29
    • 1970-01-01
    相关资源
    最近更新 更多