Как создать форму php и интегрировать систему push-уведомлений, связанную с Telegram или Whatsapp? - PullRequest
0 голосов
/ 15 апреля 2019

Наш преподаватель веб-дизайна дал нам групповой проект, в котором он просит нас создать php-форму для сбора данных о некоторых учениках и их оценках.Предполагается, что система вводит данные (имя студента, номер телефона, уровень обучения, средний балл) в базу данных и отправляет администраторам мгновенное уведомление, содержащее только что введенные данные.Есть ли способ интегрировать систему уведомлений, которая будет работать с приложением для обмена сообщениями, таким как Telegram или Whatsapp, и отправлять все данные, как только они будут введены в группу Whatsapp или Telegram?

Мы разработали форму вphp и html, но по какой-то причине он автоматически отправляется при открытии страницы, и в результате мы уже получаем сообщения об ошибках пустых полей, когда открываем страницу, что нехорошо с эстетической точки зрения.Вторая проблема заключается в том, что мы не знаем, как отправить сообщение из формы в Telegram или Whatsapp.Поскольку наша первая попытка решить проблему сильно отличается от того, что нам было предложено, мы решили удалить ошибочные части и опубликовать основной базовый код с нашим набором переменных, чтобы вы могли помочь с большей точностью.

<?php
//Debug mode on

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Fetch session last typed data
session_start();
$_SESSION['name'] = (isset($_POST['name']) ? $_POST['name'] : '');
$_SESSION['phone'] = (isset($_POST['phone']) ? $_POST['phone'] : '');
$_SESSION['gpa'] = (isset($_POST['gpa']) ? $_POST['gpa'] : '');
$_SESSION['type'] = (isset($_POST['type']) ? $_POST['type'] : '');

//Define Errors
$name_err ='Veuillez entrer le nom';
$phone_err = 'Veuillez entrer le numéro de telephone';
$gpa_err = 'Veuillez entrer le gpa';
$type_err ='Veuillez entrer le type';

//Define Placeholders
$name_ph ='name';
$phone_ph = 'Numéro de téléphone';
$gpa_ph = 'Entrez le gpa';
$type_ph ='le type';

// Vars fetch data from form for email and form use

    $name = (isset($_POST['name']) ? $_POST['name'] : '');
    $phone = (isset($_POST['phone']) ? $_POST['phone'] : '');
    $gpa = (isset($_POST['gpa']) ? $_POST['gpa'] : '');
    $type = (isset($_POST['type']) ? $_POST['type'] : '');

// User ip Address
    $ipadd = $_SERVER['REMOTE_ADDR'];

// Include db config file
    require_once "db.php";

    mysql_select_db(DB_NAME); 

//Safe database record and telegram or whatsapp message 
This is where I need you help :)

?>


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <br>
    <center><img src="/images/School-Logo.png" alt="school" style="width:123px;height:93px;"></center>
    <link rel="icon" rel="shortcut icon" type="image/x-icon" href="/images/favicon.ico">
    <title>Récuperation et envoi de donnes scolaires</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <link rel="stylesheet" href="/css/custom.css">
    <style type="text/css">
        body{ font: 14px sans-serif; }
        .wrapper{ width: 350px; padding: 20px; }
    </style>   
</head>
<body>
   <center> 
        <h1>School system</h1>
        <h3>Collecting Storing data and sending notifications</h3>

        <div class="wrapper">
        <!––  Informations -->
            <div class="studentform">

                <b>
                    Note:
                    <br>
                <ul>

                 <li>Entrez les informations</li>
                 <br>


                </ul>
                </b>

            </div>
            <br>

        <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" id="stud" method="post">

            <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>">
                <p align="left">Name <?php echo $name; ?> <font color="red">*</font> </p>
                <input type="text" name="name" class="form-control" placeholder="<?php echo $name_ph;?>" value="<?php echo $_SESSION['name'];?>">
                <span class="help-block"><?php echo $name_err; ?></span>
            </div>    
            <div class="form-group <?php echo (!empty($phone_err)) ? 'has-error' : ''; ?>">
                <p align="left">Contact <?php echo $phone; ?> <font color="red">*</font></p>
                <input type="text" name="phone" class="form-control" placeholder="<?php echo $phone_ph;?>" value="<?php echo $_SESSION['phone'];?>" align="left" >
                <span class="help-block"><?php echo $phone_err; ?></span>
            </div>
            <div class="form-group <?php echo (!empty($gpa_err)) ? 'has-error' : ''; ?>">
                <p align="left">GPA <font color="red">*</font></p>
                <input type="text" name="gpa" class="form-control" placeholder="<?php echo $gpa_ph;?>" value="<?php echo $_SESSION['gpa'];?>" align="left">
                <span class="help-block"><?php echo $gpa_err; ?></span>
            </div>


             <div class="form-group <?php echo (!empty($type_err)) ? 'has-error' : ''; ?>">
                <p align="left">C <font color="red">*</font></p>
                <select name="type" form="stud" class="pickupselect" style="width:100%;">
                <option value="bachelor">Bachelor</option>
                <option value="master">Master</option>
                </select>
                <span class="help-block"><?php echo $type_err; ?></span>
            </div>
            <div class="form-group">
                <input type="submit" class="btn btn-primary" value="Entrez les informations" align="left">
            </div>
        </form>
    </div>  </center>  
</body>
<footer>
<center>school data 2019</center>
<br>
</footer>
</html>

1 Ответ

1 голос
/ 15 апреля 2019

A) В первой части вопроса вы не проверяли, отправлена ​​форма или нет;и таким образом, верхний PHP-код выполняется каждый раз при загрузке страницы.Для решения этой проблемы нам нужно проверить, отправлена ​​ли форма:

измените кнопку отправки с:

 <input type="submit" class="btn btn-primary" value="Entrez les informations" align="left">

на:

 <input type="submit" name="submitedFrom" class="btn btn-primary" value="Entrez les informations" align="left">

Кнопка отправки должнаиметь атрибут name, чтобы его можно было отправлять через переменную $ post.

if(isset($_POST['submitedFrom']) && is_array($_POST) && !empty($_POST) && $_POST['submitedFrom'] == 'Entrez les informations'){

   // Fetch session last typed data
   session_start();
   $_SESSION['name'] = (isset($_POST['name']) ? $_POST['name'] : '');
   $_SESSION['phone'] = (isset($_POST['phone']) ? $_POST['phone'] : '');
   $_SESSION['gpa'] = (isset($_POST['gpa']) ? $_POST['gpa'] : '');
   $_SESSION['type'] = (isset($_POST['type']) ? $_POST['type'] : '');

   //Define Errors
   $name_err ='Veuillez entrer le nom';
   .
   .
   .
}

Таким образом, при отправке формы и после отправки значения кнопки submit в переменной post форма будет отправлена.

B) Для второй части вопроса, я полагаю, вы знаете, как добавить запись в БД.поэтому я объясняю, как отправить сообщение на канал Telegram, чтобы каждый участник канала мог видеть сообщения (отправленные данные формы).но я должен предупредить вас, что он содержит много чтения и исследований.Мое объяснение - всего лишь руководство по этому процессу.

Примечание: Вы должны проверить своего бота-телеграммы на реальном сервере, и он не будет работать на локальном хосте.Существуют и другие инструменты, такие как ngrok , которые позволяют вам проверить его на локальном хосте, создав границу между вашим локальным и искусственным временным сервером.

Шаги инициализации бота Telegram:

1 - Во-первых, вы должны построить бота в боте, являющемся отцом telegram, чтобы получить токен бота для вашего бота после присвоения ему имени

2 - создать канал и затем добавить ботана канал

3 - Дайте разрешение на чтение и запись в опциях канала для вашего бота (таким образом, бот может отправлять сообщения в канал)

4 - Установите веб-крючок для вашегобот, набрав этот код в адресной строке браузера:

https://api.telegram.org/bot<bot-token>/setWebhook?url=<webhook-url>

<bot-token> - bot token get from BotFather on Telegram
<webhook-url> - webhook url in base64

Устанавливая веб-крючок, вы сообщаете telegram об общении с ботом по этому URL.На самом деле, вы указываете место, где существует логика вашего бота.

5 - С помощью этой функции вы можете отправлять сообщения через бота в канал:

define('BOT_TOKEN', <bot-token>);
define('API_URL', 'https://api.telegram.org/bot' . BOT_TOKEN . '/');

function apiRequest($method, $parameters, $token=null) {

    foreach ($parameters as $key => &$val) {
        if (!is_numeric($val) && !is_string($val)) {
            $val = json_encode($val);
        }
    }
    if(empty($token))
        $url = API_URL.$method;
    else
        $url = "https://api.telegram.org/bot$token/".$method;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
    $response = curl_exec($ch);

    return $response;
}

Переменная метода - это предопределенные методы telegram дляобщаться с API.Вы можете увидеть весь список методов отправки сообщений здесь .

В этом примере вы можете отправить сообщение на канал:

$params = [
'chat_id' => 'channels chat id', 
"text" => 'form data that you want to send', 
]

apiRequest("sendMessage", $params);

Надеюсь, это поможетВы, но не забудьте внимательно прочитать документацию, прежде чем переходить к кодированию.

...