• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przesyłanie danych z formularza do bazy

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
179 wizyt
pytanie zadane 2 października w PHP przez AceKing Nowicjusz (180 p.)

Cześć,
mam problem z przesyłaniem danych wprowadzonych w formularzu do bazy danych. Poniżej wklejam skrypt php który powinien przesyłać dane z formularza do bazy, natomiast tak się nie dzieje. Gdyby ktoś miał jakiś pomysł jak to rozwiązać, będę wdzięczny za każdą podpowiedź.

<?php
require("connect.php");

// Sprawdzenie, czy formularz został przesłany metodą POST
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Pobieranie danych z formularza
    $skType = isset($_POST['SK']) ? mysqli_real_escape_string($conn, $_POST['SK']) : '';
    $wkType = isset($_POST['wk']) ? mysqli_real_escape_string($conn, $_POST['wk']) : '';
    $mrType = isset($_POST['mr']) ? mysqli_real_escape_string($conn, $_POST['mr']) : '';
    $note = isset($_POST['note']) ? mysqli_real_escape_string($conn, $_POST['note']) : '';

    // Sprawdzanie, czy wszystkie wymagane pola zostały wypełnione
    if (!empty($skType) && !empty($wkType) && !empty($mrType) && !empty($note)) {
        // Tworzenie zapytania SQL
        $sql = "INSERT INTO uwagi (FK_SK, FK_WK, FK_Nr_mod, tresc) VALUES ('$skType', '$wkType', '$mrType', '$note')";

        // Wykonanie zapytania
        if (mysqli_query($conn, $sql)) {
            echo "Zgłoszenie zostało zapisane pomyślnie.";
        } else {
            echo "Błąd: " . mysqli_error($conn);
        }
    } else {
        echo "Proszę wypełnić wszystkie pola.";
    }
}

// Zamykanie połączenia z bazą danych
mysqli_close($conn);
?>


Sprawdziłem, czy w ogóle można za pomocą tego skryptu wysyłać jakiekolwiek dane do bazy i tak można. Zmodyfikowałem go trochę i pod wartości zmiennych przypisałem stałe wartości, a nie te pobierane z formularza. W tym wariancie ten skrypt działa i wprowadza rekordy do tabeli w bazie.

<?php
require("connect.php");

// Sprawdzenie, czy formularz został przesłany metodą POST
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Pobieranie danych z formularza
    $skType = 'SK3';
    $wkType = 'WK03_SK03';
    $mrType = '101B_014';

    // Sprawdzanie, czy wszystkie wymagane pola zostały wypełnione
    if (!empty($skType) && !empty($wkType) && !empty($mrType)) {
        // Tworzenie zapytania SQL
        $sql = "INSERT INTO uwagi (FK_SK, FK_WK, FK_Nr_mod) VALUES ('$skType', '$wkType', '$mrType')";

        // Wykonanie zapytania
        if (mysqli_query($conn, $sql)) {
            echo "Zgłoszenie zostało zapisane pomyślnie.";
        } else {
            echo "Błąd: " . mysqli_error($conn);
        }
    } else {
        echo "Proszę wypełnić wszystkie pola.";
    }
}

// Zamykanie połączenia z bazą danych
mysqli_close($conn);
?>


Wydaje mi się, że błąd musi być na poziomie pobieranie danych z formularza przez skrypt, podejrzewam, że może być gdzieś jeden znak dolara ($) za dużo lub za mało. Dodatkowo dla lepszego zorientowania przesyłam kod ze stroną na której znajduje się formularz - index.php. A także plik który ma za zadanie łączyć się z bazą danych - connect.php.

<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Formularz Zgłoszeń</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <button id="openFormBtn">Otwórz Formularz</button>

    <div id="popupForm" class="popup-form">
        <div class="form-container">
            <span class="close-btn" id="closeFormBtn">&times;</span>
            <h2>Formularz Zgłoszeń</h2>

            <div class="toggle-buttons">
                <button id="objazdBtn">Objazd</button>
                <button id="satBtn">SAT</button>
            </div>
             
            <form id="reportForm" action="add.php" method="post">
                
                <div class="dropdowns">
                    <label for="sk">Wybierz SK:</label>
                    <select id="sk" name="sk">
                        <option value="">Wybierz SK</option>

                        <?php                                          /Skrypt pobierający opcje wyboru z bazy danych
                            $host = 'localhost';
                            $dbname = 'aplikacja';
                            $username = 'root';
                            $password = '';

                            try {
                                $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
                                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                                $stmt = $pdo->query("SELECT id, name FROM sk");
                                while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                                    echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>";
                                }
                            } catch (PDOException $e) {
                                echo "Błąd połączenia: " . $e->getMessage();
                            }
                        ?>

                    </select>

                    <label for="wk">Wybierz WK:</label>
                    <select id="wk" name="wk">
                        <option value="">Wybierz WK</option>

                        <?php
                            try {
                                $pdo2 = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
                                $pdo2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                                $stmt = $pdo2->query("SELECT id, name FROM wk");
                                while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                                    echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>";
                                }
                            } catch (PDOException $e) {
                                echo "Błąd połączenia: " . $e->getMessage();
                            }
                        ?>

                    </select>

                    <label for="MR">Wybierz MR:</label>
                    <select id="MR" name="mr">
                        <option value="">Wybierz MR</option>

                        <?php
                            try {
                                $pdo3 = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
                                $pdo3->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                                $stmt = $pdo3->query("SELECT id, name FROM mr");
                                while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                                    echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>";
                                }
                            } catch (PDOException $e) {
                                echo "Błąd połączenia: " . $e->getMessage();
                            }
                        ?>

                    </select>
                </div>

                <label for="note">Uwagi (objazd):</label>
                <textarea id="note" name="note" rows="4" minlength="15" required></textarea>

                <label for="fileUpload">Dodaj pliki (max 5):</label>
                <input type="file" id="fileUpload" name="files[]" multiple accept="image/*" max="5">

                <button type="reset" id="clearFormBtn"><img id="clearIcon" src="eraser.png" alt="Clear" /></button>
                
                <button type="submit" id="submitBtn">Zatwierdź uwagę</button>
                
            </form>

            <a href="uwagi.php" target="_blank"><button id="showHistoryBtn">Wyświetl uwagi dla tego urządzenia</button></a>
        </div>
    </div>

    <script src="script.js"></script>
</body>
</html>

 

<?php

$conn = mysqli_connect(
    'localhost',
    'root',
    '',
    'aplikacja'
);

// Sprawdzenie połączenia
if (!$conn) {
    die("Błąd połączenia z bazą danych: " . mysqli_connect_error());
}

?>

komentarz 3 października przez wizarddos Nałogowiec (26,630 p.)

Nie myślałeś o wykorzystaniu prepared statements dla zwiększenia bezpieczeństwa?

2 odpowiedzi

+1 głos
odpowiedź 2 października przez Ehlert Ekspert (214,530 p.)

Proponuję stare dobre debug metody. 

<?php

var_dump($_POST); die;

 

komentarz 2 października przez AceKing Nowicjusz (180 p.)
Wpisałem tą linijkę w plik ze skryptem php na samej górze i nic nie zostało dodane do bazy. Jedynie komunikat po zatwierdzeniu formularza na stronie wygląda tak:

array(5) { ["sk"]=> string(0) "" ["wk"]=> string(0) "" ["mr"]=> string(0) "" ["note"]=> string(0) "" ["files"]=> array(1) { [0]=> string(0) "" } }
komentarz 2 października przez Ehlert Ekspert (214,530 p.)
No to chyba coś oznacza bo postem przyszły Ci tylko puste stringi.
+1 głos
odpowiedź 2 października przez redp Nowicjusz (160 p.)

Witaj,
pierwsze co rzuciło mi się w oczy to wielkość liter.

W kodzie html formularza masz małe "sk" a w php sprawdzasz duże "SK"

 <label for="sk">Wybierz SK:</label>
                    <select id="sk" name="sk">
$skType = isset($_POST['SK']) ? mysqli_real_escape_string($conn, $_POST['SK']) : '';

Biorąc pod uwagę, że później masz warunek w którym muszą być wszystkie 4 zmienne "niepuste" to on się nie spełnia.

Podobne pytania

0 głosów
0 odpowiedzi 161 wizyt
pytanie zadane 12 listopada 2019 w PHP przez Cysiu Początkujący (270 p.)
0 głosów
1 odpowiedź 2,864 wizyt

93,175 zapytań

142,185 odpowiedzi

321,977 komentarzy

62,506 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1401p. - dia-Chann
  2. 1380p. - Łukasz Piwowar
  3. 1372p. - CC PL
  4. 1370p. - Łukasz Eckert
  5. 1351p. - Tomasz Bielak
  6. 1312p. - Łukasz Siedlecki
  7. 1302p. - rucin93
  8. 1217p. - Michal Drewniak
  9. 1181p. - rafalszastok
  10. 1164p. - Adrian Wieprzkowicz
  11. 1155p. - Piotr Aleksandrowicz
  12. 1149p. - Michał Telesz
  13. 1124p. - ssynowiec
  14. 1101p. - Dominik Łempicki (kapitan)
  15. 1087p. - Marcin Putra
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...