Foros del Web » Programando para Internet » PHP »

Problema con ckeditor al subir imágenes

Estas en el tema de Problema con ckeditor al subir imágenes en el foro de PHP en Foros del Web. Hola. Tengo un problema raro que detecté hace poco. Estoy haciendo una web en el trabajo que, en varias de sus secciones permite colocar texto, ...
  #1 (permalink)  
Antiguo 25/05/2012, 01:11
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años, 1 mes
Puntos: 1
Problema con ckeditor al subir imágenes

Hola. Tengo un problema raro que detecté hace poco. Estoy haciendo una web en el trabajo que, en varias de sus secciones permite colocar texto, imágenes, etc. utilizando el ckeditor.

Probando la web en local todo me funcionaba perfectamente, si bien es cierto que no podía subir imágenes a través del ckeditor.

Así que la sorpresa me la llevé cuando probé la web en el servidor. Resulta que, si se sube únicamente texto no hay ningún problema, pero cuando se coloca alguna imagen a través de ese editor, no graba a la primera los datos cuando se pulsa el botón del formulario.

Imaginémonos que en la descripción de la sección subimos un díptico de la empresa. Cuando pulsas "guardar la descripción" en el formulario, vuelve a cargarse la misma página con el campo descripción en blanco (no guarda nada en la base de datos). Vuelves a subir el díptico, le das a "guardar la descripción" y ya la guardaría.

¿Alguien tiene alguna idea de por qué puede ser? Muchas gracias.
  #2 (permalink)  
Antiguo 25/05/2012, 21:40
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
Respuesta: Problema con ckeditor al subir imágenes

Ya descargaste la ultima version?
Si es asi entonces prueba una version antigua
  #3 (permalink)  
Antiguo 25/05/2012, 22:45
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con ckeditor al subir imágenes

Deberías revisar lo que estás recibiendo en $_POST para ver cuál puede ser el problema, un simple var_dump($_POST); puede serte útil.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 31/05/2012, 04:23
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Problema con ckeditor al subir imágenes

Hola. Perdón por tardar tanto en responder, pero no pude probarlo antes, porque no tengo acceso al servidor (trabajo en local), y hasta hoy no pude mirarlo junto con mi jefe.

El caso es que ahora nunca graba cuando se incrustan imágenes. Pero el problema es sólo a incrustarlas, de tal manera que si la incrustas, la cortas y la pegas, sí que deja, pero al incrustarla directamente no.

Probé lo de var_dump(), y cuando sí que funciona, pues puedo ver que se trata de un string y la longitud, pero cuando incrusto una imagen, que es cuando no funciona, lo que hace es recargar la página tal cual estaba al acceder a ella, y tampoco muestra la información del var_dump.

Os copio y pego parte del código, el correspondiente a como graba el texto en los distintos idiomas una vez que se pulsa el botón de guardar, y también os muestro como está el formulario, y como funciona el ckeditor.

Saludos y gracias por adelantado.

Código:
if (isset ($_REQUEST['guardar'])){ // Es decir, si pulso el botón de continuar

	if (isset ($_SESSION['token'])  && $_POST['token'] == $_SESSION['token']){
	
		//valor_oculto es un campo oculto del formulario "form1".
		if ((isset($_POST["valor_oculto"])) && ($_POST["valor_oculto"] == "form1")) {
	

			$otra_insercion = sprintf ("UPDATE `contenido_table` SET contenido_texto=%s, contenido_texto_ingles=%s,	contenido_texto_gallego=%s, contenido_texto_frances=%s, contenido_texto_italiano=%s, contenido_texto_aleman=%s, contenido_texto_portugues=%s WHERE seccion_id_seccion=%d",
		        GetSQLValueString($_POST['contenido_texto'], "text"),
					            GetSQLValueString($_POST['contenido_texto_ingles'], "text"),
					            GetSQLValueString($_POST['contenido_texto_gallego'], "text"),
					            GetSQLValueString($_POST['contenido_texto_frances'], "text"),
					            GetSQLValueString($_POST['contenido_texto_italiano'], "text"),
					            GetSQLValueString($_POST['contenido_texto_aleman'], "text"),
					            GetSQLValueString($_POST['contenido_texto_portugues'], "text"),

GetSQLValueString($id, "int"));	
								
			$consulta_otra_insercion = mysql_query($otra_insercion, $conexion)
				or die(mysql_error());
								
								
				header ("location: ../ver_seccion.php?id=".$id."&nivel=".$nivel."");
							
				}
				
			} // Aquí se cierra el if de si está puesta el "valor_oculto", y si es el de form1
			
		} // Cierre del token
	
	} // Cierre de si fue pulsado el botón de continuar
 
	$_SESSION['token'] = $token = md5(uniqid(mt_rand(), true));


 ... .... .... ...


<form action="tipo_contenido.php?id=<?php echo $id?>&nivel=<?php echo $nivel?>" method="post" name="form1" id="form1">
		                         
	<!-- ************* SEGUNDA TABLA ************* -->
	<table width="950" align="center" bgcolor="#F0F0F0">
	                
	      <!-- TERCERA FILA -->  
		<tr>
		        
			<!-- PRIMERA COLUMNA -->  
		      <td align="left" valign="top">  
		   
		  
		           	<!-- ************* CUARTA TABLA (dentro de la primera columna de la tercera fila de la segunda tabla)-->
		          	<table width="100%">
		                  		
			        <?php 		            	
				//Aquí hace un switch. Y según cual sea el id del idioma, sabe qué texto le tiene que poner:					
				do {
		            	switch ($fila_idiomas3['idioma_id_idioma']) {
											case 1:
												$name = 'contenido_texto';
												$num++;
												break;
											case 2:
												$name = 'contenido_texto_gallego';
												$num++;
												break;
											case 3:
												$name = 'contenido_texto_ingles';
												$num++;
												break;
											case 4:
												$name = 'contenido_texto_frances';
												$num++;
												break;
											case 5:
												$name = 'contenido_texto_italiano';
												$num++;
												break;
											case 6:
												$name = 'contenido_texto_aleman';
												$num++;
												break;
											case 7:
												$name = 'contenido_texto_portugues';
												$num++;
												break;
										}	
										
									?>
														
		                     		<!-- QUINTA FILA (dentro de la cuarta tabla) -->						
		                      		<tr>
		                        
		                        
		                        		<!-- PRIMERA COLUMNA DE ESA SEGUNDA FILA -->
		                        	
		                        		<td align="left" valign="top"> <b> Texto de contenido en
		                        			<?php echo $fila_idiomas3['idioma_nombre'];?>:</b>
		                        		</td>
		                        
		                        
		                            	<!-- SEGUNDA COLUMNA DE ESA SEGUNDA FILA -->
		                        
		                        		<td align="left" valign="top">
		                        			<textarea id=<?php echo $num ?> name="<?php echo "".$name; ?>" rows="3" cols="40">
		                        				<?php echo htmlentities($fila_contenido[''.$name], ENT_COMPAT, 'iso-8859-1'); ?>
		                        			</textarea>
		                          		</td>
		                          
		                          	
		                      		</tr> <!-- Cierre de la quinta fila de la cuarta tabla -->											
		
		
		                      		<?php 
		
		                       		} // Cierra al do que va con el switch										
									
		                       		// Este while se corresponde con el anterior do		
									while ($fila_idiomas3 = mysql_fetch_assoc($consulta_idiomas3));
		

		               ?>
			         <!-- SEXTA FILA (dentro de la cuarta tabla -->  
		               <tr>
		                        		
		                        		
		                  <!-- PRIMERA COLUMNA DE LA CUARTA FILA -->  
		                  <td  colspan="2" align="center" valign="top" nowrap="nowrap">
		                        			<input name = "guardar" type="submit" value="Guardar" />
		                        			<input type="hidden" name ="token" value="<?php echo $token?>"/>
		                        		</td>
		                        		
		                        		
		               </tr> <!--  Cierre de la sexta fila -->
		                  
		
		  </table> <!-- Cierre de la CUARTA TABLA (dentro de la primera columna de la tercera fila) *********** -->                    
		    
		</td>  <!-- Cierre de la primera columna de la tercera fila ********* -->
	
	</tr>  <!-- Cierre de la tercera fila ************** -->
		 
	</table> <!-- Cierre de la segunda tabla ***************-->                   
		                  
		        
<!-- Otro campo oculto del "form1" (que nace en la línea 653) -->        
<input type="hidden" name="valor_oculto" value="form1" />
</form> <!-- Cerramos el formulario "form1" (que nace en la línea 653) -->  



... .... ....


<script type="text/javascript" src="../../../../ckeditor/ckeditor.js"></script>
<script type="text/javascript">

window.onload = function()

{
editor = CKEDITOR.replace('1', 
	{
	height:"500", width:"820", bgcolor:"black"
	});
}

{
 editor = CKEDITOR.replace('2', 
	{
	height:"500", width:"820", bgcolor:"black"
	});
}

{
 editor = CKEDITOR.replace('3', 
	{
	height:"500", width:"820", bgcolor:"black"
	});
}

{
 editor = CKEDITOR.replace('4', 
	{
	height:"500", width:"820", bgcolor:"black"
	});
}

{
 editor = CKEDITOR.replace('5', 
	{
	height:"500", width:"820", bgcolor:"black"
	});
}	

{
 editor = CKEDITOR.replace('6', 
	{
	height:"500", width:"820", bgcolor:"black"
	});
}

{
 editor = CKEDITOR.replace('7', 
	{
	height:"500", width:"820", bgcolor:"black"
	});
}
  #5 (permalink)  
Antiguo 31/05/2012, 18:47
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con ckeditor al subir imágenes

Bueno, creo entonces que el problema no es de PHP o tu formulario, más bien podría ser a causa de un módulo de seguridad instalado en Apache que, generalmente, es muy restrictivo a la hora de revisar el contenido enviado por formulario.

Para confirmar esta sospecha, en cualquier campo de tu formulario (no el del CK) escribe <script>alert('Hola!');</script> y envíalo, el resultado sería el mismo, abrir la página sin datos en $_POST.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 04/06/2012, 02:46
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Problema con ckeditor al subir imágenes

¡Gracias por vuestras aportaciones!

Ya está solucionado. Era por una medida de seguridad implementada: por la inclusión de un token para la prevención del ataque CSRF. Así que he tenido que quitar el token de aquellos archivos en los que se puede emplear el ckeditor. Es una pena porque la aplicación queda un poco más insegura, pero mi jefe también lo ha preferido así.

¡Saludos!

Etiquetas: ckeditor, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:07.