Foros del Web » Programando para Internet » PHP »

Update Problematico

Estas en el tema de Update Problematico en el foro de PHP en Foros del Web. Buf!!! estoy un poco liado y necesito vuestra ayuda para ver que es lo que estoy haciendo mal. intento subir un dato a una tabla ...
  #1 (permalink)  
Antiguo 18/12/2005, 12:20
Usuario no validado
 
Fecha de Ingreso: agosto-2004
Mensajes: 74
Antigüedad: 13 años, 3 meses
Puntos: 0
Update Problematico

Buf!!! estoy un poco liado y necesito vuestra ayuda para ver que es lo que estoy haciendo mal.

intento subir un dato a una tabla de la base de datos, que antes estaba vacio.

desde esta pagina que envio la informacion

Código PHP:
<? 
$link
=mysql_connect("servidor","usuario","contraseña"); 
mysql_select_db("basededatos",$link)or die("No se puede seleccionar BD"); 
?> 
<?
$id
=$_GET['id']; 
$sql="SELECT * FROM telemarketig WHERE id='$id'";
$result mysql_query($sql,$link);
?> 
<?
       
while ($row=mysql_fetch_array($result))
    {
     if (
$row!=0){
?>

<?
echo $row['tteleoperad'];
?>
etc...

<form method="POST" action="visita_asignada.php">
<p align="center">
<?

$link
=mysql_connect("servidor","usuario","contraseña"); 
mysql_select_db("basededatos",$link)or die("No se puede seleccionar BD"); 

 
$sql2 "SELECT * FROM usuarios";  
 
$consulta mysql_query($sql2,$link) or die(mysql_error());  

//aqui comienzo mi select y le doy el nombre que quiero asignarle 
    
echo "<select name=\"comercial\">\n";  
// la primer opcion vacia con el mensaje que deseo 
    
echo "<option value=\"\"> Seleccione uno</option>\n";  
// y pues el clasico while para que me genere cuantos campos haya con la  
// consulta generada  

    
While ($registro=mysql_fetch_assoc($consulta)){ 
echo 
"<option value=\"".$registro['nombre']."\">".$registro['nombre']."</option>\n";  
      } 
// aqui ya termino el while y solo me resta cerrar el select 
echo"</select>\n\n";  
?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" value="Asignar Visita" name="B1"></p>
</p>
</form>
Y desde esta pretendo hacer el UPDATE

Código PHP:
<?
$link
=mysql_connect("servidor","usuario","contraseña"); 
mysql_select_db("basedatos",$link)or die("No se puede seleccionar BD"); 

$id=$_GET['id']; 
$sql="SELECT * FROM telemarketig WHERE id='$id'";
$result mysql_query($sql,$link);
?> 

<?
$comercial 
"$_POST['comercial']";
$sql="UPDATE telemarketig SET comercial='$comercial' WHERE id='$id'";
$result mysql_query($sql,$link);
if(
mysql_query) {
  
echo 
"La visita ha sido asignada al comercial $comercial";  

else 

echo 
"No se ha podido completar la asignacion";    
}
?>
he intentado hacerlo de muchas formas y no me funciona, me podeis ayudar?

Gracias

Última edición por tamahome; 18/12/2005 a las 15:46
  #2 (permalink)  
Antiguo 18/12/2005, 12:36
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 13 años, 7 meses
Puntos: 0
No lo he mirado a fondo, quizás en la página del update (la última) no tengas el valor de la variable ($comercial).

Míralo haciendo es enta página echo $comercial;

Saludos
  #3 (permalink)  
Antiguo 18/12/2005, 13:23
Usuario no validado
 
Fecha de Ingreso: agosto-2004
Mensajes: 74
Antigüedad: 13 años, 3 meses
Puntos: 0
Update

Si que esta, la envio desde la pagina primera con el select del formulario y en esta la recojo con

Código PHP:
$comercial "$_POST['comercial']"
pero no funciona y el problema no lo se ver.
  #4 (permalink)  
Antiguo 18/12/2005, 13:36
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
esta bien, envias la variable, pero esta llega bien? has un:

Código PHP:
<?php echo $_POST['comercial']; ?>
Simplemente para ver si llega.

Ademas tengan en cuenta utilizar las comillas "invertidas" (`) en los nombres de los campos de la tabla:

Código PHP:
$comercial "$_POST['comercial']"
$sql="UPDATE `telemarketing` SET `comercial` = '$comercial' WHERE `id` = '$id'"
$result mysql_query($sql,$link); 
__________________
I Love Programming...
  #5 (permalink)  
Antiguo 18/12/2005, 16:03
Usuario no validado
 
Fecha de Ingreso: agosto-2004
Mensajes: 74
Antigüedad: 13 años, 3 meses
Puntos: 0
update

hola

he probado si recogia bien la variable con
Código PHP:
<?php echo $_POST['comercial']; ?>
y si, la recoje bien, pero no me hace el UPDATE. he provado tambien sustituyendo el valor de $id por el valor del id donde pretendo subirlo y tampoco. estoy probandolo otra vez de todas las formas pero hay algo que se me escapa.
  #6 (permalink)  
Antiguo 18/12/2005, 18:36
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
probaste con las comillas ` que dije?

Por ultimo, hace esto:

Código PHP:
$result mysql_query($sql,$link) or die(mysql_error()); 
Eso te dará el error de mysql.
__________________
I Love Programming...
  #7 (permalink)  
Antiguo 19/12/2005, 00:14
Usuario no validado
 
Fecha de Ingreso: agosto-2004
Mensajes: 74
Antigüedad: 13 años, 3 meses
Puntos: 0
Update

lo he probado para ver si me da error añadiendole:

Código PHP:
$result mysql_query($sql,$link) or die(mysql_error()); 
y no me imprime ningun error, sale la pagina en blanco pero sigue sin hacer el UPDATE.

he estado probando de estas dos maneras
Código PHP:
<?
$id
=$_GET['id']; 
$comercial "$_POST['comercial']";   

   
$link=mysql_connect("servidor","usuario","contrasena"); 
   
mysql_select_db("base_datos",$link)or die("No se puede seleccionar BD");
   
$sql="SELECT * FROM `telemarketig` WHERE `id`='".$id."'"
   
$result mysql_query($sql,$link) or die(mysql_error());  
 
   
   
$sql ="UPDATE `telemarketig` SET `comercial`='".$comercial."' WHERE `id`='".$id."'";
   
$result mysql_query($sql,$link) or die(mysql_error());  
?>
y

Código PHP:
<?
$id
=$_GET['id']; 
$comercial "$_POST['comercial']";   

   
$link=mysql_connect("servidor","usuario","contrasena"); 
   
mysql_select_db("base_datos",$link)or die("No se puede seleccionar BD");
   
$sql="SELECT * FROM `telemarketig` WHERE `id`='$id'"
   
$result mysql_query($sql,$link) or die(mysql_error());  
 
   
   
$sql ="UPDATE `telemarketig` SET `comercial`='$comercial' WHERE `id`='$id'";
   
$result mysql_query($sql,$link) or die(mysql_error());  
?>
en ninguno de los casos me hace el UPDATE

la estructura de la tabla es esta

Código PHP:
CREATE TABLE `telemarketig` (
  `
idint(8unsigned NOT NULL auto_increment,
  `
tteleoperadvarchar(20NOT NULL default '',
  `
tconseguidavarchar(20NOT NULL default '',
  `
tempresavarchar(50NOT NULL default '',
  `
tcontactovarchar(20NOT NULL default '',
  `
tdireccionvarchar(50NOT NULL default '',
  `
tpoblacionvarchar(20NOT NULL default '',
  `
tcpostalvarchar(10NOT NULL default '',
  `
ttelefonovarchar(10NOT NULL default '',
  `
tmovilvarchar(10NOT NULL default '',
  `
fechadate NOT NULL default '0000-00-00',
  `
thoravarchar(10NOT NULL default '',
  `
tamenavarchar(10NOT NULL default '',
  `
tlinamenavarchar(10NOT NULL default '',
  `
tmovistarvarchar(10NOT NULL default '',
  `
tlinmovistarvarchar(10NOT NULL default '',
  `
tvodafonevarchar(10NOT NULL default '',
  `
tlinvodafonevarchar(10NOT NULL default '',
  `
ttotalinvarchar(10NOT NULL default '',
  `
tantiguedadvarchar(10NOT NULL default '',
  `
tfacturaciovarchar(10NOT NULL default '',
  `
tpermanencivarchar(10NOT NULL default '',
  `
tcomentariosvarchar(255NOT NULL default '',
  `
fconcertdate NOT NULL default '0000-00-00',
  `
comercialtinytext NOT NULL,
  `
sedetinytext NOT NULL,
  `
tipolongtext NOT NULL,
  `
tprovinciatinytext NOT NULL,
  
PRIMARY KEY  (`id`)
TYPE=MyISAM AUTO_INCREMENT=
algo debo estar haciendo mal, pero no se lo que es. me recoge la variable bien, lo he probado de muchisimas formas y ninguna me da el resultado que espero.

saludos
  #8 (permalink)  
Antiguo 19/12/2005, 03:38
Avatar de fueradejuego  
Fecha de Ingreso: abril-2003
Ubicación: Málaga - España
Mensajes: 94
Antigüedad: 14 años, 7 meses
Puntos: 0
Yo cuando tengo un problema de este tipo lo que suelo hacer es sacar por la pantalla la consulta que me da problemas, asi puedo ver si falla alguna variable y probar directamente a poner la consulta en mysql, asi si hay algo mal veras el error del mysql.

Código PHP:
echo "UPDATE telemarketig SET comercial='$comercial' WHERE id='$id'"
Prueba a hacer esa consulta directamente en el mysql a ver si error te sale.
Que tengas suerte.
Un saludo.
  #9 (permalink)  
Antiguo 19/12/2005, 03:50
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.547
Antigüedad: 15 años, 8 meses
Puntos: 1262
Hola:

No sé si tendrá mucho que ver, pero en el formulario no he visto la definición del atributo enctype...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #10 (permalink)  
Antiguo 19/12/2005, 04:22
 
Fecha de Ingreso: diciembre-2005
Mensajes: 19
Antigüedad: 12 años
Puntos: 0
Problema con el UPDATE

<?
$comercial = "$_POST['comercial']";
$sql="UPDATE telemarketig SET comercial='$comercial' WHERE id='$id'";
$result = mysql_query($sql,$link);
if(mysql_query) {

echo "La visita ha sido asignada al comercial $comercial";

else

echo "No se ha podido completar la asignacion";
}
?>

/// si ese es tu codigo proba con retirar las comillas simples a la variable $comercial
  #11 (permalink)  
Antiguo 19/12/2005, 10:02
Usuario no validado
 
Fecha de Ingreso: agosto-2004
Mensajes: 74
Antigüedad: 13 años, 3 meses
Puntos: 0
update

Sigue sin funcionarme!!! lo extraño es que no me imprime ningun error de base de datos y tampoco me sale nada, ni los "echo" de la estructura de eleccion "if"
he cambiado el tipo de datodel campo `comercial` de tinytext a varchar

Esta es la ultima forma en que lo he probado que tampoco me funciona:


Código PHP:
<?
$link 
mysql_connect("servidor","usuario","contraseña") or die (mysql_error()); 
mysql_select_db("base_datos",$link) or die (mysql_error()); 

$id=$_GET['id']; 
  
$sql="SELECT * FROM `telemarketig` WHERE `id` = $id ; 
$result = mysql_query($sql) or die(mysql_error());  
?>
<? 
$comercial = $_POST['comercial'];   

$sql="
UPDATE `telemarketigSET `comercial` =  $comercial  WHERE `id` = $id ";
$result = mysql_query($sql,$link);

if(mysql_query) {

echo "
La visita ha sido asignada al comercial $comercial"; 

else 

echo "
No se ha podido completar la asignacion"; 
}
?>
Donde puede estar el problema? lo he intentado de muchisimas formas que creo logicas, pero algo se me escapa.

Puede ser que sea porque el campo que pretendo modificar este vacio?
Deberia intentarlo con REPLACE en lugar de UPDATE?
Se podria hacer mediante el comando INSERT? como deberia hacerlo entonces si no puedo utilizar la clausula WHERE?

Gracias por vuestro interes
  #12 (permalink)  
Antiguo 19/12/2005, 13:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Tienes bastantes errores (supongo que al copiar el código) .. de sintax .. otros de lógicia y muchas dudas:

Código PHP:
<? 
$link 
mysql_connect("servidor","usuario","contraseña") or die (mysql_error());  
mysql_select_db("base_datos",$link) or die (mysql_error());  

$id=$_GET['id'];  ///? de donde sale? ....o de donde viene? .. seguro que en GET? .. tu formulario es POST!!!

// ¿Para que haces esta consulta SQL?   
$sql="SELECT * FROM `telemarketig` WHERE `id` = '$id'";  
mysql_query($sql) or die(mysql_error()); // Si no se ejecuta el query . .con el "die()" ya matas la ejecución del script en este punto .. 
 
$comercial $_POST['comercial'];    

$sql="UPDATE `telemarketig` SET `comercial` =  '$comercial'  WHERE `id` =' $id' ";
echo 
"Verificacion SQL:<br>".$sql
$result [email protected]mysql_query($sql,$link); // si quieres usar esta estructura .. usa el @delante para no mostrar errores de PHP .. pero obtenlos luego con mysql_error() si se producen a modo de "debbug". 

if($result) { 
echo 
"La visita ha sido asignada al comercial $comercial";  
} else {  
echo 
"No se ha podido completar la asignacion. Mysql dijo:".mysql_error();  

?>
En tu formulario ... el "comercial" el <select> donde eliges al mismo .. pasa su "nombre" no el "ID" que es lo que deberías usar:

Tu haces:
Cita:
While ($registro=mysql_fetch_assoc($consulta)){
echo "<option value=\"".$registro['nombre']."\">".$registro['nombre']."</option>\n";
}
// aqui ya termino el while y solo me resta cerrar el select
echo"</select>\n\n";
Sería:
Código PHP:
 While ($registro=mysql_fetch_assoc($consulta)){  
echo 
"<option value=\"".$registro['id']."\">".$registro['nombre']."</option>\n";   
      }  
// aqui ya termino el while y solo me resta cerrar el select  
echo"</select>\n\n"
Es decir . ."muestras" el nombre en el <select> pero pasas el "ID" como opción del que selecciones. EL "ID" del de tu tabla "usuarios" que son tus "comerciales" sería lo que almacenas en dicho campo . .no su nombre!!!! así relacionas ambas tablas para hacer consultas SQL más óptimas como parte de una "normalización" de tus datos.

El tema del "ID" del registro de la tabla "marketing" a realizar el Update .. no se vé donde lo propagas. Deberías usar un campo hidden en el formulario tipo:

Código PHP:
<input type="hidden" name="id" value="<? echo $_GET['id'?>">
(asumo que ese script recibe el dato por el URL en GET .. si no es así usa POST)

de esta forma en tu parte del script de proceso .. tamarías ese ID por POST que sería donde llegase junto con el dato del "comercial" en el mismo formulario:
Código PHP:
$id=$_POST['id']; 
Un saludo,

Última edición por Cluster; 19/12/2005 a las 13:34
  #13 (permalink)  
Antiguo 19/12/2005, 15:59
Usuario no validado
 
Fecha de Ingreso: agosto-2004
Mensajes: 74
Antigüedad: 13 años, 3 meses
Puntos: 0
Muchas Gracias Cluster, ya funciona, era lo que comentabas. al no ejecutarse el query se detenia en ese punto y por eso no salia nada. pasando el valor id de la tabla telemarketig por formulario (hidden) y recogiendola $_POST['id']; ya tengo los dos valores que necesito para el update.

he eliminado la primera consulta, que la ponia porque en los ejemplos que he visto de UPDATE todos hacian una consulta primero.

el valor de id de la tabla telemarketig que recogia por GET lo he eliminado ya que lo sustituyo pasandolo por el formulario. lo que no he cambiado ha sido el valor de id de comercial, ya que lo unico que necesitaba era el dato "nombre" y no lo relaciono con la tabla usuarios, solo traspaso el valor.

Gracias de nuevo con la ayuda vuestra estoy aprendiendo muchisimo.
  #14 (permalink)  
Antiguo 20/12/2005, 05:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
he eliminado la primera consulta, que la ponia porque en los ejemplos que he visto de UPDATE todos hacian una consulta primero

Pero .. todo tiene su "lógica" .. no es llegar y poner algo por qué en un ejemplo concreto salga .. hay que entender "por qué" se usa. Y si no lo sabes, no preguntes cuado tengas un problema puntual con TU código .. sino con el código que veas y no entiendas.


[quote]el valor de id de la tabla telemarketig que recogia por GET lo he eliminado ya que lo sustituyo pasandolo por el formulario. lo que no he cambiado ha sido el valor de id de comercial, ya que lo unico que necesitaba era el dato "nombre" y no lo relaciono con la tabla usuarios, solo traspaso el valor. [/qutoe]

Ok, .. pero realmente deberías ver las virtudes de la "normalización" de datos (esto es genérico para todo tipo de BBDD relacionales como Mysql por ejemplo). Si tienes tiempo .. te recomiendo la lectura de estos tutoriales:

http://www.mysql-hispano.org/page.php?id=23
http://www.mysql-hispano.org/page.php?id=16
http://www.mysql-hispano.org/page.php?id=27

Recuerda que no estás sólo programando en "PHP" .. también usas "Base de datos" y estas como tal tienen sus própias reglas, lenguaje (SQL) y teoría (normalización, integridad referencial .. modelo de datos .. etc).

Un saludo,
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 06:16.