【问题标题】:PHP - Array to MySQL tablePHP - 数组到 MySQL 表
【发布时间】:2013-03-17 17:49:47
【问题描述】:

我正在尝试使用 while 循环将文本框字段文本插入 MySQL 表行。

这是部分代码:($datetoday = 270313)

                        <?php 


        $i=0;
        while ($i < $row_Num) {
            ${'date_'.$i} = $_REQUEST["{'date_'.$i}"];
            ${'text_'.$i} = $_REQUEST["{'text_'.$i}"];
            ${'con_name_'.$i} = $_REQUEST["{'con_name_'.$i}"];
            ${'con_phone_'.$i} = $_REQUEST["{'con_phone_'.$i}"];

           $values= array(${'date_'.$i},${'text_'.$i},${'con_name_'.$i},${'con_phone_'.$i});
           print_r($values);
           $sql = "INSERT INTO data.$datetoday(`KEY,`DATE`,`COLOR`,`TEXT`,`CON_NAME`,`PHONE`) VALUES (`$i`,`$values[0]`,`FFFFFF`,`$values[1]`,`$values[2]`,`$values[3]`)";
           $result = mysql_query($sql,$link);
           if (!$result) {
            die ("Can't create table named $datetoday : " . mysql_error());
            }
           $i++;
           }


        ?>

页面的网址是:

> http://localhost:5110/test.php?date_0=000000&text_0=QWERTY&con_name_0=iuytre&con_phone_0=0000000000&date_1=111111&text_1=ASDFGHJK&con_name_1=lkjhgfd&con_phone_1=1212121212

但是它不会更新表格或打印数组(用于测试)。有什么建议吗?

【问题讨论】:

  • Localhost 对我们不起作用 :-) 此外,您可能想回到 PHP 的基础知识。这与您在这里尝试做的事情远非合乎逻辑。 printr() 也不是函数(默认情况下不是 -> print_r())。以及为什么要创建变量以再次以非常奇怪的方式重用它们..
  • 您是否确认$row_Num 大于或等于'1'?换句话说,你确定你进入了while 循环吗?
  • 谢谢,但我仍然不明白为什么它不起作用。数组部分需要改变什么?
  • @Asok - 是的,我确定。
  • 什么是 $datetoday ?在使用之前不会出现

标签: php mysql arrays while-loop


【解决方案1】:

有几个小错误,使用你的 URL 子字符串我得到了它的工作,见下文:

$row_Num = 1;
$i = 0;
while ($i <= $row_Num) {
    // In the $_REQUEST you were indexing the curly braces, remove them.
    ${"date_" . $i} = $_REQUEST["date_$i"];
    ${"text_" . $i} = $_REQUEST["text_$i"];
    ${"con_name_" . $i} = $_REQUEST["con_name_$i"];
    ${"con_phone_" . $i} = $_REQUEST["con_phone_$i"];

    $values = array(
        ${"date_" . $i},
        ${"text_" . $i},
        ${"con_name_" . $i},
        ${"con_phone_" . $i}
    );
    // Not printr() And this is how I print arrays, it is cleaner.
    echo '<pre>', print_r($values, true), '</pre>';
    $i++;
}

输出:

Array
(
    [0] => 000000
    [1] => QWERTY
    [2] => iuytre
    [3] => 0000000000
)
Array
(
    [0] => 111111
    [1] => ASDFGHJK
    [2] => lkjhgfd
    [3] => 1212121212
)

编辑

我仍然不清楚你是如何设置$row_Num

$_SESSION['row_Num'] = $_REQUEST["row_Num"];

这并没有告诉我任何信息,因为您显示的 $_REQUEST 字符串不包含“row_Num”。因此,由于您的查询需要DATE,我创建了一个foreach 循环来计算DATE 出现的次数。试试下面的代码,让我知道。

$i = 0;
$count = 0;
// I added this line to take care of how many times the loop runs
foreach ($_REQUEST as $key => $value) { (strstr($key, 'date')) ? $count++ : NULL; }
// Changed '<=' to '<' because it would loop 3 times since we start $i at 0.
// $i needs to remain at 0 since your URL substring indexing starts at 0.
while ($i < $count) {
    ${'date_' . $i} = $_REQUEST["date_$i"];
    ${'text_' . $i} = $_REQUEST["text_$i"];
    ${'con_name_' . $i} = $_REQUEST["con_name_$i"];
    ${'con_phone_' . $i} = $_REQUEST["con_phone_$i"];

    $values = array(
        ${"date_" . $i},
        ${"text_" . $i},
        ${"con_name_" . $i},
        ${"con_phone_" . $i}
    );

    ### Echo for troubleshooting ###
    echo '<pre>', print_r($values, true), '</pre>';
    $sql = "INSERT INTO `data`.`".$datetoday."` (`KEY`,`DATE`,`COLOR`,`TEXT`,`CON_NAME`,`PHONE`) VALUES 
        (
            '".$i."',
            '".$values[0]."',
            'FFFFFF',
            '".$values[1]."',
            '".$values[2]."',
            '".$values[3]."'
        )";

    ### Echo for troubleshooting ###
    echo '<pre>', $sql, '</pre>';
    $result = mysql_query($sql, $link) or die ('Could not insert values: '.mysql_error());
    $i++;
}

输出:

Array
(
    [0] => 000000
    [1] => QWERTY
    [2] => iuytre
    [3] => 0000000000
)
INSERT INTO `data`.`280313` (`KEY`,`DATE`,`COLOR`,`TEXT`,`CON_NAME`,`PHONE`) VALUES 
        (
            '0',
            '000000',
            'FFFFFF',
            'QWERTY',
            'iuytre',
            '0000000000'
        )
Array
(
    [0] => 111111
    [1] => ASDFGHJK
    [2] => lkjhgfd
    [3] => 1212121212
)
INSERT INTO `data`.`280313` (`KEY`,`DATE`,`COLOR`,`TEXT`,`CON_NAME`,`PHONE`) VALUES 
        (
            '1',
            '111111',
            'FFFFFF',
            'ASDFGHJK',
            'lkjhgfd',
            '1212121212'
        )

【讨论】:

  • 感谢您的解决方案 - 但代码(第一个)仅打印第一个数组。编辑 - 我认为问题在于 $row_Num,现在检查它......
  • 这很有趣,我能够同时获得两者。你怎么设置$row_Num
  • 我将 $row_Num 更改为一个名为“$_SESSION['row_Num']”的会话。当我打印 $_SESSION['row_Num'] 它显示了正确的值,但是当我在 while 循环中使用它时它不能很好地工作..
  • 您能否编辑您的问题以准确显示您是如何设置$row_Num$_SESSION['row_Num'] 的,您能否进一步解释一下您所说的“它不能正常工作”是什么意思。对不起,我有点困惑。
  • 至于'第一个 MySQL 行已更新',可能是因为您将 $i 插入到数据库中,可能是自动递增字段或唯一字段。验证KEY不需要唯一或者可以设置为'0',$i的第一次迭代是0
【解决方案2】:

使用'date_' . $i 代替'date_'.'$i'

'date_'.'$i' 始终为date_$i,由于使用了单引号,不会对变量$i 进行扩展。如果要在字符串中展开变量,请使用双引号(如果 $variables 位于字符串的开头或结尾,则不要使用引号)。

【讨论】:

    【解决方案3】:

    请注意,调用 n 次 SQL 请求很慢。如果你发送一个 SQL 请求会更好。像这样的:

    <?php 
     $i=0;$comma="";$all_values="";
     while($i<$row_Num)
     {${'date_'.$i}=$_REQUEST["date_".$i];
      ${'text_'.$i}=$_REQUEST["text_".$i];
      ${'con_name_'.$i}=$_REQUEST["con_name_"$i];
      ${'con_phone_'.$i}=$_REQUEST["con_phone_".$i];
    
      $values=array(${'date_'.$i},${'text_'.$i},${'con_name_'.$i},${'con_phone_'.$i});
      print_r($values);
      $all_values.=$comma."('".$i."','".$values[0]."','FFFFFF','".$values[1]."','".$values[2]."','".$values[3]."')";
      $comma=",";
      $i++;
     }
     $sql="INSERT INTO data.$datetoday (`KEY,`DATE`,`COLOR`,`TEXT`,`CON_NAME`,`PHONE`) VALUES ".$all_values;
     $result=mysql_query($sql,$link);
     if(!$result)
         die("Can't create table named $datetoday : ".mysql_error());
    ?>
    

    【讨论】:

      猜你喜欢
      • 2014-07-21
      • 2023-03-24
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 2013-04-06
      • 1970-01-01
      相关资源
      最近更新 更多