【问题标题】:Using an array to populate other variables using a foreach使用数组使用 foreach 填充其他变量
【发布时间】:2012-08-17 09:47:01
【问题描述】:

简单来说,我有一个包含三个相同输入字段的表单。名称不同;但是,发布时它们具有相同的结构,只是名称前缀不同(即三个系统具有不同的名称前缀:它们将是 windowstitle、mactitle、linuxtitle 等)。

目前我有一个进程只能处理一个同名文件,即 windowstitle(当然,如果表格已填写)

代码如下所示:

<?php
$title = $_POST['windowstitle'];
//validate info or redirect
if ($title != "" ) {
    $title = mysql_real_escape_string($title);
    $sql = "insert into newwindows (title) values ('$title');
    $result = mysql_query($sql) or die ("Could not insert data into DB: " . mysql_error());
?>

表单块也看起来像这样

<form action="newuserprocess.php" method="post" enctype="multipart/form-data">
<div class="form">
    <h3>Windows</h3>

    <!-- title of system name -->
    <p><label for="windowstitle"> edition of system </lable></p>
    <input type="text" name="windowstitle"  size=20 /><br />
    </div>
    <div class="form">
    <h3>Mac</h3>

    <!-- title of system name -->
    <p><label for="mactitle"> edition of system </lable></p>
    <input type="text" name="mactitle"  size=20 /><br />
    </div>
<p><input type="submit" id="submit" class="bigbutton" value="Upload" /></p>
</form>

但是,这留下了其他形式,唯一的区别是我想要输入的 db 和 post value 前缀不同。

所以我想出了一个我认为很聪明的解决方案:

<?php
$arr = array('windows', 'mac', 'linux');
foreach ($arr as &$value) {
    $title = $_POST['$valuetitle'];
    //validate info 
    if ($title != "" ) {
        $title = mysql_real_escape_string($title);
        $sql = "insert into new$value (title) values ('$title');
        $result = mysql_query($sql) or die ("Could not insert data into DB: " . mysql_error());
    }
?>

但是,这不起作用。我知道部分原因;因为'' 使变量按原样显示,因此我的$_Post 将始终以$value 的形式返回。另一个原因与我的 new$value 数据库名称相同。什么是正确的格式?我该如何完成这项工作?

【问题讨论】:

  • 您是否错过了$sql = "insert into newwindows (title) values ('$title'); 的报价?
  • $_POST[$value . "title"] - 直接使用变量,不要引用它。
  • 你到底想做什么?这似乎比它需要的复杂得多
  • 老实说,这是一个试图从头开始建立起来的小型 cms。该进程具有其他功能,例如上传图像和其他文本字段。我已经包含了要点,因此可以将其应用于更大的图景

标签: php sql arrays post foreach


【解决方案1】:

你可能想要

$title = $_POST[$value . 'title'];

$sql = "insert into new$value (title) values ('$title')";

【讨论】:

  • 感谢@databyss 解决了这个问题!我唯一的另一个问题是 sql 它会是同一件事吗?例如'code' $sql = "插入新的"。 $价值。 “(标题)值('$title')”; '代码'
  • @user1452407 避免使用这样的代码,因为您可能会遇到一些 sql 注入。
  • 您的 $sql 语句在其末尾缺少 "。此外,您不需要 ; 在 sql 语句中,因此 $sql = "insert into new$value (title) values (' $title')"; 应该可以工作。
  • @JamesPoulson 我知道。但是我已经包含了 mysql_real_escape_string 函数来防止注入。
  • 很高兴能提供帮助,尽管确实建议切换到 mysqli_ 或 PDO。
【解决方案2】:

Another reason is the same with my new$value database name. My question is what is the proper format for this?

为了清楚起见,我将$value 括在括号{$value} 中。您的格式有效,但可能更清晰。查看一些测试:http://ideone.com/A2kWU

另外,如果您不更改数组 $arr 中的值,那么您应该使用

foreach ($arr as $value) { //...

以防止意外更改。不过,在这种情况下,这没什么大不了的,因为您只使用了一次数组。

【讨论】:

    【解决方案3】:

    像这样编辑你的代码:

    <?php
         $arr = array('windows', 'mac', 'linux');
         foreach ($arr as $value) {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多