Restituzione tramite "echo" della stringa inviata

di il
5 risposte

Restituzione tramite "echo" della stringa inviata

Salve a tutti,
sto cercando di inviare tramite un sistema GPRS dei dati a un file PHP che ho creato su 000webhost che poi
li inserisce in un database mySQL.
Ho trovato un file PHP che esegue già tutto in maniera eccelsa quando invio la stringa tramite WIFI.. ma purtroppo
non funziona quando la invio tramite GPRS.. essendo la stringa che invio uguale credo di avere qualche problema nella
trasmissione dei dati.

Volevo quindi creare un file PHP che mi restituisse come echo la stringa che invio per capire cosa sta arrivando.
Ho provato con questo codice

<?php
$servername = "localhost";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
            echo "la stringa inviata è", $_POST['data']";
}
else {
    echo "No data posted with HTTP POST.";
}
function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
ma mi restituisce solo "la stringa inviata è".. non so se è sbagliato il PHP o se non riceve nulla..
Grazie mille e scusate le domande banali ma sono proprio agli inizi..

Matteo

5 Risposte

  • Re: Restituzione tramite "echo" della stringa inviata

    Echo stampa solo il valore stringa (temporaneamente usa var_dump e vedrai null) probabilmente non invii data nel corpo della richiesta POST.
  • Re: Restituzione tramite "echo" della stringa inviata

    Grazie mille per la pronta risposta la stringa che invio è questa:
    
    api_key=xxxxxxxxxxxx&sensor=BME280&location=Office&value1=24.75&value2=49.54&value3=1005.14
    
    e la invio come "Content-Type: application/x-www-form-urlencoded"

    come posso fare per vedere se arriva? esiste un altro comando oltre a echo?
    Più che altro non so dove posso vedere se arriva qualcosa e cosa arriva (magari arriva una stringa codificata male).

    Eliminando il vincolo dell' apikey dal file php funzionante registro un new record nel mysql ma si tratta di una riga vuota..
    quindi qualcosa credo che arrivi..questo il file PHP originale
     
    <?php
    $servername = "localhost";
    
    // REPLACE with your Database name
    $dbname = "";
    // REPLACE with Database user
    $username = "";
    // REPLACE with Database user password
    $password = "";
    
    // Keep this API Key value to be compatible with the ESP32 code provided in the project page. 
    // If you change this value, the ESP32 sketch needs to match
    $api_key_value = "xxxxxxxxxxxx";
    
    $api_key= $sensor = $location = $value1 = $value2 = $value3 = "";
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $api_key = test_input($_POST["api_key"]);
        if($api_key == $api_key_value) {
            $sensor = test_input($_POST["sensor"]);
            $location = test_input($_POST["location"]);
            $value1 = test_input($_POST["value1"]);
            $value2 = test_input($_POST["value2"]);
            $value3 = test_input($_POST["value3"]);
            
            // Create connection
            $conn = new mysqli($servername, $username, $password, $dbname);
            // Check connection
            if ($conn->connect_error) {
                die("Connection failed: " . $conn->connect_error);
            } 
            
            $sql = "INSERT INTO SensorData (sensor, location, value1, value2, value3)
            VALUES ('" . $sensor . "', '" . $location . "', '" . $value1 . "', '" . $value2 . "', '" . $value3 . "')";
            
            if ($conn->query($sql) === TRUE) {
                echo "New record created successfully";
            } 
            else {
                echo "Error: " . $sql . "<br>" . $conn->error;
            }
        
            $conn->close();
        }
        else {
            echo "Wrong API Key provided.";
        }
    
    }
    else {
        echo "No data posted with HTTP POST.";
    }
    
    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
    
    
    Grazie ancora
  • Re: Restituzione tramite "echo" della stringa inviata

    Ti spiego come funziona HTTP, normalmente GET o POST (Url e corpo rispettivamente) vengono codificati con la codifica delle Url o multipart (per i file con POST).
    Beh ancora una volta usa var_dump. Dato che ci sei abilità gli errori su schermo error_reporting( -1 ); in cima al tuo script.
    La funzione test_input con trim rimuove il null... lascia perdere gli esempi di 3school
  • Re: Restituzione tramite "echo" della stringa inviata

    Grazie mille! ho risolto modificando il file php per caricare i dati direttamente dall'URL perchè era il modo più semplice per me che sono alle primissime armi
    Grazie ancora e buona serata!
  • Re: Restituzione tramite "echo" della stringa inviata

    Ecco come effettuare una richiesta POST tramite codice (se non vuole utilizzare librerie come CURL) e senza form HTML https://www.php.net/manual/en/context.http.ph var1=value1&var2=value2 può essere usato nella url (GET) o nel corpo POST come nel primo codice del link che ho postato.
Devi accedere o registrarti per scrivere nel forum
5 risposte