błąd z wczytywaniem id z bazy danych

0

Cześć,
uczę się od niedawna programowania (o ile tak to można nazwać:) ). Chciałem zrobić prosty formularz/program typu magazyn połączony z bazą danych, aby program sczytywał jaki produkt wybieram w select, a następnie wykołowywał sekwencje albo dodawania albo odejmowania ilości zawartości.
kod:

<?php
// Dodajemy shortcode dla formularza
function formularz_modyfikacji_produktow_shortcode() {
    ob_start();
    ?>
    <form id="modyfikacja-produktow-form" method="post">
        <label for="produkt">Wybierz produkt:</label>
        <select name="produkt" id="produkt">
            <?php
            $conn = new mysqli("localhost", "login do magazynu", "*tutaj jest haslo do mojego magazynu", "baza danych sql");
            $wynik = $conn->query("SELECT * FROM produkty");
            while ($produkt = $wynik->fetch_assoc()) {
                echo "<option value='" . $produkt['id'] . "'>" . $produkt['nazwa'] . "</option>";
            }
            ?>
        </select>
        <label for="ilosc">Podaj ilość:</label>
        <input type="number" step="0.01" name="ilosc" id="ilosc" required>
        <button type="submit" name="dodaj">Dodaj</button>
        <button type="submit" name="odejmij">Odejmij</button>
    </form>
    <?php
    return ob_get_clean();
}
add_shortcode('modyfikacja_produktow', 'formularz_modyfikacji_produktow_shortcode');

// Obsługa formularza
function obsluga_formularza_modyfikacji_produktow() {
    if (isset($_POST['dodaj']) || isset($_POST['odejmij'])) {
        // Utwórz połączenie z bazą danych
        $conn = new mysqli("localhost", "login do magazynu", "*tutaj jest haslo do mojego magazynu", "baza danych sql");
        if ($conn->connect_error) {
            die("Błąd połączenia z bazą danych: " . $conn->connect_error);
        }

        // Pobranie identyfikatora produktu z formularza
        $produkt['id'] = intval($_POST['produkt']);

        // Pobranie aktualnej ilości produktu z bazy danych
        $zapytanie = "SELECT ilosc FROM produkty WHERE id = ?";
        $stmt = $conn->prepare($zapytanie);
        $stmt->bind_param("i", $produkt['id']);
        $stmt->execute();
        $stmt->bind_result($aktualna_ilosc);
        $stmt->fetch();
        $stmt->close();

        // Pobranie ilości do dodania lub odjęcia
        $ilosc = floatval($_POST['ilosc']);

        // Aktualizacja ilości produktu w bazie danych
        if (isset($_POST['dodaj'])) {
            $nowa_ilosc = $aktualna_ilosc + $ilosc;
        } elseif (isset($_POST['odejmij'])) {
            $nowa_ilosc = $aktualna_ilosc - $ilosc;
        }

        // Wykonaj aktualizację bazy danych
        $update_query = "UPDATE produkty SET ilosc = ? WHERE id = ?";
        $update_stmt = $conn->prepare($update_query);
        $update_stmt->bind_param("id", $nowa_ilosc, $produkt_id);
        $update_stmt->execute();
        $update_stmt->close();

        // Zakończ połączenie z bazą danych
        $conn->close();
    }
}
add_action('init', 'obsluga_formularza_modyfikacji_produktow');
?>

a błąd, który występuje to:

Identyfikator produktu: 1Zapytanie SQL: SELECT * FROM produkty WHERE id = 1object(mysqli_result)#2512 (5) { ["current_field"]=> int(0) ["field_count"]=> int(3) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) } Nie znaleziono produktu o podanym identyfikatorze.

chat gpt nie pomógł w rozwiązaniu problemu.

Dziękuję z góry za pomoc!

0

No a masz coś w bazie w ogóle?

0

tak mam baze i w bazie tabele produkty

id
nazwa
liczba
1
produkt 1
5
2
produkt 2
10

i co wazne w tym selectie wyswietlaja sie normalnie "produkt 1" "produkt 2"

0

Skąd masz ten błąd "Nie znaleziono produktu o podanym identyfikatorze."? W kodzie nie widzę takiego tekstu.

0

wyswietla mi sie on na stronie wordpress, robie to przez wtyczke

1

SELECT * FROM produkty WHERE id = 1object(mysqli_result) tego zapytania nigdzie nie ma w kodzie, który podałeś. Z niego wynika, że zamiast przekazać do zapytania wartości ID to przekazujesz mysqli_result
BTW zapytania tak się składało 20 lat temu.

0
  1. podaj wersję PHP i MySQL
  2. mysqli jest od dawna deprecated, używaj PDO
  3. edit: nie używaj snake_case, użyj camelCase i zapoznaj się z normami PSR

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.