80-memoriaDB.php
1<?php
2// attende l'invio di un numero e un testo in due messaggi separati
3
4// ATTENZIONE: usa SQLite per semplicità ma non può gestire la concorrenza [2]
5// create table messaggi( id int primary key, testo varchar(100), numero int);
6// per creare il file del db in assenza di alternative: https://sqliteonline.com/
7$botToken = "metti_qui_il_tuo_id";
8$sitoApi = "https://api.telegram.org/bot".$botToken;
9$content = file_get_contents("php://input");
10$ricevuto = json_decode($content, true);
11$chatId = $ricevuto['message']['chat']['id'];
12$valore = $ricevuto['message']['text'];
13
14// connessione al database, attenzione ai diritti di accesso ai file
15// https://www.php.net/manual/en/pdo.construct.php
16$db = new PDO('sqlite:database.sqlite3');
17
18// inserisco una riga "vuota" per la chat soltanto se non c'è già
19$db->query("INSERT OR IGNORE INTO messaggi(id) VALUES($chatId)"); // [1]
20
21// https://www.php.net/manual/en/function.is-numeric.php
22if(is_numeric($valore)){
23 $db->query("UPDATE messaggi set numero=$valore WHERE id=$chatId");
24 $testoRisposta = "ok, ora scrivi un testo";
25} else {
26 $db->query("UPDATE messaggi set testo='$valore' WHERE id=$chatId");
27 $testoRisposta = "ok, ora scrivi un numero";
28}
29// leggo di nuovo io dati per vedere se li ho inseriti tutti
30$risultato = $db->query("SELECT * FROM messaggi WHERE id=$chatId");
31$row = $risultato -> fetch();
32echo $row["id"],"\n";
33if( isset($row['numero']) && isset($row['testo']) ){
34 // rispondo mettendo insieme numero e testo
35 $testoRisposta = "${row['testo']}#${row['numero']}\n";
36 // faccio pulizia nel db: i vecchi dati non mi servono più
37 $db->query("DELETE FROM messaggi WHERE id=$chatId");
38}
39
40sendMessage($chatId, $testoRisposta);
41
42function sendMessage($chatId,$text){
43 $url=$GLOBALS['sitoApi']
44 ."/sendMessage?chat_id=$chatId&parse_mode=HTML&text="
45 .urlencode($text);
46 file_get_contents($url);
47}
48