Avatar billede bruger2004 Nybegynder
28. juli 2008 - 20:51 Der er 11 kommentarer

Problem med php og mysql i forhold til querystrengen

Hej alle sammen,

Jeg sider og laver en lille kode som skal anvendes til sms triggers, altså en sms bliver sendt til gatewayen og så giver den http://domain.tld/sms.php?from=XXX&trigger=YYY&message=ZZZ&time=WWW

dette vil jeg så bruge/lave en kode i filen sms.php som anvender:

<?

// Sets the database credentials
define("DB_SERVER", "mysqlserver");
define("DB_USER", "mysqluser");
define("DB_PASS", "mysqlpassword");
define("DB_NAME", "mysqldatabase");

// Make connection to database
mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME) or die(mysql_error());

// Sets the veriables
$from = $_GET['from'];
$keyword = $_GET['trigger'];
$message = $_GET['message'];
$time = $_GET['time'];
$smsgateway = "smsgateway@email.adresse";
$subject = "smsgatewayuser:smsgatewaypassword";
$header = "from: ".$keyword." <sms@domain.tld>";
$body = "#".$from."\n\n
        Vi har modtaget din besked,
        Med venlig hilsen,
        domain.tld";

// Insert a row of information into the table "received"
mysql_query("INSERT INTO received (from, trigger, message, time) VALUES('$from', '$keyword', '$message', '$time')") or die(mysql_error());

// Send a SMS message back to user confirming message received
mail($smsgateway, $subject, $body, $header);

echo "<span class='bold, red'>Besked modtaget!</span><br />"
    ."<br />Vi har modtaget følgende besked:<br />"
    ."Fra: ".$from."<br />Trigger: ".$keyword."<br />Besked: ".$message."<br />Tid: ".$time."<br/>"
    ."<br />Med venlig hilsen<br />domain.tld";

?>

altså jeg gemmer beskeden (afsendernr., trigger, besked, tid) ned i min database.
Så får brugen en besked tilbage på sms, igennem email2sms gateway som bekræfter modtagelsen.
så viser siden beskeden og tilhørende data...


altså jeg har et problem med dette fordi jeg ikke kan se hvorfor dette ikke skulle virke, men fakta er at der bliver ikke gemt noget i databasen og heller ikke modtaget nogen sms, altså emailen forlader slet ikke da den aldrig modtages på smsgatewayen, men html siden viser godt nok beskeden og dertil data.

Håber nogen kan hjælpe.
Avatar billede erikjacobsen Ekspert
28. juli 2008 - 21:02 #1
Den skulle da meget gerne give en SQL-fejl med din die(...) - gør den ikke det?

"from" er et reserveret ord. Du kan evt:

mysql_query("INSERT INTO received ([from], trigger, message, time) VALUES('$from', '$keyword', '$message', '$time')") or die(mysql_error());
Avatar billede bruger2004 Nybegynder
28. juli 2008 - 21:34 #2
Hej nej det fik jeg godt nok ikke, men det er da rigtigt, så jeg har ændret nogle af mine navne og variables navne: så min kode ser så ledes ud:

<?

// Sets the database credentials
define("DB_SERVER", "mysqlserver");
define("DB_USER", "mysqluser");
define("DB_PASS", "mysqlpassword");
define("DB_NAME", "mysqldatabase");

// Make connection to database
mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME) or die(mysql_error());

// Sets the veriables
$phoneno = $_GET['from'];
$keyword = $_GET['trigger'];
$message = $_GET['message'];
$time = $_GET['time'];

// Insert a row of information into the table "received"
mysql_query("INSERT INTO received (phoneno, keyword, message, time) VALUES('$phoneno', '$keyword', '$message', '$time')") or die(mysql_error());

// Sets SMS-Gateway credentials
$smsgateway = "smsgateway@email.adresse";
$subject = "smsgatewayuser:smsgatewaypassword";
$header = "from: ".$keyword." <sms@domain.tld>";
$body = "#".$from."\n\n
        Vi har modtaget din besked,
        Med venlig hilsen,
        domain.tld";

// Send a email-SMS message back to user confirming message received
mail($smsgateway, $subject, $body, $header);

// Printing HTML confirmation.
echo "Besked modtaget!<br />"
    ."<br />Vi har modtaget følgende besked:<br />"
    ."Nummer: ".$phoneno."<br />Trigger: ".$keyword."<br />Besked: ".$message."<br />Tid: ".$time."<br/>"
    ."<br />Med venlig hilsen<br />domain.tld";

?>

Hvilket har løst mht. at der nu bliver gemt i databasen samt html printet på skærmen... men stadig ingen mail... hvad er der så galt med mail funktionen.
Avatar billede erikjacobsen Ekspert
28. juli 2008 - 22:17 #3
I headeren hedder det egentlig "From: ..." og ikke "from: ..."

Men send en mail til en email-adresse, som ikke lige er en smsgateway, og se hvad der sker.

Der kan også være begrænsninger på hvad man må, hvis du bruge et webhotel.
Avatar billede zarbosch Nybegynder
28. juli 2008 - 23:28 #4
Den service jeg bruger skal jeg skrive mobilnummer på modtager og password på gateway konto i 'to:' feltet. hvad jeg lige kunne læse på email2sms er det vist samme måde de gør det.

to: "mobilnummer.firmakode@email2sms.dk"

ved ikke om det kan hjælpe dig.
Avatar billede zarbosch Nybegynder
28. juli 2008 - 23:31 #5
Du har forøvrigt sneget $from ind igen under $body  :-) det skulle vist være $phoneno
Avatar billede wanze Nybegynder
29. juli 2008 - 01:09 #6
Det er ikke nødvendigt, at du ændrer navnene på dine felter i databasen, hvis du ikke har lyst. Du skal blot huske at indramme dem i citationstegn istedet.

fx vil "INSERT INTO (from) .." ikke virke, hvorimod "INSERT INTO ('from') .." vil.
Avatar billede bruger2004 Nybegynder
29. juli 2008 - 16:29 #7
Okay nu har jeg lige taget og holdt tungen lige i munden... og så ser koden således ud, jeg prøver at sende mailen til min egen mailkonto pt. og der kommer ingen mails frem (heller ikke i spam filteret).
SÅ HVAD KAN DER VÆRE GALT SIDEN DEN IKKE VIL AFSENDE MAILEN, Skal lige siges at det testes fra et webhotel ved Gigahost, ved ikke om det kan være en begrænsning der måske som gør det? er det en mulighed ?

<?

// Sets the database credentials
define("DB_SERVER", "mysqlserver");
define("DB_USER", "mysqluser");
define("DB_PASS", "mysqlpassword");
define("DB_NAME", "mysqldatabase");

// Make connection to database
mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME) or die(mysql_error());

// Sets the veriables
$phoneno = $_GET['from'];
$keyword = $_GET['trigger'];
$message = $_GET['message'];
$time = $_GET['time'];

// Insert a row of information into the table "received"
mysql_query("INSERT INTO received (phoneno, keyword, message, time) VALUES('$phoneno', '$keyword', '$message', '$time')")
or die(mysql_error());

// Sets SMS-Gateway credentials
$smsgateway = "email@address.tld";
$subject = "smsgatewayuser:smsgatewaypassword";
$header = "From: $keyword <sms@domain.tld>";
$body = "#$phoneno\nVi har modtaget din besked, Med venlig hilsen, domain.tld";

// Send a email to SMS-gateway with message back to user confirming message received
mail($smsgateway, $subject, $body, $header);

// Printing HTML confirmation.
echo "Besked modtaget!<br />"
    ."<br />Vi har modtaget følgende besked:<br />"
    ."Nummer: ".$phoneno."<br />Trigger: ".$keyword."<br />Besked: ".$message."<br />Tid: ".$time."<br/>"
    ."<br />Med venlig hilsen<br />domain.tld";

?>
Avatar billede bruger2004 Nybegynder
29. juli 2008 - 16:31 #8
ps.

DATABASE NAVNE: de er ændret så det er fint som de er nu...

SMSGateway Syntax: den er rigtigt i følge dokumentation jeg har modtaget på min løsning, men 1 problem er jo også pt. at få en mail afsendt, så må jeg jo lave om på format/syntax til gatewayen hvis det ikke virker som det er.
Avatar billede bruger2004 Nybegynder
30. juli 2008 - 10:36 #9
Okay, jeg har lige lavet en lille test, hvis jeg laver en linie uden variable så vil den godt maile...

Altså erstatter denne linie:
mail($smsgateway, $subject, $body, $header);

Med denne linie:
mail("email@address.tld", "smsgatewayuser:smsgatewaypassword", "#$phoneno\nVi har modtaget din besked, Med venlig hilsen, domain.tld", "From: $keyword <sms@domain.tld>);

Dette giver faktisk en mail men det andet gør ikke, Hvorfor det? Jeg syntes ikke der er noget forkert i det...
Avatar billede bruger2004 Nybegynder
15. august 2008 - 10:10 #10
okay, hvad der gør udfaldet i melllem de 2 linier forbliver vist en gåde... Så hvis i vil smide et svar så deler jeg points mellem jer.
Avatar billede erikjacobsen Ekspert
18. august 2008 - 13:08 #11
Ingen point til mig, tak. Forklaringen er sikkert ganske simpel ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester