Foros del Web » Programando para Internet » PHP »

Problema con (supongo) tipo de datos

Estas en el tema de Problema con (supongo) tipo de datos en el foro de PHP en Foros del Web. Hola muy buenas! Estoy con una pagina php con BD dedicada a mi grupo de amigos y de momento me apaño bastante bien, pero me ...
  #1 (permalink)  
Antiguo 16/12/2004, 16:21
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 13 años
Puntos: 0
Problema con (supongo) tipo de datos

Hola muy buenas! Estoy con una pagina php con BD dedicada a mi grupo de amigos y de momento me apaño bastante bien, pero me ha surgido un problema que no le encuentro el origen.
Veamos, yo tengo una tabla llamada amigos i en esta guardo diferentes datos tales como el nombre(varchar:20) apellidos(varchar:30), descripcion (TEXT) i varios mas tambien tipo TEXT.

El problema que me ha salido es que cuando un usuario, a partir de un formulario rellena sus datos, si son demasiado largos no se graban correctamente en la BD i se cortan (cosa que veo logico en los campos de tipo varchar, pero no en los tipo TEXT donde se supone que son muuuuuy largos).

En canvio si introduzco los mismos datos a traves del phpmyadmin estos si que se insertan bien cosa que me hace sospechar que el fallo se encuentra en las variables que maneja php que no dan cabida a tanto texto (tampoco es tanto tanto, igual son unos 500 caracteres).

Ahora mismo no puedo poner codigo ya q no lo tengo a mano, pero basicamente es un
<form action='inserta.php'>
<input name:xxx>
<input name:yyyy>
//tambien hay algun textarea que creo recordar son los destinados a los tipo TEXT
</form>

en el inserta.php tengo la recogida de variables que envio y se ejecuta el UPDATE.
Cuando pueda pondré el codigo de lo necesario.
Saludos!
  #2 (permalink)  
Antiguo 16/12/2004, 18:16
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
En lugar de TEXT usa LONGTEXT, que es para campos largos.

El error esta en el codigo, no en las variables (es decir, el fallo es en las variables porque estan mal seteadas, no es un bug de php), tengo texto de unos 2000 caracteres en campos de DB y todo anda bien (y fueron llenadas con un textarea de form).

Digamos que sin el codigo no se puede hacer mucho, fijate si la variables estan bien seteadas y si llega TODO el texto a las mismas (has un echo''; en el script.php). Para mi es, casi con seguridad, un tema de "", fijate que no usas comillas dobles en HTML, y eso es necesario, no es lo mismo:
<input name:yyyy>
que:
<input name:"yyyy">
Y si al campo value no les pones "" peor... (Esto es cuando recoje los datos de una consulta, no cuando los envia).

En fin...
__________________
I Love Programming...

Última edición por FuLaNo_; 16/12/2004 a las 18:17
  #3 (permalink)  
Antiguo 17/12/2004, 01:38
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 13 años
Puntos: 0
bueno claro claro, ese codigo que he puesto es solo para que os hicierais una idea de la base, la sintaxis no es la correcta, y le faltan cosas claro! pero era solo un ejemplo.. al mediodia cuando vuelva a casa meto el codigo.
Edito: aqui esta el codigo del php que genera el formulario
Código:
if($_SESSION[ID_usr]==mysql_result($result,0,'id') || $_SESSION[ID_usr]==1)
	{	if ($_SESSION[ID_usr]==1)
		{ $modo=2; }
		else
		{		$modo=1;
		}
		//$login=mysql_query("SELECT * FROM usuarios WHERE usr_id='".mysql_result($result,0,'id')."'",$link);
	}
    else if($_SESSION[ID_usr]=='invitado')
	{	$modo=3;}
	else {}
	
	echo	"<FORM NAME='modifica' action='option/insert/metele.php'>
			<input type='hidden' name='loque' value='user'>
			<input type='hidden' name='quien' value='".mysql_result($result,0,'id')."'>
			
			<table border='0' width='100%' cellpadding='0' cellspacing='0'>
   			<tr> 	<th width='68'><img src='img/anim/1.gif'></th>
					<th colspan='4'>El Sujeto ".mysql_result($result,0,'nom')."</th>
					<th width='68'><img src='img/anim/1.gif'></th>
			</tr>
			<tr>
				<td></td>
				<td background='img/misc/upperleft.gif' width='11'></td>
				<td colspan='2' background='img/misc/up.gif' height='12'></td>
				<td background='img/misc/upperright.gif' width='11'></td>
				<td></td>
			</tr>
			<tr>
				<td></td>
				<td background='img/misc/left.gif'></td>
				<td bgcolor='white' WIDTH='300'><b>".mysql_result($result,0,'nom')." ".mysql_result($result,0,'cognom')."</td>
				<td bgcolor='white'></td>
				<td background='img/misc/right.gif'></td>
				<td></td>
			</tr>
			<tr>
				<td></td>
				<td background='img/misc/left.gif'></td>
				<td bgcolor='white' valign='top'><img src='img/sujeto/".mysql_result($snap,0,'name').".jpg' BORDER='2'></td>";

			//FECHA DE NACIMIENTO
echo	"		<td rowspan='2' bgcolor='white' align='left' valign='top'><b>Fecha de nacimiento";
					if($modo==1 || $modo==2)
					{	echo	" (dd/mm/aaaa):</b><input type='text' size=10' maxlength='10' NAME='fecha' value='".mysql_result($result,0,'fecha')."'><br>";	}
					else
					{	echo	":</b>".mysql_result($result,0,'fecha')."<br>
								<input type='hidden' NAME='fecha' value='".mysql_result($result,0,'fecha')."'>";
						
					}
			//GENERO
			echo" <b>Genero:</b><img src='img/icons/".mysql_result($result,0,'sexo').".gif'><br>
				  <input type='hidden' NAME='sexo' value='".mysql_result($result,0,'sexo')."'>";
			
			//HOBBIES
			echo "<b>Hobbies:</b>";
					if($modo==1 || $modo==2)
					{	echo"(Separa cada entrada con un #)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
							  <textarea name='hobby' rows='2' cols='40'>".mysql_result($result,0,'hobby')."</textarea>";
							  //<input type='hidden' name='hobby' value='".mysql_result($result,0,'hobby')."'>";
					}
					else if($modo==0)
					{	echo $hobby."
						<input type='hidden' name='hobby' value='".mysql_result($result,0,'hobby')."'>";
					}
			//APODOS
			echo" <br> <b>Apodos:</b>";
				if($modo==1 || $modo==2)
				{		echo"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
						<textarea rows='2' cols='40' NAME='apodos'>".mysql_result($result,0,'apodos')."</textarea>";
				}
				else
				{	echo $apodos."
						<input type='hidden' name='apodos' value='".mysql_result($result,0,'apodos')."'>";
					}
					
			//NICK
			echo "<br><b>Nick Mitico:</b>";
				switch($modo)
				{	case 0:	echo $nick;
							echo "<br>(Separa cada entrada con un #)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
							   <textarea rows='2' cols='40' NAME='nick2'></textarea>
							   <input type='hidden' name ='nick' value='".mysql_result($result,0,'nick')."'>";
							break;
							
					case 1:	echo $nick;
							echo "<br>(Separa cada entrada con un #)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
							   <textarea rows='2' cols='40' NAME='nick'>".mysql_result($result,0,'nick')."</textarea>";
							break;
							
					case 2: echo "chupa<br>(Separa cada entrada con un #)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
							   <textarea rows='2' cols='40' NAME='nick'>".mysql_result($result,0,'nick')."</textarea>";
							break;
					default:
					 		echo $nick."<input type='hidden' name ='nick' value='".mysql_result($result,0,'nick')."'>";
						
				}
			//FRASES MITICAS
			echo "<br> <b>Frases Miticas:</b>";
					switch($modo)
					{	case 0:	echo $frases;
								echo "<br>(Separa cada entrada con un #)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
							   			<textarea rows='2' cols='40' NAME='frases2'></textarea>
										<input type='hidden' name ='frases' value='".mysql_result($result,0,'frases')."'>";
								break;
						case 1:	echo $frases;
								echo "<br>(Separa cada entrada con un #)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
							   			<textarea rows='2' cols='40' NAME='frases'>".mysql_result($result,0,'frases')."</textarea>";
								break;
						case 2:echo "<br>(Separa cada entrada con un #)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
							   <textarea rows='2' cols='40' NAME='frases'>".mysql_result($result,0,'frases')."</textarea>";
							   break;
					   
					   default:	echo $frases."<input type='hidden' name ='frases' value='".mysql_result($result,0,'frases')."'>";
					}
				
			//AHORA NOMBRE DE USUARIO Y PASSWORD					
			if($modo==1)
			{	echo "<br><b>Nombre de usuario:</b><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
						 <input type='textbox' maxlength='12' size='12' name='log' value=".mysql_result($login,0,'usr_login').">
						<br><b>Password:</b><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
							<input type='textbox' maxlength='10' size='12' name='pass' value=".mysql_result($login,0,'usr_pass').">";
			}
			else
			{	echo "<input type='hidden' name='log' value=".mysql_result($login,0,'usr_login').">
					  <input type='hidden' name='pass' value=".mysql_result($login,0,'usr_pass').">";
			}
echo"			</td>
				<td background='img/misc/right.gif'></td>
				<td></td>
			</tr>
			<tr>
					<td></td>
					<td background='img/misc/left.gif'></td>
					<td bgcolor='white' valign='top' align='left' width='300'><b>Descripçaö</b><br>";
//-----------------DESCRIPCIÓN------------------------
					if($modo==1 || $modo==2)
					{	echo "<textarea name='desc' rows='5' cols='30'>".mysql_result($result,0,'desc')."</textarea>";
					}
					else
					{	echo mysql_result($result,0,'desc')."
						<input type='hidden' name ='desc' value='".mysql_result($result,0,'desc')."'";
					}
echo "				</td>
					<td background='img/misc/right.gif' ></td>
					<td></td>
				</tr>
				
				<tr>
					<td></td>
					<td background='img/misc/left.gif'></td>
					<td bgcolor='white' valign='top' align='right' colspan='2'><input type='submit' value='Actualizar'>
						</form></td>
					<td background='img/misc/right.gif' ></td>
					<td></td>
				</tr>
				<tr>
					<td></td>
					<td background='img/misc/downleft.gif' HEIGHT='12'></td>
					<td colspan='2' background='img/misc/down.gif'></td>
					<td background='img/misc/downright.gif' ></td>
					<td></td>
				</tr>
			  ";
	}
	echo "</form>
		  </table>";
*Nota: la variable $modo me sirve para mostrar diferentes tipos de input dependiendo del usuario.
El $modo=2 corresponde al del administrador, al cual se le mostraran todos los input de manera que pueda modificar todos los datos.
(Se que no es la mejor manera de comprobar quien es quien, pero de momento es provisional).

Tampoco hagais demasiado coso a lo de frases y frases2, al igual que nick i nick2.
Frases2 i nick2 los hago servir para en los casos en que un usuario visita una ficha de otro usuario tan solo pueda añadir i no modificar el campo entero.
Luego con una funcion a la que llamo (que no he colocado aqui, pero tengo comprobado que funciona) uno frases con frases2 y nick con nick2 para hacer el update

Y aqui el php que hace el update:
Código:
 
$quien=$_GET['quien'];
	$frases=$_GET['frases'];
	$frases2=$_GET['frases2'];
	$apodos=$_GET['apodos'];
	$nick=$_GET['nick'];
	$nick2=$_GET['nick2'];
	$fecha=$_GET['fecha'];
	$hobby=$_GET['hobby'];
	$desc=$_GET['desc'];
	$forti=$_GET['pass'];
	$chusmi=$_GET['log'];

//-----Uno las dos variables...
        observa($nick,$nick2);
	observa($frases,$frases2);


$result=mysql_query("UPDATE `amigos` SET `nick`='".$nick."', `apodos`='".$apodos."', `desc`='".$desc."', `fecha` = '".$fecha."', `hobby` = '".$hobby."', `frases` = '".$frases."' WHERE id = '".$quien."' LIMIT 1")or die("<p><b>".mysql_error()."</b>");
						$result=mysql_query("UPDATE `usuarios` SET `usr_login`='".$chusmi."', `usr_pass`='".$forti."' WHERE usr_id = '".$quien."' LIMIT 1") or die("<p><b>".mysql_error()."</b>");

Última edición por clinisbut; 17/12/2004 a las 06:57
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 10:40.