2011-05-04 28 views
28

Obtengo información de la base de datos, la guardo en conjunto y la repito en un formulario con estructura de bucle y tengo problemas cuando intento guardar el información modificada a la base de datos.Problema con: Error fatal: operador [] no compatible con cadenas en

estoy recibiendo este error: Fatal error: [] operador no soportado para cadenas en ....

Código:

$namesql1="SELECT name,date,text,date2 FROM table WHERE something= '$something'"; 
$nameresult1=mysql_query($namesql1); 
$countrows=mysql_num_rows($nameresult1); 
while($row = mysql_fetch_array($nameresult1, MYSQL_ASSOC)) 
    { 
    $name[]= $row['name']; 
    $date[]= $row['date']; 
    $text[] = $row['text']; 
    $date2 [] = $row['date2 ']; 
    } 
. 
. 
. 
FORM 
. 
. 
. 
$wrotesql="UPDATE service_report SET name ='$name' , $date = '$date',$text = '$text[$nro]', ser_date = '$date2[$nro]' WHERE something = '$something')"; 

$wroteresult=mysql_query($wrotesql);  

Podría alguien por favor, dame una pista de lo que' estoy haciendo mal?

Gracias.

+3

en ...? ¿Podrías decirnos la línea? – Shoe

+0

Eso funcionó como un amuleto, paréntesis modificados para paréntesis. –

Respuesta

50

Obtiene este error al intentar utilizar la sintaxis de inserción de matriz corta en una cadena.

Por ejemplo, este

$foo = 'foo'; 
$foo[] = 'bar'; // ERROR! 

Me arriesgaría a decir que uno o más de sus variables $name, $date, $text o $date2 se ha inicializado como una cadena.

Editar: Mirando de nuevo a su pregunta, parece que en realidad no desea utilizarlos como matrices ya que los está tratando como cadenas más abajo.

Si es así, cambiar sus asignaciones a

$name = $row['name']; 
$date = $row['date']; 
$text = $row['text']; 
$date2 = $row['date2']; 
+1

He descubierto que esto puede ser un problema asociado con la migración de php 5 a php 7. php 5 era más tolerante a la ambigüedad en cuanto a si una variable era una matriz o no, que php 7. En la mayoría de los casos, la solución es declarar explícitamente la matriz, como se explica en esta respuesta. –

24

Probablemente han definido $name, $date, $text o $date2 a ser una cadena, como:

$name = 'String'; 

Entonces si lo trata como una matriz dará un error fatal:

$name[] = 'new value'; // fatal error 

para resolver su problema sólo tiene que añadir el siguiente código al principio del bucle:

$name = array(); 
$date = array(); 
$text = array(); 
$date2 = array(); 

Esto restablecerá su valor a la matriz y luego se va a poder utilizarlos como matrices.

Cuestiones relacionadas