Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularze $_POST
Forum PHP.pl > Forum > PHP
faleth
Witam,

mam problem z formularzem. Z listy wyboru chcę usunąć rekord z Bazy danych. Chąc ułatwić sobie zadanie w liscie wpisałem kilka zmiennych i nie wiem jak to poźniej wstawić do zapytanie MySql. Oto moj select z formularza.

  1. echo '<select class="form-control" name = "usun">';
  2. echo '<option value="">Wybierz zabieg z listy który chcesz usunąć</option>';
  3. while($opcje = mysqli_fetch_assoc($rezultat))
  4. {
  5. echo '<option value="'.$opcje['data'].$opcje['numer_pola'].$opcje['roslina'].$opcje['nazwa_handlowa'].'">'."Data: ".$opcje['data']." Numer: ".$opcje['numer_pola'].' '
  6. ." Uprawa: ".$opcje['roslina']." Środek: ".$opcje['nazwa_handlowa'].'</option>';
  7. }
  8. echo '</select><br>';


po przesłaniu formularza $_POST przesyła mi

  1. usun 2016-05-25291pszenicaBoogie


można to jakoś rozdzielić?
Szymciosek
dziwisz sie? skoro laczysz stringi w <option value={tutaj twoj string}

ale nawet go sobie niczym nie rozdzielasz?

skorzystaj z JSON w value

stworz sobie wczesniej tablice, a pozniej ja "encoduj" czyli mniej wiecej Twoj kod bedzie wygladal tak

  1. $values = [
  2. 'date' => $opcje['data'],
  3. 'fieldNumber' => $opcje['numer_pola'],
  4. 'plant' => $opcje['roslina'],
  5. 'name' => $opcje['nazwa_handlowa']
  6. ];
  7.  
  8. echo '<option value="' . json_encode($values) . '">'....


dalej powinienes dac rade, z formularz dostaniesz wartosc w postaci JSON, ktora musisz "decodowac"

wiecej info w linkach


http://php.net/manual/en/function.json-encode.php
http://php.net/manual/en/function.json-decode.php
faleth
dzieki wielkie. to są moje początki z PHP i całą resztą więc niektórych rzeczy nie wiem. Teraz już sobie poradzę smile.gif
Szymciosek
No to powodzenia wink.gif
faleth
jeszcze jeden problem. $_POST nic nie wysyła
Szymciosek
Pokaż kod.

W pierwszym poście pisałeś, że coś działa, a po zmianie na JSON juz nie?
faleth
no niestety jak zmieniłem na json i $_POST nic nie wysyła

  1. $query = "SELECT data , numer_pola , roslina , nazwa_handlowa FROM zabiegi WHERE id_uzytkownika = ('$id') ";
  2. $rezultat = $polaczenie->query($query);
  3. $values = [];
  4. echo '<select class="form-control" name = "usun">';
  5. echo '<option value="">Wybierz zabieg z listy który chcesz usunąć</option>';
  6. while($opcje = mysqli_fetch_assoc($rezultat))
  7. {
  8. $values = ['date' => $opcje['data'],'fieldNumber' => $opcje['numer_pola'],'plant' => $opcje['roslina'],'name' => $opcje['nazwa_handlowa']];
  9.  
  10. echo '<option value="'.json_encode($values).'">'."Data: ".$opcje['data']." Numer: ".$opcje['numer_pola'].' '." Uprawa: ".$opcje['roslina']." Środek: ".$opcje['nazwa_handlowa'].'</option>';
  11.  
  12. }
  13. echo '</select><br>';
Szymciosek
1. Kod powinien Ci wygenerowac html tego typu
<option value="{"date":"test","fieldNumber":"asd","plant":"dupa","name":"444"}">test</option>

2. Czy w $_POST w ogole nic nie istnieje, a wczesniej istanialo?

Powinienes miec klucz w $_POST['usun']

  1. var_dump($_POST);


3. Podejrzewam, że to nie jest cały kod html, ale http://stackoverflow.com/a/17139540
faleth
$_POST['usun'] generuje takie coś

  1. ["usun"]=> string(1) "{"
CuteOne
json_encode(['id'=>10]); zwróci {"id"=>"10"}, innymi słowy option będzie wyglądał tak <option value="{"id":"10"}">, i dlatego nie zadziała.

Najprostszym rozwiązaniem jest dodanie _ (lub innego znaku) do stringa np
  1. echo '<option value="'. $opcje['data'] . '_' . $opcje['numer_pola'] . '_' . $opcje['roslina'] . '_' . $opcje['nazwa_handlowa']'">'; //....
  2.  
  3. // a w pliku, w którym odbierasz rządanie
  4. $value = explode('_', $_POST['usun']);
  5. var_dump($value);


lub bardziej poprawnie, użycie unikalnego identyfikatora z bazy danych smile.gif
faleth
Zrbiłem tak jak napisałeś i poszło. Dzieki wielkie smile.gif
Szymciosek
Cytat(CuteOne @ 26.05.2016, 09:59:23 ) *
json_encode(['id'=>10]); zwróci {"id"=>"10"}, innymi słowy option będzie wyglądał tak <option value="{"id":"10"}">, i dlatego nie zadziała.

Najprostszym rozwiązaniem jest dodanie _ (lub innego znaku) do stringa np
  1. echo '<option value="'. $opcje['data'] . '_' . $opcje['numer_pola'] . '_' . $opcje['roslina'] . '_' . $opcje['nazwa_handlowa']'">'; //....
  2.  
  3. // a w pliku, w którym odbierasz rządanie
  4. $value = explode('_', $_POST['usun']);
  5. var_dump($value);


lub bardziej poprawnie, użycie unikalnego identyfikatora z bazy danych smile.gif


albo skorzystanie z htmlspecialchars i wrzucenie do niego JSONa i sądzę że bardziej czytelne niż klejenie stringa. Do tego dodając jakiś "znak specjalny" do tekstu uniemożliwiamy sobie użycie takiego znaku w wartościach w bazie

  1. $arr = [
  2. 'test' => 12,
  3. 'plant' => 'some plant'
  4. ];
  5.  
  6. $json = htmlspecialchars(json_encode($arr));
  7.  
  8. echo "<option value='" . $json . "'>test</option>";
CuteOne
Cytat(Szymciosek @ 29.05.2016, 02:08:30 ) *
albo skorzystanie z htmlspecialchars i wrzucenie do niego JSONa i sądzę że bardziej czytelne niż klejenie stringa. Do tego dodając jakiś "znak specjalny" do tekstu uniemożliwiamy sobie użycie takiego znaku w wartościach w bazie

  1. $arr = [
  2. 'test' => 12,
  3. 'plant' => 'some plant'
  4. ];
  5.  
  6. $json = htmlspecialchars(json_encode($arr));
  7.  
  8. echo "<option value='" . $json . "'>test</option>";


No raczej nie smile.gif
  1. $arr = [
  2. 'test' => 12,
  3. 'plant' => 'some plant'
  4. ];
  5.  
  6. $json = htmlspecialchars(json_encode($arr));
  7. var_dump(json_decode($json)); //NULL


ps. napisałem, że bardziej odpowiednim sposobem powinno być przekazanie unikalnego id z bazy. Jeżeli martwi cię zablokowanie możliwości użycia znaku w bazie, to zawsze można użyć _#@_ zamiast _ aarambo.gif
Szymciosek
Owszem zwróci null, bo teraz $json jest różnymi znakami, więc ostatecznym rozwiązaniem z użyciem JSON jest wink.gif

  1. $arr = [
  2. 'test' => 12,
  3. 'plant' => 'some plant'
  4. ];
  5.  
  6. $json = htmlspecialchars(json_encode($arr));
  7. var_dump(json_decode(htmlspecialchars_decode($json))); // JSON
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.