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

Pobieranie wartości z textarea do zmiennej w PHP

Object Storage Arubacloud
0 głosów
642 wizyt
pytanie zadane 14 kwietnia 2020 w PHP przez jupikajej Początkujący (440 p.)
<form method="post" class="todo-form" id="todoForm">
	<div class="todo-form-row">
		<label class="todo-form-label" for="todoMessage">Podaj treść zadania</label>
		<textarea form="todoForm" class="todo-form-message" name="todoMessage" id="todoMessage"></textarea>
	</div>

	<div class="todo-form-row">
		<input type="submit" class="button todo-form-button" value="Dodaj" />
	</div>
</form>
<?php
	$db = new Mysqli ('localhost', 'root', '', 'baza');
	
	$notatka = $_POST['todoMessage'];
	$user_id = $_SESSION['id'];
	
	$sql = "INSERT INTO notatki (id, user_id, notes) VALUES (NULL, '$user_id', '$notatka')";
	
	$wynik = $db -> query($sql);
?>

Próbując dodać do bazy treść wpisaną w textarea dostaje taki błąd.

Notice: Undefined index: todoMessage in D:\xampp\htdocs\projekty\projekt\notatnik.php on line 45

Ktoś ma jakiś pomysł? 

2 odpowiedzi

+1 głos
odpowiedź 14 kwietnia 2020 przez HaKIM Szeryf (87,590 p.)

Umieść kod PHP w kondycji, która sprawdza czy formularz został wysłany. W poniższym przykładzie sprawdzamy czy komunikacja odbywa się POSTem, ale w Twoim wypadku powinno na tę chwilę wystarczyć. :)

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $db = new Mysqli ('localhost', 'root', '', 'baza');
     
    $notatka = $_POST['todoMessage'];
    $user_id = $_SESSION['id'];
     
    $sql = "INSERT INTO notatki (id, user_id, notes) VALUES (NULL, '$user_id', '$notatka')";
     
    $wynik = $db -> query($sql);
}

Po co ta kondycja? Nie wysłałeś jeszcze formularza z danymi, a próbujesz odnieść się do właśnie tych danych... trochę nielogiczne musisz przyznać.

komentarz 14 kwietnia 2020 przez jupikajej Początkujący (440 p.)

Przed dodaniem tego if'a gdy w $notatka sam przysypiałem jakąś wartość np.

$notatka = "testowa notatka";

to dodawało mi to do bazy.

Teraz co prawda zniknął błąd o którym pisałem w poprzednim poście ale nie działa ten if - tak jakby za każdym razem wynikiem tego if'a był false.

komentarz 15 kwietnia 2020 przez HaKIM Szeryf (87,590 p.)

Oczywiście, że powyższy kod z danymi "testowa notatka" dodawało Ci do bazy, gdyż nie odnosiłeś się do danych z formularza, nim te mogły zaistnieć.

Spróbuj w takim wypadku czegoś mniej eleganckiego:

if ($_POST['todoMessage']) {

}

Zamiast ifa z POSTem i daj znać jaki rezultat.

komentarz 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)
if(!empty($_POST['todoMessage']))

dopiero to zadziałało

0 głosów
odpowiedź 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)

Mam jeszcze pytanie jak usunąć zawartość ze zmiennej notatka:

$notatka = $_POST['todoMessage'];

próbowałem unset ale nie działa - po odświeżeniu strony zapisuje do bazy drugi raz tą samą wartość

komentarz 15 kwietnia 2020 przez HaKIM Szeryf (87,590 p.)
Jeśli to windows/linux z chrome:

ctrl + f5 / Otworzyć nowego taba.

To normalne zachowanie przeglądarki co opisujesz.
komentarz 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)
Korzystam z opery ale z tego co pamiętam to na chrome również skrót ctrl + f5 to odświeżenie strony a nie otworzenie nowej karty.

Wracają do problemu można jakoś usunąć ten problem, wyczyścić zmienną?
komentarz 15 kwietnia 2020 przez HaKIM Szeryf (87,590 p.)
ctrl + f5 to refresh + czyszczenie ciasteczek, które o ile dobrze pamiętam pomagało mi aby pozbyć się przedawnionego posta.

Najprościej to by było rozdzielić front od backendu fizycznie t.j. plikami, przez co uniknąłbyś trzymaniem tego samego zapytania w przeglądarce dla strony X.
komentarz 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)

Jestem początkujący :) więc wiesz... nie umiem takich rzeczy.

Mógłbyś wytłumaczyć dlaczego nie działa mi unset

komentarz 15 kwietnia 2020 przez tangarr Mędrzec (154,860 p.)
Może podczas odświeżania strony znowu jest wysyłany ten sam formularz (wykonywana jest metoda POST).

Jeżeli tak to po dodaniu wpisu do bazy zrób przekierowanie na GET.
komentarz 15 kwietnia 2020 przez HaKIM Szeryf (87,590 p.)

Sugeruję zobaczyć jak przeglądarka (tutaj opera) przetrzymuje dane z posta. Gdybym już to zrozumiał, zastosowałbym odpowiednie rozwiązanie.

 

Jestem początkujący :) więc wiesz... nie umiem takich rzeczy.

Tworzysz x1 plik:

form.php

oraz x2:

handle-form.php

W 1 pakujesz kod html a w 2 wszystko pomiedzy <?php ?> i dodajesz do formluarza:

action="/handle-form.php" aby ten przekierował ruch na ten drugi plik.

komentarz 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)
Mógłbyś wytłumaczyć jak zrobić to przekierowanie??
1
komentarz 15 kwietnia 2020 przez tangarr Mędrzec (154,860 p.)

Podejrzewam, że wystarczy dodać header w obsłudze posta

<?php
header("Location: moj_plik.php");
exit;
?>

 

komentarz 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)
Chyba działa. Dziękuję bardzo <3

Podobne pytania

–1 głos
1 odpowiedź 386 wizyt
pytanie zadane 24 stycznia 2017 w PHP przez Zychu Użytkownik (710 p.)
+1 głos
1 odpowiedź 177 wizyt
pytanie zadane 27 marca 2022 w PHP przez jamie80 Początkujący (320 p.)
–1 głos
2 odpowiedzi 418 wizyt
pytanie zadane 8 maja 2016 w PHP przez niezalogowany

92,568 zapytań

141,420 odpowiedzi

319,624 komentarzy

61,956 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...