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

PHP, rozwijana lista i przesyłanie danych

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
1,149 wizyt
pytanie zadane 16 maja 2021 w PHP przez Grozmo Użytkownik (750 p.)

Witam,

Staram się stworzyć listę która będzie łączyć się z bazą danych a następnie dane wybrane z tej bazy będą przesyłane do innej bazy, problem mam taki że po wybraniu danych z listy i przesłaniu ich do bazy one nie wyświetlają się w bazie, w bazie danych jest pusty rekord.

tak wygląda mój kod 

<form action="test.php" method="POST">
<select name="opcja_sel" style="width:100px" >
        <?php
        include "db1.php";

        $kat_query = mysqli_query($db,"SELECT Nazwa FROM zamowienie");

        while($zamowienie = mysqli_fetch_array($kat_query))
        {
        echo'
        <option value="opcja">'.$zamowienie['Nazwa'].'
        </option>';
        }
        ?>
        </select>

<button type="submit" name="submit" >Submit</button>
</form>

a tak wygląda plik test.php

<?php
include "db1.php";
if(isset($_POST['submit']))
{
    $opcja = $_POST['opcja_sel'];
    $insert = mysqli_query($db,"INSERT INTO `Home`(`opcja`) VALUES ('$opcja_sel')");
    if(!$insert)
    {
        echo mysqli_error();
    }
    else
    {
         mysqli_close($db);
         header("location:home.php");
         exit;
    }
}
mysqli_close($db);
?>

 

3 odpowiedzi

+1 głos
odpowiedź 16 maja 2021 przez VBService Ekspert (255,900 p.)

Tu masz jeszcze błąd

$opcja = $_POST['opcja'];

powinno być

$opcja = $_POST['opcja_sel'];

bo masz

<select name="opcja_sel" style="width:100px" >

 

<?php
include "db1.php";
if(isset($_POST['submit']))
{
    $opcja = $_POST['opcja_sel'];
    $insert = mysqli_query($db,"INSERT INTO `Home`(`opcja`) VALUES ('$opcja')");
    if(!$insert)
    {
        echo mysqli_error();
    }
    else
    {
         mysqli_close($db);
         header("location:home.php");
         exit;
    }
}
mysqli_close($db);
?>

 

komentarz 16 maja 2021 przez Grozmo Użytkownik (750 p.)

Ale to w takim razie w tym miejscu też powinien dodać opcja_sel


    $insert = mysqli_query($db,"INSERT INTO `Home`(`opcja`) VALUES ('$opcja')");

Chodzi mi o VALUES żeby opcja zmienić na opcja_sel

komentarz 16 maja 2021 przez VBService Ekspert (255,900 p.)
$opcja_sel= $_POST['opcja_sel'];
    $insert = mysqli_query($db,"INSERT INTO `Home`(`opcja`) VALUES ('$opcja_sel')");

 

0 głosów
odpowiedź 16 maja 2021 przez Arkadiusz Waluk Ekspert (289,230 p.)

W sensie, że jak zaglądasz do bazy danych, to tam wpis jest pusty? Wygląda na to, że tutaj masz złą nazwę zmiennej:

$insert = mysqli_query($db,"INSERT INTO `Home`(`opcja`) VALUES ('$opcja_sel')");

bo wyżej masz pobraną wartość do zmiennej $opcja, a nie $opcja_sel

A tak przy okazji to brakuje tu zabezpieczenia chociażby np. przed sql injection.

komentarz 16 maja 2021 przez Grozmo Użytkownik (750 p.)
edycja 16 maja 2021 przez Grozmo
<?php
include "db1.php";
if(isset($_POST['submit']))
{
    $opcja = $_POST['opcja'];
    $insert = mysqli_query($db,"INSERT INTO `Home`(`opcja`) VALUES ('$opcja')");
    if(!$insert)
    {
        echo mysqli_error();
    }
    else
    {
         mysqli_close($db);
         header("location:home.php");
         exit;
    }
}
mysqli_close($db);
?>

zmieniłem na ten sposób 

ale nadal nie działą

komentarz 16 maja 2021 przez VBService Ekspert (255,900 p.)

Sprawdź co jest "przysyłane" do test.php

<?php
  var_dump($_POST);
?>

 

0 głosów
odpowiedź 16 maja 2021 przez Grozmo Użytkownik (750 p.)

Jest progress xd 

Teraz przynajmniej jest coś dodawane do bazy danych, ale niestety nie jest to wartość wybierana z listy 

 

komentarz 16 maja 2021 przez Arkadiusz Waluk Ekspert (289,230 p.)

Do PHP i bazy trafi value z wybranej opcji, które u Ciebie zawsze jest ustawione na "opcja"

echo'
        <option value="opcja">'.$zamowienie['Nazwa'].'
        </option>';

 

komentarz 16 maja 2021 przez Grozmo Użytkownik (750 p.)

@Grozmo,

TO co mam tam wpisać?

teraz usunąłem z value "opcja" i jest teraz tak

<option value="">'.$zamowienie['Nazwa'].'
        </option>';

Ale teraz znów nic nie jest dodawane do bazy, jest dodawany pusty rekord

 

komentarz 16 maja 2021 przez Arkadiusz Waluk Ekspert (289,230 p.)
To dlatego, że masz puste value ;) Jak chcesz, aby było zapisywane i dodawane bezpośrednio to samo, co jest wyświetlane jako nazwa opcji, to wstaw to samo w atrybut value.
komentarz 16 maja 2021 przez Grozmo Użytkownik (750 p.)
Nadal nie wiem co w końcu tam wstawić
komentarz 16 maja 2021 przez Arkadiusz Waluk Ekspert (289,230 p.)

No tak jak napisałem - jak chcesz, aby do PHP i finalnie bazy trafiały wartości wprost takie, jakie są na liście, to trzeba po prostu w value podać te nazwy, coś w rodzaju:

echo '<option value="'.$zamowienie['Nazwa'].'">'.$zamowienie['Nazwa'].'</option>';
komentarz 16 maja 2021 przez Grozmo Użytkownik (750 p.)
O kuźwa działa

Dzięki mordo  masz piwo u mnie
komentarz 16 maja 2021 przez Grozmo Użytkownik (750 p.)
Powiedz mi o co jeszcze chodziło tobie z tym? "A tak przy okazji to brakuje tu zabezpieczenia chociażby np. przed sql injection"
komentarz 16 maja 2021 przez Arkadiusz Waluk Ekspert (289,230 p.)
Ktoś z odrobiną technicznej wiedzy i dostępem do tego formularza może próbować manipulować zapytaniem do bazy, a więc finalnie wyciągnąć więcej danych, usunąć coś itd. Nawet na Wikipedii jest to całkiem sensownie pokazane: https://pl.wikipedia.org/wiki/SQL_injection#Niedostateczne_filtrowanie_danych Aby się zabezpieczyć należałoby bindować wartości, a nie po prostu wstawiać je do zapytania sklejając tekst.

Podobne pytania

+1 głos
1 odpowiedź 1,057 wizyt
pytanie zadane 9 listopada 2020 w PHP przez ariva6152 Użytkownik (570 p.)
0 głosów
3 odpowiedzi 2,510 wizyt
pytanie zadane 6 grudnia 2017 w PHP przez Przemko Giszczyński Początkujący (380 p.)
0 głosów
2 odpowiedzi 381 wizyt
pytanie zadane 30 maja 2022 w PHP przez bartolomeusz80 Nowicjusz (140 p.)

93,112 zapytań

142,092 odpowiedzi

321,641 komentarzy

62,453 pasjonatów

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!

...