我之前曾经问过类似的问题,但这有点不同。
我刚刚启动了在线短信网关服务,可让您在线接收消息。
一个常见的数字,为任何传入的消息分配一个共享的公共号码,然后通过 开头显示的选择的标识关键字对其进行排序并分配给特定客户文本 。
identifier关键字是一个aplhanumeric值。
通过 php [POST]页面将传入的文本转发到数据库表是我正在做的事情;并且,正如您可能想象的那样,在输入插入时删除初始关键字是我的愿望(默认情况下没有完成)。
表中存储的所有传入的mesagges都以相同的单词开头,这在数据保护方面当然是不必要的和还原的
我该怎么做?这里的一个明显优势是密钥是唯一且不变的。
这是我目前在我的php页面中使用的脚本,其中文本被转发。 (那些POST参数是服务管理员提供的参数)
<?php
if ($_SERVER['REQUEST_METHOD']!='POST')
{
echo 'No Script Here!';
exit;
}
$con = new mysqli('localhost','','','');
$insert_sms_success = FALSE;
if (mysqli_connect_errno()==0)
{
$sent_dt = $_POST['Timestamp'];
$txt = $_POST['Body'];
$sender_number = $_POST['Sender'];
$shared_number = $_POST['Destination'];
$txt = mysqli_real_escape_string($con, $txt);
$sender_number = mysqli_real_escape_string($con, $sender_number);
$sql="INSERT INTO SMS_IN_A(sms_text,sender_number,sent_dt) VALUES ('$txt','$sender_number','$sent_dt')";
$insert_sms_success = mysqli_query($con,$sql);
mysqli_close($con);
}
if ($insert_sms_success)
{
}
else
{
http_response_code(500);
}
?>
ps:你可以看到所有传入的文本都以相同的单词开头,在我选择的情况下是#34; posto&#34; enter image description here
答案 0 :(得分:0)
首先,我强烈建议切换到PDO并使用prepare清理数据,然后再将其插入数据库。现在,由于您正在从文本消息中插入正文文本,因此您很容易受到SQL注入攻击。
话虽如此,你只想使用PHPs字符串操作方法来删除第一个单词。
$s = 'posto my text message';
$s = substr($s, strpos($s, ' ')); // $s = 'my text message'
现在,如果您绝对必须使用SQL执行此操作,您可以这样做:
$sql = "INSERT INTO SMS_IN_A(sms_text,sender_number,sent_dt) VALUES (
SUBSTRING('$txt', LOCATE(' ', '$txt')),
'$sender_number',
'$sent_dt')"
同样,真的真的不建议这样做,因为很容易让某人在文本正文中发送恶意SQL,这可能会毁了你的一天(以及你的数据库)