Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Die
Forum PHP.pl > Forum > Przedszkole
kry100kry100
Witam. Czy da się jakoś użyć die bez psucia szablonu? Bo trochę brzydko wygląda w pół ucięty szablon tongue.gif Myślałem może nad jakimś systemem błędów, ale jakoś za bardzo nie wiem jak się za niego zabrać. Dałby ktoś jakieś podpowiedzi?
Wicepsik
Pokaż skrypt do którego potrzebny Ci jest die.
nexis
Najprościej treść wyświetlać na samym końcu i wtedy masz możliwość przerwania programu z powodu jakiegoś błędu bez efektu "urwanych stron". Np.:
  1. <?php
  2. $output = '<h1>Nagłówek</h1>';
  3. $output .= '<p>Treść</p>';
  4. if (true) {
  5. exit('Wystąpił błąd i przerywam działanie programu!');
  6. }
  7. $output .= '<h2>Stopka</h2>';
  8. echo $output;
  9. ?>
kry100kry100
Jest to skrypt rejestracji:

  1. <?php
  2. require_once("config.php");
  3. $wynik = mysql_query("SELECT * FROM gadu")
  4. or die('Błąd zapytania');
  5.  
  6. if(mysql_num_rows($wynik) > 0) {
  7. while($r = mysql_fetch_assoc($wynik))
  8. {
  9. if($r['ip'] == $_SERVER['REMOTE_ADDR']){
  10. die ('1 IP = 1 konto');
  11. }
  12. }
  13. }
  14.  
  15. echo '<form action="" method="post" enctype="multipart/form-data" />
  16. Login:<br />
  17. <input name="login" type="text" maxlength="15" /><br />
  18. Hasło:<br />
  19. <input name="haslo" type="password" /><br />
  20. Potwierdź hasło:<br />
  21. <input name="haslo1" type="password" /><br />
  22. E-mail:<br />
  23. <input name="email" type="text" /><br /><br />
  24. Przepisz kod:<br />
  25. <img src="token.php" alt="token" maxlength="3" /><br />
  26. <input name="token" type="text" /><br />
  27. <input type="submit" value="Wyslij" />
  28. </form>';
  29.  
  30.  
  31. $login = $_POST['login'];
  32. $haslo = md5($_POST['haslo']);
  33. $haslo1 = md5($_POST['haslo1']);
  34. $email = $_POST['email'];
  35. $token = $_POST['token'];
  36. $punkty = '20';
  37. $ip = $_SERVER['REMOTE_ADDR'];
  38.  
  39.  
  40. $login = htmlentities($login, ENT_QUOTES);
  41. $haslo = htmlentities($haslo, ENT_QUOTES);
  42. $haslo1 = htmlentities($haslo1, ENT_QUOTES);
  43. $email = htmlentities($email, ENT_QUOTES);
  44. $token = htmlentities($token, ENT_QUOTES);
  45.  
  46. $checkuser = mysql_query("SELECT login FROM gadu WHERE login='$login'");
  47. $username_exist = mysql_num_rows($checkuser);
  48.  
  49. $em = mysql_query("SELECT email FROM gadu WHERE email='$email'");
  50. $email_check = mysql_num_rows($em);
  51.  
  52. if(isset($_POST['login']))
  53. {
  54. if(empty ($login) || empty($haslo) || empty($email))
  55. {
  56. die ('<br />Wszystkie pola muszą zostać wypełnione');
  57. }
  58. if(!ereg("[a-zA-Z0-9\-\_\.]+\@[a-zA-Z0-9\-\_\.]+\.[a-zA-Z]" , $email)){
  59. die ('<br />Nie poprawny adres e-mail');
  60. }
  61. if(!$haslo==$haslo1){
  62. die ('<br />Hasła muszą być takie same');
  63. }
  64. if($username_exist > 0){
  65. die ('<br />Ta nazwa użytkownika jest już zajęta');
  66. }
  67. if($email_check > 0){
  68. die ('<br />Ten adres email został juz użyty');
  69. }
  70. if($token==$_SESSION['captcha'])
  71. {
  72. $_SESSION['reg'] = ''.$login.'';
  73. $ins = mysql_query("INSERT INTO `gadu` (login, haslo, email, punkty, ip) VALUES ('$login','$haslo','$email','$punkty','$ip')");
  74. }
  75. else
  76. {
  77. die ('<br />Błędny kod');
  78. }
  79. if($ins)
  80. {
  81. echo '<br />Gratulujemy, zostałeś pomyślnie zarejestrowany';
  82. }
  83. }
  84. ?>
Void
IMHO przy walidacji formularza używanie die() jest bez sensu. No bo jeśli użytkownik wypełni np. 3 pola formularza źle, to nie dowie się o tym od razu, bo pojawi się tylko jeden komunikat i skrypt zostanie przerwany. Poprawi pole, znowu wyśle formularz pojawi się kolejny błąd itd. Poza tym błędne wypełnienie pola formularza nie jest od razu powodem do zakończenia całego skryptu. Lepiej jest wygenerować stronę z formularzem (można wtedy wpisać dane do pól, które wypełnione zostały poprawnie) i ładnymi komunikatami o błędach smile.gif Stwórz sobie więc jakąś zmienną i dopisuj do niej ewentualne komunikaty o błędach. A potem sprawdź czy zmienna ma jakąś wartość i jeśli tak - wyświetl komunikaty o błędach.
bmL
Nie chcę nikomu nic wpajać ale naprawdę lubię taką obsługę błędów formularzy, zawsze można ją szybko na poczekaniu napisać i nie jest zła:
  1. function viewErrors($errorsArr, $backURL = 'java script:history.back()')
  2. {
  3. if($errorsArr)
  4. {
  5. echo '<b>Wystąpiły następujące błędy:</b> <ul class="errors">';
  6. foreach (errorsArr as $error)
  7. {
  8. echo '<li>' . $error . '</li>';
  9. }
  10. echo '</ul>';
  11. echo '<a href="' . $backURL . '">Powrót</a>';
  12. return true;
  13. }
  14. return false;
  15. }
  16.  
  17. if(!$haslo==$haslo1){
  18. $errors[] = '<br />Hasła muszą być takie same';
  19. }
  20. if($username_exist > 0){
  21. $errors[] = '<br />Ta nazwa użytkownika jest już zajęta';
  22. }
  23. if($email_check > 0){
  24. $errors[] = '<br />Ten adres email został juz użyty';
  25. }
  26.  
  27. if(!viewErrors($errors))
  28. {
  29. // wszystko ok
  30. }
kry100kry100
Dzięki bmL. Wkradły się 2 błędy, ale bez problemu je usunąłem i skrypt działa jak należy smile.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.