Insertar en una tabla...

  • Autor Autor xametox
  • Fecha de inicio Fecha de inicio
X

xametox

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Mirad, he desarrollado en un panel. Una opción para enviar mensajes a los jugadores de mi juego.
Este es el codigo que no me funciona bien:
if ($item=='')//send item
$item="0";
if ($money=='')
$money=0;



$query_string ='INSERT INTO mail (sender, receiver, subject, body, money, stationery) VALUES ('.$playerguid.','.$playerguid.','.$subject.','.$text.','.$money.')';
$sendmail=false;
$db->query($query_string) or ($sendmail=mysql_error());
//find mail id and add item
$sql1 = $db->query("SELECT id FROM mail WHERE subject='".$subject."' AND receiver='".$playerguid."' LIMIT 1")or ($sendmail.=mysql_error());
$sql2=$db->fetch_array($sql1);
if($sendmail==false && $sql2[0]<>'')
$db->query("INSERT INTO mail_items (mail_id,item_guid) VALUES ('".$sql2[0]."','".$item."')") or ($sendmail.=mysql_error());
if($sendmail==false)
return "<!-- success --><span class=\"colorgood\">Mail is sent! <br>All done!</span>";
else
return "<span class=\"colorbad\">Mail is not sent! Error returned: ".$sendmail."<br>".$query_string;


}
function sendmail_secondpatch($playername,$playerguid, $subject, $text, $item, $shopid=0, $money=0, $realmid=false) //returns, IMPORTANT: do not remove <!-- success --> if success
{
//send normal, item only
global $db,$a_user,$db_translation;
$subject = preg_replace( "/[^A-Za-z0-9]/", "", $subject); //no whitespaces
$item = preg_replace( "/[^0-9]/", "", $item); //item id
$playerguid = preg_replace( "/[^0-9]/", "", $playerguid); //item id
$text = preg_replace( "/[^A-Za-z0-9!-:.? ]/", "", $text); //no whitespaces
$money= preg_replace( "/[^0-9]/", "", $money);



if ($item=='')//send item
$item="0";
if ($money=='')
$money=0;


$insert_data = array(
'%reciver%' => $playerguid,
'%subject%' => $db->escape($subject),
'%message%' => $db->escape($text),
'%money%' => $money,
'%item%' => $item,
'%item_count%' => 1
);
$query_string = strtr('INSERT INTO mail(receiver, subject, message, money, item, item_count) VALUES("%reciver%", "%subject%", "%message%", "%money%", %item%, %item_count%)', $insert_data);
$sendmail=false;
$db->query($query_string) or ($sendmail=mysql_error());
if($sendmail==false)
return "<!-- success --><span class=\"colorgood\">Mail is sent! <br>All done!</span>";
else
return "<span class=\"colorbad\">Mail is not sent! Error returned: ".$sendmail."<br>".$query_string;


}

/*************************************************************
* NON GLOBAL FUNCTIONS (not required for other cores)
**************************************************************/
Este error me salta:
CORREO NO ENVIADO! Error returned: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'del mensaje correctamente funcionando,0)' at line 1
INSERT INTO mail (sender, receiver, subject, body, money, stationery) VALUES (400,400,AsuntoCorrectamentefuncionando,Cuerpo del mensaje correctamente funcionando,0)

Y no lo entiendo por que las columnas solamente hay sender, receiver, subject, body, money, stationery
 
Hola

Por lo que vi tienes un espacio en $t ext, por lo menos en lo que subiste

haz un echo al $query_string y dinos que dice, completo

Saludos
 
No hay ningun espacio en $t ext
<?php
/***********************************************************
* Sendmail function for Ascent/Arcemu
* by AXE
* this file is required for all cores
************************************************************/

/***********************************************************
* GLOBAL FUNCTIONS (required for all cores)
************************************************************/
function sendmail($playername,$playerguid, $subject, $text, $item, $shopid=0, $money=0, $realmid=false) //returns, IMPORTANT: do not remove <!-- success --> if success
{
//send normal, item only
global $db,$a_user,$db_translation;
$subject = preg_replace( "/[^A-Za-z0-9]/", "", $subject); //no whitespaces
$item = preg_replace( "/[^0-9]/", "", $item); //item id
$playerguid = preg_replace( "/[^0-9]/", "", $playerguid); //item id
$text = preg_replace( "/[^A-Za-z0-9!-:.? ]/", "", $text); //no whitespaces
$money= preg_replace( "/[^0-9]/", "", $money);



if ($item=='')//send item
$item="0";
if ($money=='')
$money=0;



$query_string ='INSERT INTO mail (sender, receiver, subject, body, money, stationery) VALUES ('.$playerguid.','.$playerguid.','.$subject.','.$text.','.$money.')';
$sendmail=false;
$db->query($query_string) or ($sendmail=mysql_error());
//find mail id and add item
$sql1 = $db->query("SELECT id FROM mail WHERE subject='".$subject."' AND receiver='".$playerguid."' LIMIT 1")or ($sendmail.=mysql_error());
$sql2=$db->fetch_array($sql1);
if($sendmail==false && $sql2[0]<>'')
$db->query("INSERT INTO mail_items (mail_id,item_guid) VALUES ('".$sql2[0]."','".$item."')") or ($sendmail.=mysql_error());
if($sendmail==false)
return "<!-- success --><span class=\"colorgood\">Mail is sent! <br>All done!</span>";
else
return "<span class=\"colorbad\">Mail is not sent! Error returned: ".$sendmail."<br>".$query_string;


}
function sendmail_secondpatch($playername,$playerguid, $subject, $text, $item, $shopid=0, $money=0, $realmid=false) //returns, IMPORTANT: do not remove <!-- success --> if success
{
//send normal, item only
global $db,$a_user,$db_translation;
$subject = preg_replace( "/[^A-Za-z0-9]/", "", $subject); //no whitespaces
$item = preg_replace( "/[^0-9]/", "", $item); //item id
$playerguid = preg_replace( "/[^0-9]/", "", $playerguid); //item id
$text = preg_replace( "/[^A-Za-z0-9!-:.? ]/", "", $text); //no whitespaces
$money= preg_replace( "/[^0-9]/", "", $money);



if ($item=='')//send item
$item="0";
if ($money=='')
$money=0;


$insert_data = array(
'%reciver%' => $playerguid,
'%subject%' => $db->escape($subject),
'%message%' => $db->escape($text),
'%money%' => $money,
'%item%' => $item,
'%item_count%' => 1
);
$query_string = strtr('INSERT INTO mail(receiver, subject, message, money, item, item_count) VALUES("%reciver%", "%subject%", "%message%", "%money%", %item%, %item_count%)', $insert_data);
$sendmail=false;
$db->query($query_string) or ($sendmail=mysql_error());
if($sendmail==false)
return "<!-- success --><span class=\"colorgood\">Mail is sent! <br>All done!</span>";
else
return "<span class=\"colorbad\">Mail is not sent! Error returned: ".$sendmail."<br>".$query_string;


}

/*************************************************************
* NON GLOBAL FUNCTIONS (not required for other cores)
**************************************************************/
 
INSERT INTO mail (sender, receiver, subject, body, money, stationery) VALUES (400,400,AsuntoCorrectamentefuncionando,Cuerpo del mensaje correctamente funcionando,0)

Faltan comillas en los campos de texto. Debería quedar así:

INSERT INTO mail (sender, receiver, subject, body, money, stationery) VALUES (400,400,"AsuntoCorrectamentefuncionando","Cuerpo del mensaje correctamente funcionando",0)

Creo que deberías modificar la línea que has marcado en rojo para que quede así:

$query_string ='INSERT INTO mail (sender, receiver, subject, body, money, stationery) VALUES ('.$playerguid.','.$playerguid.',"' .$subject. '","'. $t ext .'",'.$money.')';

Ya se que no vas a cambiar todo el código para una simple modificación, pero es mucho mejor usar PDO. Se evitan muchos problemas como el que tienes y aumentas muchísimo la seguridad.
 
en el primer insert

$query_string ='INSERT INTO mail (sender, receiver, subject, body, money, stationery) VALUES ('.$playerguid.','.$playerguid.','.$subject.','.$t ext.','.$money.')';

Ademas tienes 6 en la tabla y solo 5 variables
 
Última edición:
$query_string ='INSERT INTO mail (sender, receiver, subject, body, money, stationery) VALUES ('.$playerguid.','.$playerguid.','.$subject.','.$t ext.','.$money.')';

Ademas tienes 6 en la tabla y solo 5 variables

Lo sé falta el ultimo que sería el stationery, tiene que ser 0. Pero me dice DUPLICATE o algo asi.
He puesto tu linea y me dice ahora esto:
Mail is not sent! Error returned: Unknown column 'hola1' in 'field list'
INSERT INTO mail (sender, receiver, subject, body, money, stationery) VALUES (400,400,hola1,hola2,12)
 
Lo sé falta el ultimo que sería el stationery, tiene que ser 0. Pero me dice DUPLICATE o algo asi.
He puesto tu linea y me dice ahora esto:
Mail is not sent! Error returned: Unknown column 'hola1' in 'field list'
INSERT INTO mail (sender, receiver, subject, body, money, stationery) VALUES (400,400,hola1,hola2,12)

Ese error te lo da cuando no tienes una columna en la base de datos, corre el mismo en SQL de la tabla en phpMyadmin, es mas facil cambiar cosas ahi directamente

Segun eso no tienes la columna subject en la base de datos mail
 
Última edición:
Pues la columna está perfectamente.. Ahí

- - - Actualizado - - -

Bien, esta prácticamente hecho. El problema era. que se hay una tabla la tabla "ID" que siempre se ponía como 0 entonces salía como duplicado por que ya existe otro. Necesito saber como hacer para que se vallan cambiando ya me entendeis,, 1 .. 2.. 3.. asi..
 
Pues la columna está perfectamente.. Ahí

- - - Actualizado - - -

Bien, esta prácticamente hecho. El problema era. que se hay una tabla la tabla "ID" que siempre se ponía como 0 entonces salía como duplicado por que ya existe otro. Necesito saber como hacer para que se vallan cambiando ya me entendeis,, 1 .. 2.. 3.. asi..

Tienes que cambiarlo a auto increment, en phpMysql
 
Ah querías decir Phpmyadmin gracias muchisimas gracias, ya lo he arreglado =)
 
Atrás
Arriba