Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dodawanie rekordów za pomocą formularza
Forum PHP.pl > Forum > Przedszkole
Croos22
Dobry wieczór!

Napisałem sobie takie kodzik który ma za zadanie dodać wpisane dane w formularzu do bazy tylko, że jeśli chodzi o zabezpieczenie przed wysłaniem pustych danych jest ok ale po pierwsze nie chce mi tego dodać a po drugie zawsze wyświetla komunikat o poprawnym dodaniu rekordu. Oto kod:


  1. <?php
  2. include ('includes/config_includes.php');
  3. ?>
  4.  
  5. <form action="index2.php" method="post">
  6. <input type="text" name="imie" value="" /> <br />
  7. <input type="text" name="tresc" value="" /> <br />
  8. <input type="submit" name="submit" value="Dodaj" />
  9. </form>
  10.  
  11. <?php
  12. $data = date(Y:M:D);
  13. if(isset($_POST['submit'])) {
  14. if(empty($_POST['imie'])) {
  15. echo "Wpisz nazwe";
  16. }
  17. if(empty($_POST['tresc'])) {
  18. echo "Wpisz tresc";
  19. }
  20. $zapytanie = ("INSERT INTO `komentarze` (`nr`, `imie`, `tresc`, `data`) VALUES ('', '$imie', '$tresc', '$data') or die('Blad');
  21. if ($zapytanie) echo "Komentarz dodany poprawnie ";
  22. else echo "Komentarz nie zostal dodany ";
  23. }
  24. ?>


Taka amatorszczyzna, dopiero się uczę...
modern-web
  1. <?php
  2. $data = date(Y:M:D);
  3. $imie = mysql_real_escape_string(htmlspecialchars($_POST['imie']));
  4. $tresc = mysql_real_escape_string(htmlspecialchars($_POST['tresc']));
  5.  
  6. if(isset($_POST['submit']))
  7. {
  8. if(empty($imie OR $tresc))
  9. {
  10. echo "Nazwa lub treść są puste";
  11. }else{
  12. $zapytanie = mysql_query("INSERT INTO `komentarze` (`nr`, `imie`, `tresc`, `data`) VALUES ('', '$imie', '$tresc', '$data')");
  13. }
  14.  
  15. if($zapytanie)
  16. {
  17. echo "Komentarz dodany poprawnie ";
  18. }else{
  19. echo "Komentarz nie zostal dodany ";
  20. }
  21. }
  22. ?>
  23.  
  24. <?php
  25. include ('includes/config_includes.php');
  26. ?>
  27.  
  28. <form action="" method="post">
  29. <input type="text" name="imie" value="" /> <br />
  30. <input type="text" name="tresc" value="" /> <br />
  31. <input type="submit" name="submit" value="Dodaj" />
  32. </form>


Takie trudne ;0?
ADeM
  1. $zapytanie = mysql_query("INSERT INTO `komentarze` (`nr`, `imie`, `tresc`, `data`) VALUES ('', '$imie', '$tresc', '$data')");

A przed tym filtrowanie otrzymanych danych.
Croos22
Coś mi się nie zgadza w trzeciej linii:
Parse error: syntax error, unexpected T_LOGICAL_OR, expecting ')' in xx on line 3
ADeM
Pokaż obecny kod. Jeśli użyłeś tego od ~modern-web, to zamień:
  1. if(empty($imie OR $tresc))

na:
  1. if( empty( $imie ) || empty( $tresc ) )


W dodatku zanim użyjesz zmiennych z POST, to musisz sprawdzić czy istnieją.
markonix
Brakuje
Cytat
)

przecież Ci to ten błąd mówi.
Zresztą skoro coś pozmieniałeś w kodzie to wklej nową wersje.
modern-web
O filtrowanie nie pytał. Niech poczyta.

Taka mała wskazówka:
Jeśli chcesz dodawać cokolwiek do bazy danych musisz sprawdzać otrzymane od użytkownika dane (nie można mu ufać bo nigdy nie wiesz, czy przypadkiem nie jest dzieckiem, które koniecznie chce `h4knąłć` Twoją stronę - popisując się tym samym przed równie inteligentnymi kolegami...).
np.
1. filtrowanie sprawdzające, czy wprowadzone dane nie zawierają fragmentu zapytania SQL (do tego przydaje się mysql_real_escape_string ale pamiętaj, że to nie wystarczy!)
2. zawierają odpowiednie znaki (reguły możesz ustalić samodzielnie)

Jeśli chodzi o bezpieczeństwo, poczytaj o:
- SQL Injection
- XSS Attack (na przyszłość)
Croos22
Pomału nie od razu Kraków zbudowano a ja nadal borykam się z tym samym problemem :<

Po wejściu na stronę wyrzuca mi że "Komentarz nie zostal dodany "
markonix
Czyli już mysql_query zwraca false.
ADeM
Dodaj "or die( mysql_error() )" do wykonania zapytania i powiedz co Ci wyświetla.
Croos22
No dobra mój błąd przekręciłem nazwę tabeli ale problemu to nie rozwiązało ponieważ po wejściu na stronę dodaje puste rekordy a po wpisaniu nie.
markonix
Po wejściu na stronę nie powinno Ci wysyłać samoczynnie formularza (dodawać do bazy).
ADeM
Fajnie. A pokażesz kod czy cały czas myślisz, że wywróżymy z kuli co tam masz u siebie?
Croos22
O przepraszam myślałem, że mówiłem.

  1. <?php
  2. include ('includes/config_includes.php');
  3. ?>
  4.  
  5. <?php
  6. if(isset($_POST['submit'])){
  7. if( empty( $nick ) || empty( $tresc ) )
  8. echo "Nazwa lub treść są puste";
  9. }else{
  10. $zapytanie = mysql_query("INSERT INTO `komentarze` (`nr`, `nick`, `tresc`) VALUES ('', '$nick', '$tresc')") or die( mysql_error() ) ;
  11. }
  12.  
  13. if($zapytanie){
  14. echo "Komentarz dodany poprawnie ";
  15. }else{
  16. echo "Komentarz nie zostal dodany ";
  17. }
  18.  
  19. ?>
  20.  
  21. <form action="" method="post">
  22. <input type="text" name="nick" value="" /> <br />
  23. <input type="text" name="tresc" value="" /> <br />
  24. <input type="submit" name="submit" value="Dodaj" />
  25. </form>
  26.  
  27.  
markonix
Z jakiego edytora korzystasz?

Teraz masz coś po polskiemu - jeśli wysłano formularz to sprawdzaj czy dane są, albo jeśli nie wysłano to wykonaj zapytanie.
ADeM
  1. <?php
  2. include ('includes/config_includes.php');
  3.  
  4. if( isset( $_POST[ 'submit' ] ) ) {
  5. if( empty( $nick ) || empty( $tresc ) ) {
  6. echo "Nazwa lub treść są puste";
  7. }
  8. else{
  9. $zapytanie = mysql_query("INSERT INTO `komentarze` (`nr`, `nick`, `tresc`) VALUES ('', '$nick', '$tresc')") or die( mysql_error() ) ;
  10.  
  11. if( $zapytanie ) {
  12. echo "Komentarz dodany poprawnie ";
  13. }
  14. else{
  15. echo "Komentarz nie zostal dodany ";
  16. }
  17. }
  18. }
  19. ?>
  20.  
  21. <form action="" method="post">
  22. <input type="text" name="nick" value="" /> <br />
  23. <input type="text" name="tresc" value="" /> <br />
  24. <input type="submit" name="submit" value="Dodaj" />
  25. </form>
  26.  


Poza tym, to filtruj dane.
Croos22
Notepad++

Korzystając z tego co podał ADeM nie dodaje po wejściu na stronę tylko że nie pozwala na wpisanie czegokolwiek tzn. co bym nie wpisał to i tak to nie jest tekst "Nazwa lub treść są puste".
nospor
1) podano ci przeciez taki kod:
  1. $imie = mysql_real_escape_string(htmlspecialchars($_POST['imie']));
  2. $tresc = mysql_real_escape_string(htmlspecialchars($_POST['tresc']));

ktorego ty nigdzie nie masz! ten kod sluzy do pobrania danych z forma

2) zanim zadasz kolejnego posta, zastosuj sie do podanych tu porad
Temat: Jak poprawnie zada pytanie

edit down: tongue.gif
modern-web
@nospor - bbcode się kłania winksmiley.gif
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.