Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Formularze $_POST
faleth
post 25.05.2016, 20:42:53
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 6.05.2016

Ostrzeżenie: (0%)
-----


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ć?

Ten post edytował faleth 25.05.2016, 20:44:52
Go to the top of the page
+Quote Post
Szymciosek
post 25.05.2016, 21:03:06
Post #2





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
faleth
post 25.05.2016, 21:05:35
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 6.05.2016

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Szymciosek
post 25.05.2016, 21:06:31
Post #4





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


No to powodzenia wink.gif
Go to the top of the page
+Quote Post
faleth
post 25.05.2016, 22:27:04
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 6.05.2016

Ostrzeżenie: (0%)
-----


jeszcze jeden problem. $_POST nic nie wysyła

Ten post edytował faleth 25.05.2016, 22:32:09
Go to the top of the page
+Quote Post
Szymciosek
post 25.05.2016, 22:38:57
Post #6





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


Pokaż kod.

W pierwszym poście pisałeś, że coś działa, a po zmianie na JSON juz nie?
Go to the top of the page
+Quote Post
faleth
post 25.05.2016, 22:43:12
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 6.05.2016

Ostrzeżenie: (0%)
-----


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>';


Ten post edytował faleth 25.05.2016, 22:44:57
Go to the top of the page
+Quote Post
Szymciosek
post 25.05.2016, 23:10:03
Post #8





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
faleth
post 25.05.2016, 23:14:32
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 6.05.2016

Ostrzeżenie: (0%)
-----


$_POST['usun'] generuje takie coś

  1. ["usun"]=> string(1) "{"
Go to the top of the page
+Quote Post
CuteOne
post 26.05.2016, 08:59:23
Post #10





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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

Ten post edytował CuteOne 26.05.2016, 09:01:21
Go to the top of the page
+Quote Post
faleth
post 26.05.2016, 16:09:56
Post #11





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 6.05.2016

Ostrzeżenie: (0%)
-----


Zrbiłem tak jak napisałeś i poszło. Dzieki wielkie smile.gif
Go to the top of the page
+Quote Post
Szymciosek
post 29.05.2016, 01:08:30
Post #12





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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>";


Ten post edytował Szymciosek 29.05.2016, 10:48:01
Go to the top of the page
+Quote Post
CuteOne
post 29.05.2016, 12:46:47
Post #13





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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

Ten post edytował CuteOne 29.05.2016, 12:50:05
Go to the top of the page
+Quote Post
Szymciosek
post 29.05.2016, 16:10:31
Post #14





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 01:23