Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [HTML][PHP]Sprawdzenie autora, formularz, zalogowany
Forti
post
Post #1





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Witam

Przyznam się, że nie wiem jak prawidłowo nazwać temat..

Mam formularz:

  1. <form method="post" action="">
  2. <input id="add_tytul" name="autor" size="40" maxlength="255">
  3. <br>
  4. <textarea id="add_tresc" name="tresc" rows="70" cols="100" value="Treść"></textarea>
  5. <br>
  6. <input type="submit" name="submit" value="Dodaj">
  7. </form>


I teraz próbuje napisać funkcje (staram się pisać w miare umiejętności jak najwięcej funkcji, by trzymać logike oddzielnie od htmla) która sprawdzi czy użytkownik jest zalogowany, jeżeli true to pole input autor powinno być nie aktywne a value jako login, natomiast jeżeli użytkownij jest nie zalogowany, to input aktywny, value puste i oczywiście warunek że pole musi zostać wypełnione.

Warunek na wypełnienie pola jest względnie prosty oczywiście

  1. if (!$_POST['autor']){
  2. echo 'Autor jest wymagany';
  3. exit();
  4. }


Funkcja jaką napisałem to:

  1. function autor($autor){
  2. if(user::isLogged()){
  3. $user = user::getData('', ''); // pobiera informacje o użytkowniku
  4. $autor = $user[login];
  5. }
  6. else {
  7. $autor = $_POST['autor']
  8. }


Czyli znowu bez fajerwerków, proste warunki. Jednak problem mam z wyłączeniem pola input 'autor'.

Staram się ominąć sytuacje:

  1. function autor($autor){
  2. if(user::isLogged()){
  3. $user = user::getData('', ''); // pobiera informacje o użytkowniku
  4. $autor = $user[login];
  5. <form method="post" action="">
  6. <input id="add_tytul" name="autor" size="40" maxlength="255" value="'.$autor.'" disabled>
  7. <br>
  8. <textarea id="add_tresc" name="tresc" rows="70" cols="100" value="Treść"></textarea>
  9. <br>
  10. <input type="submit" name="submit" value="Dodaj">
  11. </form>';
  12.  
  13. }
  14. else {
  15. $autor = $_POST['autor']
  16. <form method="post" action="">
  17. <input id="add_tytul" name="autor" size="40" maxlength="255" value="Twój nick">
  18. <br>
  19. <textarea id="add_tresc" name="tresc" rows="70" cols="100" value="Treść"></textarea>
  20. <br>
  21. <input type="submit" name="submit" value="Dodaj">
  22. </form>';
  23.  
  24. }


Przyznam się, że jestem samoukiem, uczę się głównie z manuala oraz analizuje skrypty pobierane z internetu, jednak nie spotkałem takiego problemu, który zapewne jest banalny.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Czemu IFem uzalezniasz generowanie calego FORMa? Przeciez interesuje cie TYLKO jedno pole, wiec IFem uzalezniaj generowanie tylko tego jednego pola a nie calego forma...
Go to the top of the page
+Quote Post
Forti
post
Post #3





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Mówimy o czymś takim?

  1. function autor($autor){
  2. if(user::isLogged()){
  3. $user = user::getData('', ''); // pobiera informacje o użytkowniku
  4. $autor = $user[login];
  5. <input id="add_tytul" name="autor" size="40" maxlength="255" value="'.$autor.'" disabled>
  6. ';
  7.  
  8. }
  9. else {
  10. $autor = $_POST['autor']
  11. <input id="add_tytul" name="autor" size="40" maxlength="255" value="Twój nick">
  12. ';
  13. }



Wlaśnie na trafiłem w internecie na pewne rozwiązanie i stworzyłem coś takiego:

  1. function author(){
  2. if(user::isLogged()){
  3. $user = user::getData('', '');
  4. $autor = $user[login];
  5. document.comment.autor.disabled=true;
  6. document.comment.autor.value="$user[login]";
  7. }
  8. else {
  9. $autor = $_POST['autor']
  10. document.comment.autor.disabled=false;
  11. document.comment.autor.value="Wpisz nick";
  12. }


Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pierwszy kod: tak, wlasnie o czyms takim mowimy
Drugi kod: chyba coś ci sie pomylilo z js

ps: poza tym nie ma sensu robic pola input disabled... poprostu wywal inputa a w to miejsce wyswietlaj poprostu login i juz
Go to the top of the page
+Quote Post
Forti
post
Post #5





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Generalnie działa, jednak gdy pole input jest disabled to nie wysyła jego wartości do POST = nie dodaje rekordu do bazy. Mogę to inaczej obejść?

Wywalić input ok, tlyko problem taki potem mam, pokaże kod:

  1. if(isset($_POST['submit']))
  2. {
  3.  
  4.  
  5.  
  6.  
  7. $stmt = $baza -> prepare('INSERT INTO `comments` (`autor`, `data`, `tresc`, `art_id`) VALUES (
  8. :autor,
  9. :dtime,
  10. :tresc,
  11. :newsid)');
  12.  
  13. $stmt -> bindValue(':autor', $_POST['autor'], PDO::PARAM_STR);
  14. $stmt -> bindValue(':dtime', date('Y-m-d H:i:s'), PDO::PARAM_INT);
  15. $stmt -> bindValue(':tresc', $_POST['tresc'], PDO::PARAM_STR);
  16. $stmt -> bindValue(':newsid', $newsid, PDO::PARAM_STR);
  17.  
  18.  
  19. $ilosc = $stmt -> execute();
  20. if($ilosc > 0)
  21. {
  22. echo 'Dodano: '.$ilosc.' rekordow';
  23. echo "<b>Dzięki, news został dodany! Zostaniesz przekierowany za dwie sekundy";
  24. echo "<meta http-equiv=Refresh content=2;url=java script:self.history.back();\>";
  25. }
  26. else
  27. {
  28. echo 'Wystapil blad podczas dodawania rekordow!';
  29. }
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41. }
  42. else
  43. {
  44. echo'<br>
  45.  
  46. <h4>Dodaj komentarz</h4>
  47.  
  48.  
  49.  
  50. <form method="post" action="">';
  51. autor();
  52. <br>
  53. <textarea id="add_tresc" name="tresc" rows="70" cols="100" value="Treść"></textarea>
  54. <br>
  55. <input type="submit" name="submit" value="Dodaj">
  56. </form>';
  57.  
  58. }



Jak wysłać autora, jeżeli nie input. Mogę wstawić zmienna, zależną od tej funkcji, tylko nie mam pomysłu i tak jak to rozwiązać.

Ten post edytował Forti 13.06.2014, 08:41:39
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No i prawidlowo, ze nie wysyla.

W pierwszym kodzie dane z posta odbierales tak:
if(user::isLogged()){
$user = user::getData('', ''); // pobiera informacje o użytkowniku
$autor = $user[login];
}
else {
$autor = $_POST['autor']
}

I tej wersji masz sie trzymac.
Go to the top of the page
+Quote Post
Forti
post
Post #7





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


No ok, tylko zależy mi na tym, że jak nie zalogowany to musi (ma możliwość) wpisać nick, jak zalogowany to wysyła login. Chce to zrobić najprostszą możliwą drogą, bez 10 warunków itp.

kod funkcji wygląda tak:

  1. function autor(){
  2. if(user::isLogged()){
  3. $user = user::getData('', '');
  4. $autor = $user[login];
  5. <input id="add_tytul" name="autor" size="40" maxlength="255" value="'.$autor.'" disabled>
  6. ';
  7.  
  8. }
  9. else {
  10. $autor = $_POST['autor'];
  11. <input id="add_tytul" name="autor" size="40" maxlength="255" value="Twój nick">
  12. ';
  13. }}



To:

  1. $stmt -> bindValue(':autor', $_POST['autor'], PDO::PARAM_STR);


zamieniłem na:

  1. $stmt -> bindValue(':autor', $autor, PDO::PARAM_STR);


Jednak nadal coś nie do końca działa. Spróbuje ustawić może global $autor? chociaż nie wydaje mi się.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie mozesz wierzyc danym, ktore wysyla uzytkownik... nawet jesli ustawissz pole na disabled czy hidden czy cokolwiek, to user moze je bez problemu spreparowac i ustawic wlasne dane. Dlatego tez, jak user jest zalogowany, to masz jego login brac z php, a nie z tego co wysle ci user w przegladarce.

Zas to ze nie dodaje ci sie teraz do bazy, to pewnie gdzies tracisz te zmienną $autor. Nie wiem gdzie, bo pokazujesz urywki kodu w zaden sposob ze sobą nie powiązane.

Jesli
$autor = $user[login];
i
$autor = $_POST['autor'];
generujesz w funkcji autor() to logiczne ze poza tą funkcją zmienna ta nie bedzie widoczna - to są podstawy zasięgu zmiennych w php
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
Forti
post
Post #9





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


  1. function autor(){
  2. global $autor;
  3. if(user::isLogged()){
  4. $user = user::getData('', '');
  5. $autor = $user[login];
  6. <input id="add_tytul" name="autor" size="40" maxlength="255" value="'.$autor.'" disabled>
  7. ';
  8.  
  9. }
  10. else {
  11. $autor = $_POST['autor'];
  12. <input id="add_tytul" name="autor" size="40" maxlength="255" value="Twój nick">
  13. ';
  14. }}


Echo input gdy zalogowany wyświetlam tylko dla informacji użytkownika, że faktycznie jest on zalogowany i jaki będzie podpis.

Kod na stronie:

  1. if(isset($_POST['submit']))
  2. {
  3.  
  4.  
  5.  
  6.  
  7. $stmt = $baza -> prepare('INSERT INTO `comments` (`autor`, `data`, `tresc`, `art_id`) VALUES (
  8. :autor,
  9. :dtime,
  10. :tresc,
  11. :newsid)');
  12.  
  13. $stmt -> bindValue(':autor', $autor, PDO::PARAM_STR);
  14. $stmt -> bindValue(':dtime', date('Y-m-d H:i:s'), PDO::PARAM_INT);
  15. $stmt -> bindValue(':tresc', $_POST['tresc'], PDO::PARAM_STR);
  16. $stmt -> bindValue(':newsid', $newsid, PDO::PARAM_STR); // to jest zmienna ustalona szybciej, pobrana jako id wiadomości (obecny kod dodaje komentarz do ów wiadomości)
  17.  
  18.  
  19. $ilosc = $stmt -> execute();
  20. if($ilosc > 0)
  21. {
  22. echo 'Dodano: '.$ilosc.' rekordow';
  23. echo "<b>Dzięki, news został dodany! Zostaniesz przekierowany za dwie sekundy";
  24. echo "<meta http-equiv=Refresh content=2;url=java script:self.history.back();\>";
  25. }
  26. else
  27. {
  28. echo 'Wystapil blad podczas dodawania rekordow!';
  29. }
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41. }
  42. else
  43. {
  44. echo'<br>
  45.  
  46. <h4>Dodaj komentarz</h4>
  47.  
  48.  
  49.  
  50. <form method="post" action="">';
  51. autor();
  52. <br>
  53. <textarea id="add_tresc" name="tresc" rows="70" cols="100" value="Treść"></textarea>
  54. <br>
  55. <input type="submit" name="submit" value="Dodaj">
  56. </form>';
  57.  
  58. }



Jak inaczej przekazać tą zmienną, czy na prawdę jedynym rozwiązaniem jest wstawianie 'if' z tej funkcji w dokumencie? wówczas działa prawidłowo.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Jak inaczej przekazać tą zmienną, czy na prawdę jedynym rozwiązaniem jest wstawianie 'if' z tej funkcji w dokumencie? wówczas działa prawidłowo.
A co w tym zlego, ze uzyjesz jeszcze raz Ifa?
Od biedy pozostaje ci global
Od innej biedy funkcja autor() moze zwracac zmienna $autor przez return a potem ty ją bedziesz odbierał
Go to the top of the page
+Quote Post
Forti
post
Post #11





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Teoretycznie nic złego. Praktycznie, to zaraz będę przerabiać swój strukturalny kod, gdyż zaczyna mi się rozrastać, na trochę obiektowy, na tyle na ile potrafię. To z czym mam problem teraz próbuje rozwiązać w celu edukacyjnym, ten przykład będzie wykorzystany może ze 2-3 razy na całej stronie, forum itp., ale np. zaraz będe chciał zrobić wyświetlenie krótkich informacji różnych rzeczach i zacznie mi się robić problem pewnie.

Coś takiego, ale nie działa, wyskakuje błąd, że nie dodało rekordu - nadal nie pobiera $autor.
Próbuje z global i return na różne spoboy i nie działa po prostu (IMG:style_emoticons/default/smile.gif)

  1. function autor(){
  2.  
  3.  
  4. if(user::isLogged()){
  5. $user = user::getData('', '');
  6. $autor = $user[login];
  7. <input id="add_tytul" name="autor" size="40" maxlength="255" value="'.$autor.'" disabled>
  8. ';
  9.  
  10.  
  11. }
  12. else {
  13. $autor = $_POST['autor'];
  14. <input id="add_tytul" name="autor" size="40" maxlength="255" value="Twój nick">
  15. ';
  16. }
  17. return $autor;
  18. }


Ten post edytował Forti 13.06.2014, 09:13:07
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No juz pisalem, ze jesli funkcja bedzie zwracac $autor, to musisz wynik tej funkcji odebrac... Odbierasz? Jak nie, to zapraszam do manuala do dzialu funkcje.

edit: z innego kodu widze, ze funkcje autor() wywolujesz na zupelnie innym poziomie niz zapis do bazy, wiec to tak czy siak ci sie nie uda.... Musisz zrobic dodatkowego Ifa przed zapisem i juz.
Go to the top of the page
+Quote Post
Forti
post
Post #13





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Już widzę w czym jest problem. Musiałbym przerobić całą strukturę aby to działało tak jak chce. Wyciągnąłem troche nauki z tej lekcji, na przyszłość będę wiedział w czym problem. Zastosuje po prostu if bez zbędnych ceregieli. Dziękuje za pomoc.
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




$stmt -> bindValue(':dtime', date('Y-m-d H:i:s'), PDO::PARAM_INT);
A data to ci sie poprawnie dodaje? Przeciez wynikiem date() jest tekst a nie liczba (IMG:style_emoticons/default/smile.gif)

$stmt -> bindValue(':newsid', $newsid, PDO::PARAM_STR)
zas newsid to raczej jest liczba nie tekst (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Forti
post
Post #15





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Z tego co pamiętam to tak, ale zmieniłem już w razie co, podziękował. Przy okazji, z tego co pamiętam to funkcja NOW() nie chciała mi działać.. nie pamiętam czemu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Przy okazji, z tego co pamiętam to funkcja NOW() nie chciała mi działać.. nie pamiętam czemu
Bo pewnie źle jej uzyles (IMG:style_emoticons/default/smile.gif) Pokaz jak robiles, to ci powiemy czemu nie dzialala
Go to the top of the page
+Quote Post
Forti
post
Post #17





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Miałem: $stmt -> bindValue(':dtime', NOW(), PDO::PARAM_INT);

a pewnie powinienem mieć:

$data = NOW();
$stmt -> bindValue(':dtime', $data, PDO::PARAM_INT);

Chociaż to także chyba nie działało.. już nie pamiętam.


Jeszcze pytanie, jak stosować mysql_real_escape_string w PDO,


$stmt -> bindValue(':tresc', mysql_real_escape_string($_POST['tresc']), PDO::PARAM_STR);

To ma prawo działać?

Ten post edytował Forti 13.06.2014, 09:49:49
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




NOW() to jest funkcja mysql i ma byc ona wywolywana w zapytaniu mysql a nie bindowana w php....
Go to the top of the page
+Quote Post
Turson
post
Post #19





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Cytat(Forti @ 13.06.2014, 10:47:19 ) *
Jeszcze pytanie, jak stosować mysql_real_escape_string w PDO,


$stmt -> bindValue(':tresc', mysql_real_escape_string($_POST['tresc']), PDO::PARAM_STR);

To ma prawo działać?

Pytanie, po co mysql_real_escape_string w PDO?
Go to the top of the page
+Quote Post
Forti
post
Post #20





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Gdzieś kiedyś znalazłem przykładowo skrypt (nie pamiętam składni), który robił prostą rzecz - za każdym razem wyświetlał okno którego nie można było zamknąć.
Wystarczyło wpisać go gdzieś w pole input, np. nazwa użytkownika przy rejestracji, i jak kod nie sprawdzał kodu pod tym względem to po prostu strona się sypała..

Albo wstawi mi ktoś div o szerokości 1000px w i zostanie to wyświetlone gdzieś gdzie akurat nie mam stałem szerokości ustalonej - zacznie się sypać.

Czy źle kombinuje?


Chociaż w sumie klasa bbcode fajnie rozwiązuje problem z html.. a co z javascript?

Ten post edytował Forti 13.06.2014, 10:02:43
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 16:15