March 23rd, 2013, 07:01 AM
-
Send SMS Using GSM Modem
Hello! i wanna create a form that can send sms to multiple recipient, i've created a form that uses javascript to add or remove textbox dynamically, and i want to know how do i make this form sends sms by using the sms code here
my form:
[PHPNET]
PHP Code:
<SCRIPT language="javascript">
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var cell1 = row.insertCell(0);
var element1 = document.createElement("input");
element1.type = "checkbox";
element1.name="chkbox[]";
cell1.appendChild(element1);
var cell2 = row.insertCell(1);
cell2.innerHTML = rowCount + 1;
var cell3 = row.insertCell(2);
var element2 = document.createElement("input");
element2.type = "text";
element2.name = "CTL_RECIPIENT";
cell3.appendChild(element2);
}
function deleteRow(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
for(var i=0; i<rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if(null != chkbox && true == chkbox.checked) {
table.deleteRow(i);
rowCount--;
i--;
}
}
}catch(e) {
alert(e);
}
}
</SCRIPT>
<html>
<head>
<title>SMS via GSM</title>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<style>
.clbody {
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:9pt;
font-weight:normal;
}
.clfooter {
font-family:Verdana;
font-size:7pt;
font-weight:normal;
}
h1, .h1 {
width:100%;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:18px;
font-weight:bold;
}
hr, .hr {
color:#b0b0b0;
}
</style>
</head>
<body class="clbody">
<h1>SMS via GSM</h1>
<div style="WIDTH:700px">
</div>
<hr size="1">
<form>
<table class ="clbody" width="700" border="1">
<tr>
<td valign="top">Recipient:</td>
<td valign="top">
<INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />
<INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />
<TABLE id="dataTable" width="350px" border="1">
<TR>
<TD><INPUT type="checkbox" name="chk"/></TD>
<TD> 1 </TD>
<TD> <input type="text" name="recipient" value=""> </TD>
</TR>
</TABLE>
</td>
</tr>
<tr>
<td valign="top">Message:</td>
<td valign="top">
<input style="width: 250px" type="text" name="msg" value=""></td>
</tr>
<tr>
<td valign="top">Result code:<font color=green></td>
<td valign="top"></td>
</tr>
<tr>
<td valign="top"> </td>
<td valign="top"><input size="25" type="submit" value="Send" name="CTL_SEND" style="height: 23px; width: 250px"></td>
</tr>
</table>
<br>
<br>
</form>
</body>
</html>
[/PHPNET]
Code to send sms
PHP Code:
[PHPNET=""]<?php
error_reporting(E_ALL);
//Example
$gsm_send_sms = new gsm_send_sms();
$gsm_send_sms->debug = false;
$gsm_send_sms->port = 'COM6';
$gsm_send_sms->baud = 115200;
$gsm_send_sms->init();
$status = $gsm_send_sms->send('+60182867376', 'testing 123');
if ($status) {
echo "Message sent\n";
} else {
echo "Message not sent\n";
}
$status = $gsm_send_sms->send('+60193833271', 'testing 456');
if ($status) {
echo "Message sent\n";
} else {
echo "Message not sent\n";
}
$gsm_send_sms->close();
//Send SMS via serial SMS modem
class gsm_send_sms {
public $port = 'COM6';
public $baud = 115200;
public $debug = false;
private $fp;
private $buffer;
//Setup COM port
public function init() {
$this->debugmsg("Setting up port: \"{$this->port} @ \"{$this->baud}\" baud");
exec("MODE {$this->port}: BAUD={$this->baud} PARITY=N DATA=8 STOP=1", $output, $retval);
if ($retval != 0) {
throw new Exception('Unable to setup COM port, check it is correct');
}
$this->debugmsg(implode("\n", $output));
$this->debugmsg("Opening port");
//Open COM port
$this->fp = fopen($this->port . ':', 'r+');
//Check port opened
if (!$this->fp) {
throw new Exception("Unable to open port \"{$this->port}\"");
}
$this->debugmsg("Port opened");
$this->debugmsg("Checking for responce from modem");
//Check modem connected
fputs($this->fp, "AT\r");
//Wait for ok
$status = $this->wait_reply("OK\r\n", 5);
if (!$status) {
throw new Exception('Did not receive responce from modem');
}
$this->debugmsg('Modem connected');
//Set modem to SMS text mode
$this->debugmsg('Setting text mode');
fputs($this->fp, "AT+CMGF=1\r");
$status = $this->wait_reply("OK\r\n", 5);
if (!$status) {
throw new Exception('Unable to set text mode');
}
$this->debugmsg('Text mode set');
}
//Wait for reply from modem
private function wait_reply($expected_result, $timeout) {
$this->debugmsg("Waiting {$timeout} seconds for expected result");
//Clear buffer
$this->buffer = '';
//Set timeout
$timeoutat = time() + $timeout;
//Loop until timeout reached (or expected result found)
do {
$this->debugmsg('Now: ' . time() . ", Timeout at: {$timeoutat}");
$buffer = fread($this->fp, 1024);
$this->buffer .= $buffer;
usleep(200000);//0.2 sec
$this->debugmsg("Received: {$buffer}");
//Check if received expected responce
if (preg_match('/'.preg_quote($expected_result, '/').'$/', $this->buffer)) {
$this->debugmsg('Found match');
return true;
//break;
} else if (preg_match('/\+CMS ERROR\:\ \d{1,3}\r\n$/', $this->buffer)) {
return false;
}
} while ($timeoutat > time());
$this->debugmsg('Timed out');
return false;
}
//Print debug messages
private function debugmsg($message) {
if ($this->debug == true) {
$message = preg_replace("%[^\040-\176\n\t]%", '', $message);
echo $message . "\n";
}
}
//Close port
public function close() {
$this->debugmsg('Closing port');
fclose($this->fp);
}
//Send message
public function send($tel, $message) {
//Filter tel
$tel = preg_replace("%[^0-9\+]%", '', $tel);
//Filter message text
$message = preg_replace("%[^\040-\176\r\n\t]%", '', $message);
$this->debugmsg("Sending message \"{$message}\" to \"{$tel}\"");
//Start sending of message
fputs($this->fp, "AT+CMGS=\"{$tel}\"\r");
//Wait for confirmation
$status = $this->wait_reply("\r\n> ", 5);
if (!$status) {
//throw new Exception('Did not receive confirmation from modem');
$this->debugmsg('Did not receive confirmation from modem');
return false;
}
//Send message text
fputs($this->fp, $message);
//Send message finished indicator
fputs($this->fp, chr(26));
//Wait for confirmation
$status = $this->wait_reply("OK\r\n", 180);
if (!$status) {
//throw new Exception('Did not receive confirmation of messgage sent');
$this->debugmsg('Did not receive confirmation of messgage sent');
return false;
}
$this->debugmsg("Message sent");
return true;
}
}
?>[/PHPNET]
March 23rd, 2013, 08:31 AM
-
Please edit your post so the code is not all on one line. Remove the [ PHP ] tags then highlight the properly formatted code. Click the PHP icon.
There are 10 kinds of people in the world. Those that understand binary and those that don't.
March 23rd, 2013, 09:17 AM
-
Originally Posted by gw1500se
Please edit your post so the code is not all on one line. Remove the [ PHP ] tags then highlight the properly formatted code. Click the PHP icon.
done
March 23rd, 2013, 09:41 AM
-
Start by setting up your form to call your PHP page:
Code:
<form name="myform" action="<path to PHP page>" method="post">
I don't know what you expect this to do:
PHP Code:
[PHPNET=""]<?php
but I'm pretty sure it is not what you want, or at least it will not do what you expect.
There are 10 kinds of people in the world. Those that understand binary and those that don't.
March 23rd, 2013, 11:37 AM
-
PHPNET is a tag here on devshed, not part of his code. he double-highlighted it.
That being said...are you sure this is even possible?
HEY! YOU! Read the New User Guide and Forum Rules
"They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety." -Benjamin Franklin
"The greatest tragedy of this changing society is that people who never knew what it was like before will simply assume that this is the way things are supposed to be." -2600 Magazine, Fall 2002
Think we're being rude? Maybe you
asked a bad question or you're a
Help Vampire. Trying to argue intelligently? Please
read this.
March 23rd, 2013, 12:40 PM
-
Originally Posted by gw1500se
Start by setting up your form to call your PHP page:
Code:
<form name="myform" action="<path to PHP page>" method="post">
I don't know what you expect this to do:
[PHP]
<?php
but I'm pretty sure it is not what you want, or at least it will not do what you expect.
i've successfully make this form sent sms, but only for one recipient, as i add another recipient and try to send sms, it fails and only sent to the first recipient only, second recipient does not receive message
Code:
<SCRIPT language="javascript">
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var cell1 = row.insertCell(0);
var element1 = document.createElement("input");
element1.type = "checkbox";
element1.name="chkbox[]";
cell1.appendChild(element1);
var cell2 = row.insertCell(1);
cell2.innerHTML = rowCount + 1;
var cell3 = row.insertCell(2);
var element2 = document.createElement("input");
element2.type = "text";
element2.name = "CTL_TEL";
cell3.appendChild(element2);
}
function deleteRow(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
for(var i=0; i<rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if(null != chkbox && true == chkbox.checked) {
table.deleteRow(i);
rowCount--;
i--;
}
}
}catch(e) {
alert(e);
}
}
</SCRIPT>
<?php
error_reporting(E_ALL ^ E_NOTICE);
//Example
$gsm_send_sms = new gsm_send_sms();
$gsm_send_sms->debug = false;
$gsm_send_sms->port = 'COM6';
$gsm_send_sms->baud = 115200;
$gsm_send_sms->init();
$status = $gsm_send_sms->send($_POST["CTL_TEL"] , $_POST["CTL_MSG"]);
if ($_GET["CTL_TEL"] >= 1) {
//$success = "Message sent\n";
echo "success";
} else {
//$error = "Message not sent\n";
echo "msg not sent";
}
$gsm_send_sms->close();
//Send SMS via serial SMS modem
class gsm_send_sms {
public $port = 'COM6';
public $baud = 115200;
public $debug = false;
private $fp;
private $buffer;
//Setup COM port
public function init() {
$this->debugmsg("Setting up port: \"{$this->port} @ \"{$this->baud}\" baud");
exec("MODE {$this->port}: BAUD={$this->baud} PARITY=N DATA=8 STOP=1", $output, $retval);
if ($retval != 0) {
throw new Exception('Unable to setup COM port, check it is correct');
}
$this->debugmsg(implode("\n", $output));
$this->debugmsg("Opening port");
//Open COM port
$this->fp = fopen($this->port . ':', 'r+');
//Check port opened
if (!$this->fp) {
throw new Exception("Unable to open port \"{$this->port}\"");
}
$this->debugmsg("Port opened");
$this->debugmsg("Checking for responce from modem");
//Check modem connected
fputs($this->fp, "AT\r");
//Wait for ok
$status = $this->wait_reply("OK\r\n", 5);
if (!$status) {
throw new Exception('Did not receive responce from modem');
}
$this->debugmsg('Modem connected');
//Set modem to SMS text mode
$this->debugmsg('Setting text mode');
fputs($this->fp, "AT+CMGF=1\r");
$status = $this->wait_reply("OK\r\n", 5);
if (!$status) {
throw new Exception('Unable to set text mode');
}
$this->debugmsg('Text mode set');
}
//Wait for reply from modem
private function wait_reply($expected_result, $timeout) {
$this->debugmsg("Waiting {$timeout} seconds for expected result");
//Clear buffer
$this->buffer = '';
//Set timeout
$timeoutat = time() + $timeout;
//Loop until timeout reached (or expected result found)
do {
$this->debugmsg('Now: ' . time() . ", Timeout at: {$timeoutat}");
$buffer = fread($this->fp, 1024);
$this->buffer .= $buffer;
usleep(200000);//0.2 sec
$this->debugmsg("Received: {$buffer}");
//Check if received expected responce
if (preg_match('/'.preg_quote($expected_result, '/').'$/', $this->buffer)) {
$this->debugmsg('Found match');
return true;
//break;
} else if (preg_match('/\+CMS ERROR\:\ \d{1,3}\r\n$/', $this->buffer)) {
return false;
}
} while ($timeoutat > time());
$this->debugmsg('Timed out');
return false;
}
//Print debug messages
private function debugmsg($message) {
if ($this->debug == true) {
$message = preg_replace("%[^\040-\176\n\t]%", '', $message);
echo $message . "\n";
}
}
//Close port
public function close() {
$this->debugmsg('Closing port');
fclose($this->fp);
}
//Send message
public function send($tel, $message) {
//Filter tel
$tel = preg_replace("%[^0-9\+]%", '', $tel);
//Filter message text
$message = preg_replace("%[^\040-\176\r\n\t]%", '', $message);
$this->debugmsg("Sending message \"{$message}\" to \"{$tel}\"");
//Start sending of message
fputs($this->fp, "AT+CMGS=\"{$tel}\"\r");
//Wait for confirmation
$status = $this->wait_reply("\r\n> ", 5);
if (!$status) {
//throw new Exception('Did not receive confirmation from modem');
$this->debugmsg('Did not receive confirmation from modem');
return false;
}
//Send message text
fputs($this->fp, $message);
//Send message finished indicator
fputs($this->fp, chr(26));
//Wait for confirmation
$status = $this->wait_reply("OK\r\n", 180);
if (!$status) {
//throw new Exception('Did not receive confirmation of messgage sent');
$this->debugmsg('Did not receive confirmation of messgage sent');
return false;
}
$this->debugmsg("Message sent");
return true;
}
}
?>
<html>
<head>
<title>SMS via GSM</title>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<style>
.clbody {
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:9pt;
font-weight:normal;
}
.clfooter {
font-family:Verdana;
font-size:7pt;
font-weight:normal;
}
h1, .h1 {
width:100%;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:18px;
font-weight:bold;
}
hr, .hr {
color:#b0b0b0;
}
</style>
</head>
<body class="clbody">
<h1>SMS via GSM</h1>
<div style="WIDTH:700px">
</div>
<hr size="1">
<?php
error_reporting(E_ALL ^ E_NOTICE);
?>
<form action="" method="post" name="myForm">
<table class ="clbody" width="700" border="1">
<tr>
<td valign="top">Recipient:</td>
<td valign="top">
<INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />
<INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />
<TABLE id="dataTable" width="350px" border="1">
<TR>
<TD><INPUT type="checkbox" name="chk"/></TD>
<TD> 1 </TD>
<TD> <input type="text" name="CTL_TEL" value="<?php echo $_GET['CTL_TEL']; ?>"> </TD>
</TR>
</TABLE>
</td>
</tr>
<tr>
<td valign="top">Message:</td>
<td valign="top">
<input style="width: 250px" type="text" name="CTL_MSG" value="<?php echo $_GET['CTL_MSG']; ?>"></td>
</tr>
<tr>
<td valign="top">Result code:<font color=green></td>
<td valign="top"></td>
</tr>
<tr>
<td valign="top"> </td>
<td valign="top"><input size="25" type="submit" value="Send" name="CTL_SEND" style="height: 23px; width: 250px"></td>
</tr>
</table>
<br>
<br>
</form>
</body>
</html>
March 23rd, 2013, 12:47 PM
-
I haven't used gsm_send but I've sent pages and messages via modem from a PHP server, if that is what you mean. Although now there are web services APIs that can do it without a modem.
There are 10 kinds of people in the world. Those that understand binary and those that don't.
March 23rd, 2013, 12:54 PM
-
Make your input list an array.
You can then loop through that array in your script.
PHP Code:
foreach ($tel as $_POST['CTL_TEL']) {
.
.
.
}
There are 10 kinds of people in the world. Those that understand binary and those that don't.
March 23rd, 2013, 01:15 PM
-
Originally Posted by gw1500se
Make your input list an array.
You can then loop through that array in your script.
PHP Code:
foreach ($tel as $_POST['CTL_TEL']) {
.
.
.
}
This is the code that initialize sending sms is
Code:
$status = $gsm_send_sms->send($_POST["CTL_TEL"] , $_POST["CTL_MSG"]);
if ($status) {
echo "Message sent\n";
} else {
echo "Message not sent\n";
}
$gsm_send_sms->close();
So where exactly do i need to put the loop? so that it detects recipient's number form and sent it?
March 23rd, 2013, 01:20 PM
-
Put it around everything except the close. However, instead of using $_POST["CTL_TEL"] use $tel. You might also add that to your status messages so you know which succeeded and which failed.
There are 10 kinds of people in the world. Those that understand binary and those that don't.
March 23rd, 2013, 01:25 PM
-
Originally Posted by gw1500se
Put it around everything except the close. However, instead of using $_POST["CTL_TEL"] use $tel. You might also add that to your status messages so you know which succeeded and which failed.
is this correct?
Code:
foreach ($tel as $_POST['CTL_TEL']) {
$status = $gsm_send_sms->send($_POST["CTL_TEL"] , $_POST["CTL_MSG"]);
if ($status) {
echo "Message sent\n";
} else {
echo "Message not sent\n";
}
}
March 23rd, 2013, 01:48 PM
-
Not quite:
PHP Code:
$status = $gsm_send_sms->send($tel , $_POST["CTL_MSG"]);
P.S. Note the use of PHP tags.
There are 10 kinds of people in the world. Those that understand binary and those that don't.
March 23rd, 2013, 01:55 PM
-
Originally Posted by gw1500se
Not quite:
PHP Code:
$status = $gsm_send_sms->send($tel , $_POST["CTL_MSG"]);
P.S. Note the use of PHP tags.
Code:
foreach ($tel as $_POST['CTL_TEL']) {
$status = $gsm_send_sms->send($tel , $_POST["CTL_MSG"]);
if ($status) {
echo "Message sent\n";
} else {
echo "Message not sent\n";
}
}
Invalid argument supplied for foreach()
truly sorry, i'm really newbie here didnt get much on how to use the loop
March 23rd, 2013, 02:09 PM
-
Something is wrong with $_POST['CTL_TEL']. Do a var_dump($_POST) before the loop to see if CTL_TEL is really an array and contains the correct information. If not you need to fix your form so that it is.
There are 10 kinds of people in the world. Those that understand binary and those that don't.
March 24th, 2013, 07:12 PM
-
Originally Posted by xmuzukerx
PHP Code:
<SCRIPT language="javascript">
function addRow(tableID) {
var table = document.getElementById(tableID);
<snip>
?>
Correct html for javascript is
Code:
<script type="text/javascript">
language has been deprecated in favour of type
http://www.w3.org/TR/REC-html40/interact/scripts.html