Προς το περιεχόμενο

HTTP POST no values


Geocheats2

Προτεινόμενες αναρτήσεις

Χρησιμοποιώ αυτό το php για να μαζέψω κάποιες μεταβλητές από ένα esp8266 και να τις περάσω σε μια mysql το βρήκα εδώ

<?php

/*
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-esp8266-mysql-database-php/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

$servername = "localhost";

// REPLACE with your Database name
$dbname = "1";
// REPLACE with Database user
$username = "1";
// REPLACE with Database user password
$password = "1";

// 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 = "1";

$SERIAL = $SSID = $PASSWORD = $HVACCELL = $HVACMAIL = $CLIENTCELL = $CLIENTMAIL = $FRIDGENAME = $Reserved2 = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if($api_key == $api_key_value) {
        $SERIAL = test_input($_POST["SERIAL"]);
        $SSID = test_input($_POST["SSID"]);
        $PASSWORD = test_input($_POST["PASSWORD"]);
        $HVACCELL = test_input($_POST["HVACCELL"]);
        $HVACMAIL = test_input($_POST["HVACMAIL"]);
		$CLIENTCELL = test_input($_POST["CLIENTCELL"]);
		$CLIENTMAIL = test_input($_POST["CLIENTMAIL"]);
		$FRIDGENAME = test_input($_POST["FRIDGENAME"]);
		$Reserved2 = test_input($_POST["Reserved2"]);
        
        // Create connection
        $conn = new mysqli($servername, $username, $password, $dbname);
        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        } 
        
        $sql = "INSERT INTO 1.1 (SERIAL, SSID, PASSWORD, HVACCELL, HVACMAIL, CLIENTCELL, CLIENTMAIL, FRIDGENAME, Reserved2)
        VALUES ('" . $SERIAL . "', '" . $SSID . "', '" . $PASSWORD . "', '" . $HVACCELL . "', '" . $HVACMAIL . "', '" . $CLIENTCELL . "', '" . $CLIENTMAIL . "', '" . $FRIDGENAME . "', '" . $Reserved2 . "')";
        
        if ($conn->query($sql) === TRUE) {
            echo "New record created successfully";
			echo $sql;
        } 
        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;
}

?>

Αλλά ενώ παίρνω 200 σαν response στον mozilla και στο log του apache βλέπω κανονικά τις μεταβλητές που εκανα post με την εντολή 

tail -100 /var/log/apache2/access.log

Στο echo $sql;

Παίρνω αυτό

Αναφορά σε κείμενο

New record created successfully
INSERT INTO 1.1 (SERIAL, SSID, PASSWORD, HVACCELL, HVACMAIL, CLIENTCELL, CLIENTMAIL, FRIDGENAME, Reserved2) VALUES ('', '', '', '', '', '', '', '', '')

 

και στο phpmyadmin πάλι παίρνω κενά ενώ ο SERIAL ο οποίος έχει auto increment ανεβένει κανονικά

 

Δεν νομίζω ότι έχω κάποιο λάθος αλλά λόγο απειρίας έχω παραλείψει κάτι κουλό όπως π.χ. μεγάλο url

 

Μήπως γνωρίζει κανείς??

Γιώργος

 

Y.Γ το λινκ του post

/post-esp-data.php?SERIAL=NULL&SSID=data1&PASSWORD=data2&HVACCELL=data3&HVACMAIL=data4&CLIENTCCELL=data5&CLIENTMAIL=data6&FRIDGENAME=data7&Reserved2=data8

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
Αναφορά σε κείμενο

/post-esp-data.php?SERIAL=NULL&SSID=data1&PASSWORD=data2&HVACCELL=data3&HVACMAIL=data4&CLIENTCCELL=data5&CLIENTMAIL=data6&FRIDGENAME=data7&Reserved2=data8

Τις μεταβλητές τις περνάς στο query string, οχι στο request body. Θα τις διαβάσεις με $_GET και όχι $_POST. Ή ακόμα καλύτερα, όταν στέλνεις το request θα στείλεις το payload στο request body και όχι σαν μέρος του URL. 

ΥΓ: Διάβασε για prepared statements και άλλαξε τον κώδικά σου άμεσα.

Επεξ/σία από t(o.ot)
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
23 ώρες πριν, t(o.ot) είπε

Τις μεταβλητές τις περνάς στο query string, οχι στο request body. Θα τις διαβάσεις με $_GET και όχι $_POST. Ή ακόμα καλύτερα, όταν στέλνεις το request θα στείλεις το payload στο request body και όχι σαν μέρος του URL. 

ΥΓ: Διάβασε για prepared statements και άλλαξε τον κώδικά σου άμεσα.

Ευχαριστώ για την απάντηση το esp8266 τις στέλνει με POST και εγώ μέσα από τον firefox με post τις στέλνω (F12 -> Network -> επιλογη της GET -> Ηeader -> Edit and Resend -> Method POST)αλλά ενώ τις λαμβάνει κανονικά ο apache και το php ψιλοδουλευει (γτ μου φτιάχνει καινούργιο row στο table ) δεν μου περνάει τις μεταβλητές στην βάση, έχεις καμιά ιδέα ?? 

ΘΑ σου ποσταρα και το table μου αλλα με κοβει το cloudfaire

Αγνόησε το api_key

Επεξ/σία από Geocheats2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν είπα ότι τις έστειλες με GET request αντί για POST request, είπα ότι τις στέλνεις στο query string του URL και όχι στο request body.

Δοκίμασε το παρακάτω:

l($url, PHP_RL_QUERY)
parse_url($url, PHP_URL_QUERY)

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στις 27/4/2020 στις 8:19 ΜΜ, Geocheats2 είπε

και εγώ μέσα από τον firefox με post τις στέλνω

Μη το κάνεις αυτό σου τρώει ώρα. Δοκίμασε το Postman, μπορείς να κάνεις ότι request θέλεις. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...