Php 使用GSM调制解调器发送SMS
我想创建一个表单,可以向多个收件人发送短信,我创建了一个表单,使用javascript动态添加或删除文本框,当我填写一个收件人号码时,此代码成功发送短信,但无法发送多个收件人,我想知道如何使此表单向多个用户发送短信 当我试图让它发送短信给一个以上的用户,使其循环,我得到这个错误,有人可以帮助吗 警告:为foreach()提供的参数无效。Php 使用GSM调制解调器发送SMS,php,gsm,modem,Php,Gsm,Modem,我想创建一个表单,可以向多个收件人发送短信,我创建了一个表单,使用javascript动态添加或删除文本框,当我填写一个收件人号码时,此代码成功发送短信,但无法发送多个收件人,我想知道如何使此表单向多个用户发送短信 当我试图让它发送短信给一个以上的用户,使其循环,我得到这个错误,有人可以帮助吗 警告:为foreach()提供的参数无效。 函数addRow(tableID){ var table=document.getElementById(tableID); var rowCount=tab
函数addRow(tableID){
var table=document.getElementById(tableID);
var rowCount=table.rows.length;
var row=table.insertRow(rowCount);
var cell1=行插入单元格(0);
var element1=document.createElement(“输入”);
element1.type=“复选框”;
element1.name=“chkbox[]”;
单元格1.附加子元素(元素1);
var cell2=行插入单元格(1);
cell2.innerHTML=rowCount+1;
var cell3=行插入单元格(2);
var element2=document.createElement(“输入”);
element2.type=“text”;
element2.name=“电话”;
第三单元附属物(第二单元);
}
函数deleteRow(tableID){
试一试{
var table=document.getElementById(tableID);
var rowCount=table.rows.length;
对于(var i=0;i
通过GSM发送短信
克莱博迪先生{
字体系列:Verdana、Arial、Helvetica、无衬线;
字号:9pt;
字体大小:正常;
}
.clfooter{
字体系列:Verdana;
字号:7pt;
字体大小:正常;
}
h1,.h1{
宽度:100%;
字体系列:Verdana、Arial、Helvetica、无衬线;
字号:18px;
字体大小:粗体;
}
hr,.hr{
颜色:#B0;
}
通过GSM发送短信
收件人:
1.
你到底在挣扎什么?你展示了很多与你的特定应用程序相关的代码,但不清楚你需要帮助的是哪一部分。如果你只是想知道如何将HTML表单中的值转换成PHP,那么你使用它们发送短信息的事实并不是真正相关的。我可以知道为什么它不是真正相关的吗?我很困惑ling要让表单基于代码启动发送短信,首先要在表单
标签中添加操作
和方法
属性,这样当单击提交按钮时,代码
就会被执行。@AzlanMohd这是一个代码分离的问题:如果你能编写一个类似我的发送消息\u函数($number,$message)
并成功运行(发送短信)使用硬编码的数字和消息,然后用这些数字和消息替换用户提供的输入,不需要对my_send_message_函数
进行任何更改-您只是提供了不同的输入。同样,如果您能够成功捕获输入,您可以使用该输入保存到数据库、发送电子邮件或任何您想要的内容。我希望trongly建议您从一段简单得多的代码开始:删除所有JavaScript,不要担心CSS,也不要尝试发送SMS;相反,编写一个简单的表单和一个函数来回显提交的数据。一旦您了解了PHP变量的基本工作原理(提示:'$tel'
不应在其周围加引号,并且该代码中的任何地方都未定义$tel
)您可以使用SMS发送功能。
<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();
$name="CTL_TEL[]";
foreach ($tel as $_POST['CTL_TEL']) {
$status = $gsm_send_sms->send($_POST["CTL_TEL"] , $_POST["CTL_MSG"]);
$status = $gsm_send_sms->send($tel , $_POST["CTL_MSG"]);
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;
}
}
?>
<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>