Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Formularz
Forum PHP.pl > Forum > Przedszkole
kemes123
Witam
Walcze z tym cały dzień i nie wiem jak to zrobić mianowicie:

Metodą prób i błędów napisałem walidację formularza :
  1.  
  2. function walidacja_id($ID_klienta){
  3. if (isset ($_POST['ID_klienta'])) {
  4. if(strlen($ID_klienta)!= 8)
  5. {
  6. echo 'id jest do dupy' ;
  7. } else echo 'ID jest malina';
  8. }
  9. $ID_klienta= $_POST['ID_klienta'];
  10. }
  11.  
  12. function walidacja_date1($date1){
  13. if (isset ($_POST['date1']))
  14. if(preg_match('/^[0-9]{4}[\-]{1}[0-9]{2}[\-]{1}[0-9]{2}\s{1}[0-9]{2}[\:]{1}[0-9]{2}[\:]{1}[0-9]{2}$/D', trim($_POST['date1'])))
  15. {
  16. echo 'Data jest gitara' ;
  17. }
  18. else echo 'Zly format. Musi byc zachowany foramt YYYY-MM-DD HH:MI:SS !!!!';
  19. }
  20. $date1= $_POST['date1'];
  21.  
  22.  
  23. echo <<<lll
  24. <form name="formularz" action="data.php" method="post">
  25. <input type"text" name="login_1" value="$login_1" />login<br>
  26. <input type"text" name="ID_klienta" value="$ID_klienta" />id<br>
  27.   <input type"text" name="date1" value="$date1" />data<br>
  28.  <input type="submit" value="Wyślij" /><br><br></form>
  29. lll;
  30.  
  31.  
  32. if ($date1) walidacja_date1($date1);
  33. echo '<br>';
  34. if ($ID_klienta) walidacja_ID($ID_klienta);
  35. echo '<br>';
  36.  
  37.  
  38. ?>
  39.  

Jak wymusić dodanie rekordu do bazy?
Zmieniając method na GET i podając stronę wstaw.php gdzie napisany jest insert do bazy walidacja nie działa rekord trafia ale walidacja nie jest brana pod uwagę.
Próbując na głównej stronie zostawić sam formularz a walidację umieszczając w pliku wstaw.php jest tak samo

W pliku wstaw.php jak usunąłem
function walidacja_date1($date1){
to pojawia się informacja o błędnym wpisaniu daty czy loginu ale rekord i tak się dodaje
  1. plik wstaw.php
  2.  
  3. if (isset ($_GET['ID_klienta'])) {
  4. if(strlen($ID_klienta)!= 8)
  5. {
  6. echo 'id jest do dupy' ;
  7. } else echo 'ID jest malina';
  8. }
  9. $ID_klienta= $_GET['ID_klienta'];
  10.  
  11.  
  12. function walidacja_date1($date1){
  13. if (isset ($_GET['date1']))
  14. if(preg_match('/^[0-9]{4}[\-]{1}[0-9]{2}[\-]{1}[0-9]{2}\s{1}[0-9]{2}[\:]{1}[0-9]{2}[\:]{1}[0-9]{2}$/D', trim($_GET['date1'])))
  15. {
  16. echo 'Data jest gitara' ;
  17. }
  18. else echo 'Zly format. Musi byc zachowany foramt YYYY-MM-DD HH:MI:SS !!!!';
  19. }
  20. $date1= $_GET['date1'];
  21.  
  22.  
  23.  
  24. $login_1 = addslashes($login_1);
  25. $ID_klienta = addslashes($ID_klienta);
  26. $date1 = addslashes($date1);
  27.  
  28.  
  29.  
  30. @ $db = mysql_pconnect($dbhost, $dbuname, $dbpass);
  31.  
  32. if (!$db)
  33. {
  34. echo 'Błąd: : Połączenie z serwerem bazy danych nie powiodło się. Proszę spróbować później.';
  35. }
  36.  
  37. mysql_select_db ("$dbname") or
  38. die ("Nie można połączyć się z bazą danych. Proszę spróbować później");
  39.  
  40.  
  41. $zapytanie = "INSERT INTO skrzynka (ID, login_1, ID_klienta, date1) VALUES ('', '$login_1', '$ID_klienta', '$date1');";
  42. $wynik = mysql_query ($zapytanie);
CuteOne
  1.  
  2. function walidacja($var) {
  3. if(empty($var['klient'])) {
  4.  
  5. return false;
  6. }
  7. if(stlen($var['klient']) > 8) {
  8.  
  9. return false;
  10. }
  11.  
  12. return true;
  13. }
  14.  
  15. if(walidacja($jakas_tablica_z_danymi)) {
  16. //insert do bazy
  17. }
  18. else {
  19. echo 'dane są nie prawidłowe';
  20. }

Powinieneś załapać o co chodzi..
kemes123
Udało mi się zrobić coś takiego
  1. function walidacja_id($ID_klienta){
  2.  
  3. if (empty($ID_klienta['ID_klineta'])){
  4. echo 'dane puste';
  5. }
  6. if(strlen($ID_klienta)!= 8){
  7. echo 'zla ilosc znakow';
  8.  
  9. }
  10. else {
  11. $zapytanie = "INSERT INTO skrzynka (ID, login_1, ID_klienta, problem, date1, date2, segment, skrzynka_1, telefon, przekierowanie, notatka, form_k) VALUES ('', '$login_1', '$ID_klienta', '$problem', '$date1', '$date2', '$segment', '$skrzynka_1', '$telefon', '$przekierowanie', '$notatka', '$form_k' );";
  12. $wynik = mysql_query ($zapytanie);
  13. }
  14. if ($wynik){
  15. echo 'rekord dodany';
  16. }
  17. else{ echo 'nie doany';}
  18. }
  19. $ID_klineta = $_POST ["ID_klienta"];
  20.  
  21. echo <<<lll
  22. <form name="formularz" action="data.php" method="post">
  23. <input type"text" name="login_1" value="$login_1" />login<br>
  24. <input type"text" name="ID_klienta" value="$ID_klienta" />id<br>
  25.   <input type"text" name="date1" value="$date1" />data<br>
  26.  <input type="submit" value="Wyślij" /><br><br></form>
  27. lll;
  28. if($ID_klineta) walidacja_id($ID_klienta);


walidacja ładnie działa ale jeszcze jedno jak zrobić aby po dodaniu rekordu (obecnie potwierdzenie bez przeładowania) czyścił się formularz?
CuteOne
nie można używać funkcji w funkcji [linia 11] poza tym funkcja walidacja() służy tylko WALIDACJI nie dodawaniu rekordów więc staraj się trzymać szablonu, który podałem a nie będziesz miał problemów z ewentualnymi błędami ;]

edit: widzę, że sobie poradziłeś. W każdym polu input ustaw value="" [tylko submit ma mieć "Wyślij" smile.gif]
kemes123
Próbowałem dodać kolejny warunek walidacji a następnie dodanie do bazy no i coś robie nie tak
  1. function walidacja_id($ID_klienta){
  2.  
  3. if (empty($ID_klienta['ID_klineta'])){
  4. echo 'dane puste ';
  5. }
  6. if(strlen($ID_klienta)!= 8){
  7. echo 'zla ilosc znakow ';
  8. }
  9. }
  10. $ID_klineta = $_POST ["ID_klienta"];
  11.  
  12. function walidacja_date1($date1){
  13.  
  14. if(empty($date1['date1'])){
  15.  
  16. echo 'pusta godzina ';
  17. }
  18.  
  19. if (isset ($_POST['date1']))
  20. if(preg_match('/^[0-9]{4}[\-]{1}[0-9]{2}[\-]{1}[0-9]{2}\s{1}[0-9]{2}[\:]{1}[0-9]{2}[\:]{1}[0-9]{2}$/D', trim($_POST['date1'])))
  21. {
  22. echo 'Data jest gitara ' ;
  23. }
  24. else echo 'Zly format. Musi byc zachowany foramt YYYY-MM-DD HH:MI:SS !!!!';
  25. }
  26. $date1= $_POST['date1'];
  27.  
  28. if ((walidacja_id($ID_klienta)) && (walidacja_date1($date1))){
  29. $zapytanie = "INSERT INTO skrzynka (ID, login_1, ID_klienta, problem, date1, date2, segment, skrzynka_1, telefon, przekierowanie, notatka, form_k) VALUES ('', '$login_1', '$ID_klienta', '$problem', '$date1', '$date2', '$segment', '$skrzynka_1', '$telefon', '$przekierowanie', '$notatka', '$form_k' );";
  30. $wynik = mysql_query ($zapytanie);
  31. }
  32. if ($wynik){
  33. echo 'rekord dodany';
  34. }
  35. else{ echo 'rekord nie doany';}

Po odpaleniu strony pojawiają się komunikaty
dane puste
zla ilosc znakow
rekord nie doany
więc omijane jest już puste pole daty
a jednocześnie przestało działać
if($ID_klineta) walidacja_id($ID_klienta);
if($date1) walidacja_date1($date1);
informacje o błędzie są pokazywane na górze formularza i już nie mam pomysłów sciana.gif
Rid
Zalecam trochę poczytać książki o programowaniu zarówno w html jak i php a w szczególności tworzenie formularzy.
  1. #
  2. function walidacja_id($ID_klienta){
  3. #
  4.  
  5. #
  6. if (empty($ID_klienta['ID_klineta'])){
  7. #
  8. echo 'dane puste ';
  9. #
  10. }
  11. #
  12. if(strlen($ID_klienta)!= 8){
  13. #
  14. echo 'zla ilosc znakow ';
  15. #
  16. }
  17. #
  18. }
  19. #
  20. $ID_klineta = $_POST ["ID_klienta"];
  21. #
  22.  
  23. #
  24. function walidacja_date1($date1){
  25. #
  26.  
  27. #
  28. if(empty($date1['date1'])){
  29. #
  30.  
  31. #
  32. echo 'pusta godzina ';
  33. #
  34. }
  35. #
  36.  
  37. #
  38. if (isset ($_POST['date1']))
  39. #
  40. if(preg_match('/^[0-9]{4}[\-]{1}[0-9]{2}[\-]{1}[0-9]{2}\s{1}[0-9]{2}[\:]{1}[0-9]{2}[\:]{1}[0-9]{2}$/D', trim($_POST['date1'])))
  41. #
  42. {
  43. #
  44. echo 'Data jest gitara ' ;
  45. #
  46. }
  47. #
  48. else echo 'Zly format. Musi byc zachowany foramt YYYY-MM-DD HH:MI:SS !!!!';
  49. #
  50. }
  51. #
  52. $date1= $_POST['date1'];
Podstawowy błąd jaki Pan popełnił to ,zadeklarował zmienne po wykonaniu polecenia,należy najlepiej to zrobić na początku skryptu,jeśli w funkcji to na początku funkcji,trzeba pamiętać że strona się parsuje z góry do dołu. Druga rzecz polecenie input jest najlepiej użyć w HTML ,aby móc później rozmieścić na stronie.U Pana w ogóle nie ma sekcji strony <HTML><HEAD><BODY>
kemes123
Sekcje body head i input ominąłem znajduje się ona na dole w chwili wyświetlenia formularza. Dziękuje za uwagę o zmiennych głównie dlatego piszę w przedszkolu. Zmienne przeniosłem na góre ale to nic nie zmieniło. Wydaje mi się że błąd popełniam gdzieś tu:

  1. if ((walidacja_id($ID_klienta)) && (walidacja_date1($date1))){

ale moja wiedza się na tym kończy
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.