遍历2个数组仅循环第一个元素

桑托纳

我创建2点不同的阵列$postvalues$filut从表单输入。然后单击按钮,将数组发送到我的数据库表中。数组由文件名和一个简短的介绍组成。

for($i=0; $i<count($_FILES['upload']['name']); $i++) 
{
    $filut = basename($_FILES['upload']['name'][$i]);
}
if(isset($_POST['subi'])) 
{
     $data1 = $_POST['answers'];
     foreach($data1) as $postValues) 
     {
         $sql4 = 'INSERT INTO db_image (text, image) VALUES("'.$postValues.'","'.$filut.'")';
         $my->query($sql4);
     }
}    

这里的问题是输出。foreach循环$postValues正确输出,但仅复制$filut第一个元素。

错误输出的示例:

 this is picture1  picture1.png
 this is picture2  picture1.png  //Supposed to say 2nd element of $filut: "picture2.png"

Foreach会正确通过第一个数组,但只会复制该$filut数组。我尝试寻找答案,尝试组合数组,但没有成功。

如何正确遍历两个数组并将它们插入数据库?

彼得·鲍尔斯

听起来您正在尝试使用嵌套循环,但是实际上您在开始时只有一个循环,然后将其关闭,然后循环遍历其余循环。您需要移动下面标记的右花括号:

for($i=0; $i<count($_FILES['upload']['name']); $i++) {
  $filut = basename($_FILES['upload']['name'][$i]);
 } <<<<<<<<<=========== This curly brace closes the "for loop"
if(isset($_POST['subi'])) {
 $data1 = $_POST['answers'];
 foreach($data1) as $postValues) {
 $sql4 = 'INSERT INTO db_image (text, image) VALUES("'.$postValues.'","'.$filut.'")';
 $my->query($sql4);
 }
} 
??? <<<<<======== For a nested loop you should close it here

或者您可能试图将其分配$filut为数组,在这种情况下,启动for...循环需要如下所示:

for($i=0; $i<count($_FILES['upload']['name']); $i++) {
  $filut[] = basename($_FILES['upload']['name'][$i]);
 }

(请注意在[]之后添加$filut。)

但是,如果这是您想要的(将$ filut放入数组中),则需要在下面进行一些不同的操作,以便仅访问数组中的一个元素。这是嵌套foreach解决问题的地方-也许这就是您打算解决的方式:

if(isset($_POST['subi'])) {
    $data1 = $_POST['answers'];
    foreach($data1 as $postValues) {
        foreach ($filut as $f) {
            $sql4 = 'INSERT INTO db_image (text, image)
                     VALUES("'.$postValues.'","'.$f.'")';
            $my->query($sql4);
        }
    }
}

这将为$ filut中的每个值为$ _POST ['answers']中的每个值插入一行。那是你想要的吗?还是$ filut和$ _POST ['answers']是并行的,并且您希望在插入上具有1-1的相关性?

最后,我建议您使用prepare和bind,因为您是从用户那里获取数据的。此示例从此处复制/修改

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* Prepare an insert statement */
$query = "INSERT INTO db_image (text, image) VALUES (?,?)";
$stmt = $my->prepare($query);

#### NOTE THE USE OF YOUR VARIABLES HERE IN THE BIND - the "ss" means they are strings
$stmt->bind_param("ss", $postValues, $f);

#### HERE IS WHERE YOUR CODE IS GETTING INSERTED
foreach($data1 as $postValues) {
    foreach ($filut as $f) {
        /* Execute the statement */
        $stmt->execute();
    }
}

/* close statement */
$stmt->close();

/* close connection */
$my->close();
?>

我不能保证我更改了所有变量以匹配您的代码,但是希望它足够接近,可以给您一个想法。此解决方案(1)保护您免受SQL注入的侵害(否则这是您代码中的严重缺陷),并且(2)通过准备/执行周期将更快。

请在示例中注意谨慎的缩进,其中所有缩进完美地排列在一起,每个缩进包含3个或更多的空格-我无法告诉您多少次我看到草率的(或太少的)缩进使人们错过了本来很明显的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

for循环仅返回bash脚本中的第一个数组元素

压缩两个数组,总是第一个数组的3个元素,然后第二个数组的2个元素

仅循环第一个和最后一个元素

遍历数组的每个元素(第一个元素除外)

映射Javascript中数组数组中每个数组的第一个元素

循环多维数组,仅获取第一个元素

数组第一个元素

在PHP中合并2个数组,仅保留第一个数组中的键

Vue:Filter返回一个数组,如何获取第一个元素

比较2个数组值仅推入第一个结果

遍历元组列表并仅解压缩第一个元素

从列表中创建一个数组,其中数组的第一个元素是列表中的第一个元素

在bash中遍历2个数组-仅遍历每个数组中的第一个值

需要一个数组,其中新数组的第一个元素=除第一个元素以外的所有元素的和

InOrder遍历无限循环并仅打印第一个节点

PHP有2个数组,如何根据第一个数组的顺序获取两个数组中都存在的第一个元素?

自动用元素列表循环填充数组,仅设置第一个元素

for循环未处理数组的第一个元素

foreach中的数组仅显示第一个数组

PHP:循环获取第一个数组

如何停止循环以仅获取第一个数组的内容?

循环遍历 Div 中的元素仅获取第一个元素

我想减去 2 个数组并得到第三个数组,它由第一个数组的剩余元素组成

尝试比较两个数组并打印第一个数组的行(如果它们匹配并为整个第一个数组循环)

第一个数组元素在循环 C++ 中丢失

显示第一个数组元素 - ReactJS

通过第一个数组的元素连接两个 numpy 数组

循环遍历 PHP 中的一组数组以仅生成一个数组

如何以array1的第一个元素和array2的第一个元素等方式组合2个数组形成一个新数组