如何使用php和stru替换显示mysql表中的所有字段

zi8p0yeb  于 2021-10-10  发布在  Java
关注(0)|答案(3)|浏览(287)

我正在使用php+mysql和一个连接api设置一个向whatsapp发送消息的系统。
我创建了一个提交表单,在这里我定义了一些模板,比如{{name}、{{expiration}、{{codeticket}},我打算将这些模板嵌入到我的消息中,发送给在mysql users表中注册的所有用户。
目标如下:向所有用户发送消息时,每个用户都将收到以下消息:ex:*
你好{{name}}你好吗?下面是您的银行票据代码:{{codeticket}}请记住,您需要在{{expiration}日期前付款。真诚地,数字支持*
为此,我创建了一个脚本,用于查询用户表中的所有字段,其中“活动”字段等于“0”,id等于“3”。
这样,我在php中创建了一个“while”循环,从users表中获取所有字段,然后将每个字段的变量放在url中发送给whatsapp。
没有模板的代码示例如下所示:

$sql = "SELECT * FROM usuarios WHERE id_ma ='". $id_ma ."' AND ativo = '".$ativo."'";
$qr = mysqli_query($conn, $sql);
$cont = mysqli_num_rows($qr);

if ($cont > 0) {
    //I make a loop with while to go through the bank and set each defaulting user.

    while ($txt = mysqli_fetch_array($qr, MYSQLI_ASSOC)) {
        $tags = array();
        $tags['name'] = $txt['nome'];
        $tags['expiration'] = $txt['data_expira'];
        $tags['linkgrupo'] = $txt['link_canal'];
        $tags['product'] = $txt['nome_prod'];
        $tags['codebillet'] = $txt['codigo_boleto'];
        $tags['link_billet'] = $txt['link_boleto'];
        foreach ($tags as $key => $valor) {
            $conteudo_msg = str_replace('{{'.$key.'}}', $valor, $conteudo_msg);
        }

        //Here I take the query data and send the msg to users via APi Whatsapp
        $url = "https://send.zaprapido.com.br/api/send.php?token=".$apiwhatsapp."&no=55".$txt["celular"]."&text=".urlencode(utf8_decode($txt['nome']))."+";
        //echo $url."<br />";
        //Vamos chamar a msg via Json pela APi

        $result = file_get_contents($url, true);
        $data = json_decode(file_get_contents($url));

问题是,当添加变量$content_msg来处理模板时,脚本只获取每个字段的第一行,并将其发送到数据库中注册的所有数字。

rkttyhzu

rkttyhzu1#

需要设置的每个while循环 $conteudo_msg 否则,它将具有previous的值,并且不会有 {{key}} 被替换。

...
$conteudo_msg = $template;
foreach($tags as $key => $valor)
{
    $conteudo_msg = str_replace('{{'.$key.'}}', $valor, $conteudo_msg);
}       
...
doinxwow

doinxwow2#

我不确定我是否理解你的问题,但你的代码中有一个输入错误。在你的 $conteudo_msg 你有 {{codeticket}} ,但在你的 $tags 数组,你有 codebillet .
不管怎样,我建议你只传递你需要替换的变量,因为你需要额外循环3次,而实际上没有替换任何东西。

r9f1avp5

r9f1avp53#

您的问题中缺少代码,但首先使用准备好的语句

mysqli = new mysqli("example.com", "user", "password", "database");
$stmt = $mysqli->prepare("SELECT * FROM usuarios WHERE id_ma =? AND ativo =?");
$stmt->bind_param("ss",$id_ma, $ativo);
$stmt->execute();
$result = $stmt->get_result();
while($txt= $result->fetch_assoc()){
    $tags = array();
    $tags['name'] = $txt['nome'];
    $tags['expiration'] = $txt['data_expira'];
    $tags['linkgrupo'] = $txt['link_canal'];
    $tags['product'] = $txt['nome_prod'];
    $tags['codebillet'] = $txt['codigo_boleto'];
    $tags['link_billet'] = $txt['link_boleto'];

    $template = "Hello {{name}} how are you? Below is your bank slip code: {{codeticket}} remembering that you need to pay by the day {{expiration}} Sincerely, Digital Support. *";

    foreach($tags as $key => $valor)
    {
        $conteudo_msg = str_replace('{{'.$key.'}}', $valor, $template);
    }
}

使用准备好的陈述,使用准备好的陈述,使用准备好的陈述,使用准备好的陈述,使用准备好的陈述,使用准备好的陈述,使用准备好的陈述,使用准备好的陈述,使用准备好的陈述,使用准备好的陈述。。。。。

相关问题