2009-10-27 3 views
0

Ошибка получения недопустимого аргумента при запуске следующего кода. Я пытаюсь изменить значение строки в массиве $info, затем взорвать его, взорвать его родительский массив и затем сохранить весь shebang обратно, откуда он пришел.неверный аргумент при иммобилизации в php

$rowpre = $_GET['row']; 
$newfieldvalue = $_GET['nfv']; 
$row = --$rowpre; 
$data = file_get_contents("temp.php"); 
$csvpre = explode("###", $data); 
$i = 0; 
    foreach ($csvpre AS $key => $value){ 
     $i++; 
     if($i = $row){ 
      $info = explode("%%", $value); 
      $info[$target] = $newfieldvalue; 

      $presave = implode("%%", $info);  
     }   
    } 


$save = implode("###", $presave); 
$fh = fopen("temp.php", 'w') or die("can't open file"); 
fwrite($fh, $save); 
fclose($fh); 

обновление ниже

$rowpre = $_GET['row']; 
$newfieldvalue = $_GET['nfv']; 
$target = $_GET['target']; 
$row = --$rowpre; 
$data = file_get_contents("temp.php"); 
$csvpre = explode("###", $data); 
$i = 0; 
    foreach ($csvpre AS $key => $value){ 
     $i++; 
     if($i == $row){ 
      $info = explode("%%", $value); 
      $info[$target] = $newfieldvalue; 

      $csvpre[$key] = implode("%%", $info); 
     }   
    } 


$save = implode("###", $csvpre); 
$fh = fopen("temp.php", 'w') or die("can't open file"); 
fwrite($fh, $save); 
fclose($fh); 

Target это поле в выбранной строке, что я хочу обновить с newfieldvalue данных.

ответ

2

$ save = implode ("###", $ presave);

В этот момент $presave является строкой и должен быть массивом для работы с implode. Создайте массив, в который вы нажимаете $ presave-values, и вставляете его.

1

$presave содержит последнюю обработанную строку (т. Е. Строку) и implode ожидает массив. Для того, чтобы сохранить строку обратно в исходный массив, изменения:

$presave = implode("%%", $info); 

к:

$csvpre[$key] = implode("%%", $info); 

И конвертировать весь массив CSV в строку, изменения:

$save = implode("###", $presave); 

к:

$save = implode("###", $csvpre); 

И еще один про я проблема:

if($i = $row){ 

должно быть:

if($i == $row){ 

, потому что вы хотите сравнить переменные, а не назначать $i.

+0

Его запуск без ошибок, но, похоже, не меняет строку в массиве в $ info [$ target] = $ newfieldvalue; – mrpatg

+0

Где определяется '$ target'. Попробуйте 'print_r' массив' $ csvpre' в цикле, чтобы увидеть, действительно ли вы его изменяете. –

Смежные вопросы