• 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

0 głosów
1,540 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 (155,120 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 (155,120 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ź 817 wizyt
pytanie zadane 24 stycznia 2017 w PHP przez Zychu Użytkownik (710 p.)
+1 głos
1 odpowiedź 350 wizyt
pytanie zadane 27 marca 2022 w PHP przez jamie80 Początkujący (320 p.)
–1 głos
2 odpowiedzi 616 wizyt
pytanie zadane 8 maja 2016 w PHP przez niezalogowany

93,788 zapytań

142,753 odpowiedzi

323,429 komentarzy

63,393 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...