使用数组和foreach循环填充其他变量

3

简单来说,我有一个表格,其中有三个完全相同的条目字段。它们的名称不同; 但是,当它们被发布时,它们具有相同的结构,只是名称前缀不同(即三个系统具有不同的名称前缀:它们将是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>

然而,这样做会使其他形式被排除在外,唯一的区别是我想要输入的数据库和后缀值前缀不同。

因此,我想出了一个我认为很聪明的解决方案:

<?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'); 中是否缺少引号? - irrelephant
$_POST[$value . "title"] - 直接使用变量,不要将其引用。 - Michael Berkowski
您到底想做什么?这似乎比必要的复杂多了。 - Eva
说实话,这是我试图从头开始构建的一个小CMS。该过程还具有其他功能,例如上传图像和其他文本字段。我已经包含了必要的内容,以便可以应用于更大的项目。 - user1452407
3个回答

2
您可能需要的是:

你很可能需要

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

并且

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

谢谢@databyss,问题解决了!我现在唯一的问题是SQL,它会是同样的东西吗?例如'code' $sql = "insert into new". $value . "(title) values('$title')"; 'code' - user1452407
@user1452407 避免编写这样的代码,因为你可能会遭受 SQL 注入攻击。 - James P.
你的 $sql 语句末尾缺少 "。此外,你不需要在 sql 语句中加入 ;,所以 $sql = "insert into new$value (title) values ('$title')" 应该可以工作。 - databyss
变量将在双引号("")中解析,但不会在单引号('')中解析。 - databyss
1
@JamesPoulson 我知道。然而,我已经包含了mysql_real_escape_string函数来防止注入。 - user1452407
1
很高兴能够提供帮助,尽管建议切换到mysqli_或PDO。 - databyss

1

另一个原因是我的新数据库名称与$value相同。我的问题是这个的正确格式是什么?

我会用括号{$value}来包围$value以增加清晰度。您的格式可以工作,但可能不够清晰。请参阅一些测试:http://ideone.com/A2kWU

此外,如果您不更改数组$arr中的值,则应该只使用

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

为了防止意外更改。但在这种情况下,这并不是什么大问题,因为您只使用数组一次。


0

像这样编辑您的代码:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接