Suono di notifica in nuova riga

Samuele Ronzani

Utente Attivo
7 Ott 2016
42
0
6
Buongiorno a tutti ragazzi,
ho un file index.php che legge semplicemente un database in modo tabellare e che ogni 2 minuti fa un refresh della situazione.

Il file è di sola visualizzazione, ma vorrei che quando effettua un refresh, se presente una nuova riga rispetto all'aggiornamento precedente, deve emettere un suono di notifica.

Ho visto anche questa discussione, ma ahimè mai conclusa:


Avete qualche idea su come impostare il codice? Che linguaggio usare?

Grazie in anticipo.
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.296
331
83
Hai aperto la discussione ieri non mi sembra molto! Devi avere pazienza qui nessuno è tenuto a rispondere!
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.296
331
83

Tommy03

Utente Attivo
6 Giu 2018
508
50
28
17
Bassano del Grappa (VI)
Che codice stai usando?
Penso che la miglior soluzione sia fare una funzione con una chiamata ajax e la richiami ogni 2 minuti, e se c'è un nuovo record con questa funzione viene emesso il suono
 

Samuele Ronzani

Utente Attivo
7 Ott 2016
42
0
6
Che codice stai usando?
Penso che la miglior soluzione sia fare una funzione con una chiamata ajax e la richiami ogni 2 minuti, e se c'è un nuovo record con questa funzione viene emesso il suono
HTML:
?php
    include('dbconnection.php');
    session_start();
    $query = "SELECT `order`.* FROM admin LEFT JOIN `order` ON `admin`.`punto_vendita` = `order`.`punto_vendita` WHERE (((`order`.`stato`)=0))";
   
    $run_query = mysqli_query($connection, $query);
?>
<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
  <link href="css/style.css" rel="stylesheet" type="text/css">
  <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
</head>
<body>
<div id="visualizzaTabella">
<div class="container">
    <div class="top_header">
        <h2>
            ORDINI IN ARRIVO
            <?php
            if ($result=mysqli_query($connection,$query))
             {
              $rowcount=mysqli_num_rows($result);
              printf("( %d )\n",$rowcount);
              mysqli_free_result($result);
             }
            ?>
        </h2>
    </div>
    <br>        
      <div id="#">
      <table class="table table-bordered table table-hover">
        <thead>
          <tr>
            <th style="display:none;">Id</th>
            <th>Id</th>
            <th>Parthner</th>
            <th>Dettaglio Ordine</th>
            <th>Stato</th>
          </tr>
        </thead>
        <tbody>
       
         <?php
            while( $result = mysqli_fetch_assoc($run_query) )
            {
            if($result) {
         ?>
          <tr>
           <td style="display:none;"><?php echo $result['id']; ?></td>
            <td><?php echo $result['id_order']; ?></td>
            <td><img  align="middle" src="<?php echo $result['parthner']?>" width="50%" ></td>
            <td><?php echo $result['json_ordine'] ?></td>
            <td>
                <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
                    <input value="<?php echo $result['id'] ?>" type="hidden" name="id">
                    <input value="<?php echo $result['stato'] ?>" type="submit" name="">
               </form>
           </td>
           </tr> <?php } } ?>
            </tbody>
        </table>
        </div>
    </div>
</div>
</body>
</html>
<?php
    if($_SERVER["REQUEST_METHOD"]=="POST")
    {
    }
    mysqli_close($connection);
?>
Ti posto il codice, in effetti mi piacerebbe avere anche l'aggiornamento automatico ogni 3 secondi senza doveri ricaricare la pagina ogni volta. Avevo letto comunque che anche con ajax si poteva fare.
 

Tommy03

Utente Attivo
6 Giu 2018
508
50
28
17
Bassano del Grappa (VI)
Si, devi procedere in questo modo:
1. aggiungi al tr un id, in modo da poter verificare qual'è l'ultima riga visualizzata dall'utente (per poter capire se ci sono notifiche nuove o no):
Quindi questo:
PHP:
         <?php
            while( $result = mysqli_fetch_assoc($run_query) )
{
if($result) {
         ?>
          <tr>
Diventa:
PHP:
<?php
            while( $result = mysqli_fetch_assoc($run_query) )
{
if($result) {
         ?>
          <tr id="<?php echo $result['id_order']; ?>">
2.poi aggiungi la chiamata ajax, che viene eseguita ogni 3 secondi (il 3000 nel codice è il numero di millisecondi):
HTML:
<script>
$(document).ready(function(){
setInterval(newNoti, 3000);
function newNoti(){
//questa riga prende l'ultimo id della tabella
var ultimo = $(".table tr").last().attr("id");
$.ajax({
type: "post",
url: "file2.php",
data:{'last_id':ultimo},
success:function(resp){
        if(resp != ""){
$("#audio").play();
$(".table").append(resp);
}
        },
        error:function(){
            alert('Some problem occured, please try again.');
        }
})
}
});
</script>
3. aggiungi un file audio a index cosi:
HTML:
<audio src="audio.mp3" id="audio"></audio>
4. crei un file chiamato file2.php in cui controlli se ci sono nuove righe (dovresti fornire più info sul database, in generale la struttura è questa, bisogna scrivere la query):
PHP:
<?php
//includi la connessione al db

$last_id = $_POST['last_id'];
//nella query devi selezionare con un where solo le righe con un id maggiore (più recente) di $last_id
$query = mysqli_query($conn, "SELECT ...");
while( $result = mysqli_fetch_assoc($query) ) {
?>
<tr>
           <td style="display:none;"><?php echo $result['id']; ?></td>
            <td><?php echo $result['id_order']; ?></td>
            <td><img  align="middle" src="<?php echo $result['parthner']?>" width="50%" ></td>
            <td><?php echo $result['json_ordine'] ?></td>
            <td>
                <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
                    <input value="<?php echo $result['id'] ?>" type="hidden" name="id">
                    <input value="<?php echo $result['stato'] ?>" type="submit" name="">
               </form>
           </td>
           </tr>
<?php } ?>
Prova cosi, non so se è il metodo più veloce
 

Samuele Ronzani

Utente Attivo
7 Ott 2016
42
0
6
Ti amo!
Si, devi procedere in questo modo:
1. aggiungi al tr un id, in modo da poter verificare qual'è l'ultima riga visualizzata dall'utente (per poter capire se ci sono notifiche nuove o no):
Quindi questo:
PHP:
         <?php
            while( $result = mysqli_fetch_assoc($run_query) )
{
if($result) {
         ?>
          <tr>
Diventa:
PHP:
<?php
            while( $result = mysqli_fetch_assoc($run_query) )
{
if($result) {
         ?>
          <tr id="<?php echo $result['id_order']; ?>">
2.poi aggiungi la chiamata ajax, che viene eseguita ogni 3 secondi (il 3000 nel codice è il numero di millisecondi):
HTML:
<script>
$(document).ready(function(){
setInterval(newNoti, 3000);
function newNoti(){
//questa riga prende l'ultimo id della tabella
var ultimo = $(".table tr").last().attr("id");
$.ajax({
type: "post",
url: "file2.php",
data:{'last_id':ultimo},
success:function(resp){
        if(resp != ""){
$("#audio").play();
$(".table").append(resp);
}
        },
        error:function(){
            alert('Some problem occured, please try again.');
        }
})
}
});
</script>
3. aggiungi un file audio a index cosi:
HTML:
<audio src="audio.mp3" id="audio"></audio>
4. crei un file chiamato file2.php in cui controlli se ci sono nuove righe (dovresti fornire più info sul database, in generale la struttura è questa, bisogna scrivere la query):
PHP:
<?php
//includi la connessione al db

$last_id = $_POST['last_id'];
//nella query devi selezionare con un where solo le righe con un id maggiore (più recente) di $last_id
$query = mysqli_query($conn, "SELECT ...");
while( $result = mysqli_fetch_assoc($query) ) {
?>
<tr>
           <td style="display:none;"><?php echo $result['id']; ?></td>
            <td><?php echo $result['id_order']; ?></td>
            <td><img  align="middle" src="<?php echo $result['parthner']?>" width="50%" ></td>
            <td><?php echo $result['json_ordine'] ?></td>
            <td>
                <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
                    <input value="<?php echo $result['id'] ?>" type="hidden" name="id">
                    <input value="<?php echo $result['stato'] ?>" type="submit" name="">
               </form>
           </td>
           </tr>
<?php } ?>
Prova cosi, non so se è il metodo più veloce
Grazie! Domani mattina ti faccio sapere!!
 

Samuele Ronzani

Utente Attivo
7 Ott 2016
42
0
6
Ciao, i posto i codici:

il file o_arrivo.php (dove arrivano gli ordini):
PHP:
<?php
    include('dbconnection.php');
    session_start();
    $query = "SELECT `order`.* FROM admin LEFT JOIN `order` ON `admin`.`punto_vendita` = `order`.`punto_vendita` WHERE (((`order`.`stato`)=0))";
    
    $run_query = mysqli_query($connection, $query);
?>
<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
  <link href="css/style.css" rel="stylesheet" type="text/css">
  <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
  <script language="javascript" type="text/javascript">
    function loadlink(){
    $('#links').load('o_arrivo.php',function () {
         $(this).unwrap();
    });
    }

    loadlink(); // This will run on page load
    setInterval(function(){
        loadlink() // this will run after every 5 seconds
    }, 5000);
  </script>
</head>
<body>
<div id="visualizzaTabella">
<div class="container">
    <div class="top_header">
        <h2>
            ORDINI IN ARRIVO
            <?php
            if ($result=mysqli_query($connection,$query))
             {
              $rowcount=mysqli_num_rows($result);
              printf("( %d )\n",$rowcount);
              mysqli_free_result($result);
             }
            ?>
        </h2>
    </div>
    <br>         
      <div id="links">
      <table class="table table-bordered table table-hover">
        <thead>
          <tr>
            <th style="display:none;">Id</th>
            <th>Id</th>
            <th>Parthner</th>
            <th>Dettaglio Ordine</th>
            <th>Stato</th>
          </tr>
        </thead>
        <tbody>
        
         <?php
            while( $result = mysqli_fetch_assoc($run_query) )
            {
            if($result) {
         ?>
          <tr>
           <td style="display:none;"><?php echo $result['id']; ?></td>
            <td><?php echo $result['id_order']; ?></td>
            <td><img  align="middle" src="<?php echo $result['parthner']?>" width="50%" ></td>
            <td><?php echo $result['json_ordine'] ?></td>
            <td>
                <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
                    <input value="<?php echo $result['stato'] ?>" type="submit" name="">
               </form>
           </td>
           </tr> <?php } } ?>
            </tbody>
        </table>
        </div>
    </div>
</div>
</body>
</html>
<?php
    if($_SERVER["REQUEST_METHOD"]=="POST")
    {   
        $url = "######";
        $ch = curl_init();

        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_POST, true);
        curl_setopt($ch,CURLOPT_HTTPHEADER, array(
            "Authorization: bWVtZW50byBhdWRlcmUgc2VtcGVy",
            "Azione: 1")
            );

        //So that curl_exec returns the contents of the cURL; rather than echoing it
        //curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);

        $result = curl_exec($ch);
        
        $response = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        
        curl_close($ch);
        echo $response ;
        
        
        }
        mysqli_close($connection);
        ?>
Qui il codice del file file2.php

PHP:
<?php
include('dbconnection.php');
session_start();

$last_id = $_POST['last_id'];
//nella query devi selezionare con un where solo le righe con un id maggiore (più recente) di $last_id
$query = mysqli_query($connection, "SELECT `order`.* FROM admin LEFT JOIN `order` ON `admin`.`punto_vendita` = `order`.`punto_vendita` WHERE (((`order`.`stato`)=0))");
while( $result = mysqli_fetch_assoc($query) ) {
?>
<tr>
           <td style="display:none;"><?php echo $result['id']; ?></td>
            <td><?php echo $result['id_order']; ?></td>
            <td><img  align="middle" src="<?php echo $result['parthner']?>" width="50%" ></td>
            <td><?php echo $result['json_ordine'] ?></td>
            <td>
                <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
                    <input value="<?php echo $result['id'] ?>" type="hidden" name="id">
                    <input value="<?php echo $result['stato'] ?>" type="submit" name="">
               </form>
           </td>
           </tr>
<?php } ?>
Fammi sapere.

Grazie
 

Samuele Ronzani

Utente Attivo
7 Ott 2016
42
0
6
non mi si visualizzano i file, riesci a postare i codici direttamente qui (bastano il file principale e file2.php).
Intanto fai una prova, aggiungi:
HTML:
alert(ultimo);
subito prima di $.ajax({ ...
e dimmi se visualizzi o meno l'alert correttamente
Mi risponde con una notifica pop-up: undefined
 

Samuele Ronzani

Utente Attivo
7 Ott 2016
42
0
6
Scusa, dagli un'occhiata

PHP:
<?php
    include('dbconnection.php');
    session_start();
    $query = 'SELECT `order`.* FROM `order` WHERE (`order`.`stato`= 0 and `order`.`punto_vendita`='.$_SESSION['id_pv'].')';   
    $run_query = mysqli_query($connection, $query);
?>
<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  <link href="css/style.css" rel="stylesheet" type="text/css">
  <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
  <script type="text/javascript">
    $(document).ready(function(){
    setInterval(newNoti, 3000);
    function newNoti(){
    var ultimo = $('table tr:last td:first').text();
    //var ultimo = $(".table tr").last().attr("punto_vendita");
    alert(ultimo)
    $.ajax({
    type: "post",
    url: "file2.php",
    data:{'last_id':ultimo},
    success:function(resp){
            if(resp != ""){
    document.querySelector('audio').play();
    $(".table").append(resp);
    }
            },
            error:function(){
                alert('Some problem occured, please try again.');
            }
    })
    }
    });
  </script>
</head>
<body>
<audio src="icq_sound_mp3.mp3" id="audio"></audio>
<div id="visualizzaTabella">
<div class="container">
    <div class="top_header">
        <h2>
            ORDINI IN ARRIVO
            <?php
            if ($result=mysqli_query($connection,$query))
             {
              $rowcount=mysqli_num_rows($result);
              printf("( %d )\n",$rowcount);
              mysqli_free_result($result);
             }
            ?>
        </h2>
    </div>
    <br>         
      <div id="links">
      <table class="table table-bordered table table-hover">
        <thead>
          <tr>
            <th style="display:none;">Id</th>
            <th>Id</th>
            <th>Parthner</th>
            <th>Dettaglio Ordine</th>
            <th>Stato</th>
          </tr>
        </thead>
        <tbody>
        <?php
            while( $result = mysqli_fetch_assoc($run_query) )
        {
        if($result) {
         ?>
          <tr id="<?php echo $result['id_order']; ?>">
          <tr>
           <td style="display:none;"><?php echo $result['id']; ?></td>
            <td><?php echo $result['id_order']; ?></td>
            <td><img  align="middle" src="<?php echo $result['parthner']?>" width="50%" ></td>
            <td><?php echo $result['json_ordine'] ?></td>
            <td>
                <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
                    <input value="<?php echo $result['stato'] ?>" type="submit" name="">
               </form>
           </td>
           </tr> <?php } } ?>
            </tbody>
        </table>
        </div>
    </div>
</div>
</body>
</html>
<?php
    if($_SERVER["REQUEST_METHOD"]=="POST")
    {   
        $id = ($_POST["id"]);
        $url = "####".$id;
        $ch = curl_init();

        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_POST, true);
        curl_setopt($ch,CURLOPT_HTTPHEADER, array(
            "Authorization: bWVtZW50byBhdWRlcmUgc2VtcGVy",
            "Azione: 1")
            );

        //So that curl_exec returns the contents of the cURL; rather than echoing it
        //curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);

        $result = curl_exec($ch);
        
        $response = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        
        curl_close($ch);
        if ($response == 200) {
        echo '<script type="text/javascript">';
        echo 'alert("COMUNICAZIONE ESEGUITA CORRETTAMENTE")';
        echo '</script>';
        exit;}
        else{
            echo '<script type="text/javascript">';
            echo 'alert("ERRORE DI COMUNICAZIONE, RIPROVA")';
            echo '</script>';
            exit;
        }
        }
        mysqli_close($connection);
        ?>