2013-03-27 54 views
1

我試圖插入文本框到MySQL錶行,使用while循環。PHP - 數組到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 

然而,它沒有更新表或打印數組(用於測試)。有什麼建議麼?

+0

Localhost不適用於我們:-)此外,您可能還想回到PHP的基礎知識。這遠不是合乎邏輯的,而是你在這裏試圖做的簡單事情。 printr()也不是一個函數(不是默認的 - > print_r())。以及爲什麼創建變量再次以非常怪異的方式重用它們。 – 2013-03-27 15:16:01

+0

您確認'$ row_Num'大於或等於'1'嗎?換句話說,你確定你正在進入'while'循環嗎? – jnthnjns 2013-03-27 15:19:00

+0

謝謝, 但我仍然不明白爲什麼它不起作用。 需要在數組部分中更改哪些內容? – user2216190 2013-03-27 15:21:46

回答

2

有幾個小事情錯了,用你的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' 
     ) 
+0

謝謝你的解決方案- 但代碼(第一個)只打印第一個數組。 編輯 - 我認爲問題是與$ row_Num,現在cheking ... – user2216190 2013-03-27 19:35:15

+0

這很有趣,我能夠得到這兩個。你如何設置'$ row_Num'? – jnthnjns 2013-03-27 19:37:37

+0

我將$ row_Num更改爲名爲「$ _SESSION ['row_Num']」的會話。 當我打印$ _SESSION ['row_Num']它顯示正確的值,但是當我在while循環中使用它時,它不能正常工作.. – user2216190 2013-03-27 20:17:21

1

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

'date_'.'$i'總是date_$i,沒有可變$i的擴張是由於使用單引號來完成的。如果要擴展字符串內部的變量,請使用雙引號(如果$變量位於字符串的開頭或末尾,則不使用引號)。

+0

謝謝你的回答。 但代碼仍然不起作用... – user2216190 2013-03-27 15:19:51

0

注意,調用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()); 
?>