Insertar datos con php avanzado

Iniciado por ppfenix79, 16 Febrero 2016, 20:25 PM

0 Miembros y 1 Visitante están viendo este tema.

ppfenix79

Hola tengo un problema al insertar datos de un formulario a mi tabla  no se cual sea el problema pero nose si me pofrian ayudar seria de gran ayuda..

Código (php) [Seleccionar]
<form method="post" action="crear.php" >
<label>De:</label><br />
<input type="text" name="email"><br />
<label>Para: </label><br />
<input type="text" name="emailamigo"><br />
Asunto:<br />
<input type="text" name="asunto" /><br />
Mensaje:<br />
<textarea name="texto"></textarea>
<br /><br />
<input type="submit" name="enviar" value="Enviar" />
</form>

<?php
if(isset($_POST['enviar']))
{
$nombre=$_POST['email'];//id de la tabla usuario
$amigo=$_POST['emailamigo'];//id de la tabla usuario pero con otro nombre
$asunto=$_POST['asunto'];//de la tabla mensajes
$texto=$_POST['texto'];//de la tabla mensajes
$fecha date("Y/m/j");//de la tabla mensajes
$sql "INSERT INTO mensajes (email,emailamigo,leido,fecha_mensaje,asunto,texto) VALUES ('".$nombre."','".$amigo."','No','".$fecha."','".$asunto."','".$texto."')";
mysql_query($sql);
echo "<script type='text/javascript'>
alert('Mensaje Enviado Correctamente');</script>"
;
}
?>


En los dos inputs primero inputs recojo nombres de mi base de datos de usuario su nombre y apellido donde el ID se llama email, luego donde dice asunto y texto coloco lo que voy a enviar. Despues de eso lo inserto en una tabla MENSAJES y con las tablase de : idp(pk), email(fk), emailamigo(fk), leido, fecha, asunto, texto... En la consulta de insert into es donde falla pero nose en donde  les agradeceria si me ayudarian GRACIAS...  



Mod: Los códigos deben ir en etiquetas GeSHi

engel lex

CitarInsertar datos con php avanzado

no quiero que te sientas insultado... pero esto no es php avanzado... es una practica bastante básica, no tiene más array que el POST, ni tiene objetos...

Citarno se cual sea el problema

primero que nada, ya no se recomienda el uso de la extensión mysql, se recomienda migrar a mysqli o mysql_pdo, la extensión vieja quedará obsoleta en las proximas versiones de php

por otro lado, para simplificar el código recomiendo cambiar la query y colocarla así
Código (php) [Seleccionar]
$sql = "INSERT INTO mensajes (email,emailamigo,leido,fecha_mensaje,asunto,texto) VALUES ('$nombre','$amigo','No','$fecha','$asunto','$texto')";

ya que php si interpreta las variables dentro de comillas dobles...


por ultimo... puedes tratar de reportar el error, para leerlo bien

Código (php) [Seleccionar]
if(!mysql_query($sql)) {
  die('Consulta no válida: ' . mysql_error());
}

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

ppfenix79

#2
Gracias y ya se que es una consulta basica pero para mi esto es muy avanzado ,.,.pero igual voy a probar con tu ayuda .,,.pero en los campos de los inputs de de email y emailamigo yo no coloco los correros sino que coloco los nombres de una tabla usuario y al tratar de insertarlas en mi tabla mensaje quiero que vaya el id  que seria sus emails y no el nombre que coloco en los inputs como podria cambiar eso o igual nomas inserta en los campos???


Consulta no válida: Cannot add or update a child row: a foreign key constraint fails (`bd_racsole`.`mensajes`, CONSTRAINT `mensajes_ibfk_3` FOREIGN KEY (`email`) REFERENCES `usuario` (`email`) ON DELETE CASCADE ON UPDATE CASCADE)

ese es el error que tengo al hacer como me dijiste haber si me lo puedes solucionar,.,.,.


Mod: No hagas doble post, usa el boton "editar"

engel lex

CitarCannot add or update a child row: a foreign key constraint fails (`bd_racsole`.`mensajes`, CONSTRAINT `mensajes_ibfk_3` FOREIGN KEY (`email`) REFERENCES `usuario` (`email`) ON DELETE CASCADE ON UPDATE CASCADE)

te traduzco el mensaje

no se puede añadir o actualizar una columna hija: una restriccion de foreign key ha fallado

es decir, estás usando foreign keys y no estás actualizando apropiadamente... si no sabes que es una FK, entonces revisa la tabla y quitaselas
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

ppfenix79

#4
Mmmm haber el problema es el siguiente:
tabla 1= usuario
email(50) (pk)//Aqui almaceno los correos como su id principal
nombre(30) //Su nombre
apellido(30)//Su apellido

tabla 2= mensajes
cod_men int (pk)// su id de cada mesaje
email(fk)//aqui donde obtengo el id de la tabla usuario osea su email
emailamigo(fk)/*aqui donde obtengo el id de la tabla usuario osea su email pero cambio el nombre para difereciar los nombres nada mas*/
leido(2)//aqui solo dos consultas el SI o NO para ver si lo ha leido o no.
fecha_mensajes DATE//la fecha en que se envia el mensaje
asunto(100)//El asunto del mensaje
texto TEXT//Y el mensaje


Ahora hago el form para enviar datos;
Código (php) [Seleccionar]
<form name="form1" action="crear.php" method="POST">
    De:
<input type="text" name="email">/*Aqui coloco el nombre y su apellido que envia el mensaje ejemplo "Juan Ramirez" que hay en la tabla usuario*/
Para:
<input type="text" name="emailamigo">/*Aqui el nombre quien recibe el mensaje ejemplo "Engel Lex" que hay en mi tabla usuario*/
Asunto:<br />
<input type="text" name="asunto" />//Aqui un nuevo asunto
Mensaje:<br />
<textarea name="texto"></textarea>//y el cuerpo del mensaje nuevo
<br /><br />
<input type="submit" name="enviar" value="Enviar" />//Envia los datos...
</form>


<?php
if(isset($_POST['enviar']))
{
$nombre=$_POST['email'];/*Obtengo el nombre y apellido de quien envia el mensaje "Juan Ramirez"*/
$amigo=$_POST['emailamigo'];/*Obtengo el nombre y apellido al que voy a enviar el mensaje a "Engel Lex"*/
$asunto=$_POST['asunto'];//Obtengo el asunto del mensaje
$texto=$_POST['texto'];//obtengo el mensaje
$fecha date("Y/m/j");/*Aqui obtengo la fecha actual de hoy.. hasta aqui todo bien pero lo que quiero saber esque yo coloco nombre y apellidos que hay en mi tabla usuario , las obtengo pero cuando las obtengo al insertar a la tabla mensajes quiero que convierta los nombre en los codigos que tiene la tabla usuario osea sus codigos (PK) serian sus correos electronicos y es ahi el error como logro hacer eso acaso hay una consulta mas avanzada para la insertacion de esos datos*/


$sql "INSERT INTO mensajes (email,emailamigo,leido,fecha_mensaje,asunto,texto) 
VALUES ('
$nombre','$amigo','No','$fecha','$asunto','$texto')";
if(!mysql_query($sql)){
die('Consulta no válida: ' mysql_error());//sale error

}else{
echo "<script type='text/javascript'>
alert('Mensaje enviado correctamente');/*Envia los datos a la tabla mensajes*/
</script>"
;
}

}
?>



Mod: Los códigos deben ir en etiquetas GeSHi

engel lex

recuerda usar las etiquetas GeSHi al publicar código...

responde puntualmente, de manera enumeraday precisa, con tu palabras lo siguiente
sabes que son las fk?
sabes como se usan las fk?
para que usas las fk en esta tabla?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

d91

hola, según entiendo tienes una tabla donde están registrados los usuarios con su email, esa seria la tabla padre y como la tabla mensaje tiene una foreign key  y apunta hacia la tabla usuarios seria la tabla hija, por lo tanto primero debe existir un registro en la tabla usuario para poder llenar registros en la tabla mensajes, o puede que exista un disparador y no lo estes tomando en cuenta

ppfenix79

#7
Citarrecuerda usar las etiquetas GeSHi al publicar código...

responde puntualmente, de manera enumeraday precisa, con tu palabras lo siguiente
sabes que son las fk?
sabes como se usan las fk?
para que usas las fk en esta tabla?

1.- Es una limitacion referencial, es la que se refiere a una columna de otra tabla maestra y esa talba debe tener una clave primaria.

2.- A la tabla hija se coloca una clave foranea, esa debe ser de la tabla padre su clave principal asi se hara el vinculo de padre e hija.

3.- Para que los en mi tabla mensajes tenga guardado los datos del emisor y receptor, del que envia el mensaje y para quien es ese mensaje asi cuando el otro vea que mensaje es y de quien la envia.


ammm nose si esta bien pero haber ojala haya aprobado.


Cita de: d91 en 17 Febrero 2016, 16:04 PM
hola, según entiendo tienes una tabla donde están registrados los usuarios con su email, esa seria la tabla padre y como la tabla mensaje tiene una foreign key  y apunta hacia la tabla usuarios seria la tabla hija, por lo tanto primero debe existir un registro en la tabla usuario para poder llenar registros en la tabla mensajes, o puede que exista un disparador y no lo estes tomando en cuenta


Si hay datos en la tabla usuarios, pero los inputs coloco esos datos que hay el nombre y el apellido pero no sus correos cuando inserto hay recien quiero que coloque sus correos y asi veo en la tabla usuario de quen es el correro y veo su nombre y su apellido del quien envia o al que se envio...



engel lex

no hagas doble post usa el boton editar (como ya e dije arriba)

tus respuestas son correctas para la teoría... la cosa es que hay que saber usarlas, si no te da problemas... lo que dice d91 es cierto... a menos que vayas a usa TRIGGER o CASCADE  en mysql no uses fk, ya que practicamente no tienen uso real fuera de eso y recibir alertas
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

ppfenix79

Cita de: engel lex en 17 Febrero 2016, 16:43 PM
no hagas doble post usa el boton editar (como ya e dije arriba)

tus respuestas son correctas para la teoría... la cosa es que hay que saber usarlas, si no te da problemas... lo que dice d91 es cierto... a menos que vayas a usa TRIGGER o CASCADE  en mysql no uses fk, ya que practicamente no tienen uso real fuera de eso y recibir alertas


Ammm ok  aunque esperaba una respuesta de lo resolvi debes hacer asi...pero igual tratare  entender mejor la clves  y las relaciones pero  de todos modos gracias por las ayudas estoy agradecido  ,.,.ojala logre resolverlo pronto para mi examen ggg