Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]weryfikacja formularza oraz zapis do pliku / bazy danych
Forum PHP.pl > Forum > Przedszkole
pablo_83
Mam problem z kodem poniżej, parę problemów:
1. W jaki sposób zmienić instrukcje if aby póki formularz nie zostanie poprawnie wypełniony zapis do pliku/bazy nie odbywał się.
2. Dlaczego tablica pojemność jest zapisywana do pliku jako array a nie wartość (value), jak to zmienić questionmark.gif
3. Mam dwa pliki formularz - html i skrypt obsługujący w php jak zrobić powrót do formularza do źle wypełnionych pól tak żeby dane wprowadzone za pierwszym razem nie znikały, żeby wystarczyło je tylko poprawić.
4. I ostatnie smile.gif dlaczego jak zapisuje do bazy to w polach formuarza skrypt rząda ode mnie takich wartości jak nazwy kolumn w bazie? nie mogę wpisać innych wartości dostaje taki komunikat:
Połączono z bazą danych
Unknown column 'Mann' (Mann to wpisana wartość prze ze mnie) in 'field list'

Bardzo proszę o pomoc siedzę nad tym cały dzień, składniowo wszystko mi działa aczkolwiek nie do końca tak jakbym chciał. Help
  1. <?php
  2. $dane = $user."\n".$haslo."\n".$producent."\n".$oznak."\n".$samoch."\n".$typ."\n".$poj."\n".$rok."\n";
  3. if (isset ($_POST['zapis']))  // -------------------------------- 1
  4. {  
  5.      
  6.   if (strlen($producent) ==0)
  7.        {
  8.        echo ("<b>Nie podałeś producenta !</b>");
  9.        }
  10.        else    
  11.           {
  12.           echo ("Producent filtra to: $producent<br  /> ");
  13.           }
  14.      
  15.   function czy_poprawne_dane($producent)      
  16.   {
  17.        echo "$producent --> <font color='";
  18.     if (!ereg('^[A-Z][a-ząćęłńóśźżĄĆĘŁŃÓŚŹŻ]',$producent))
  19.        echo "red'>niepoprawne</font>";
  20.     else
  21.        echo "green'>poprawne</font>";
  22.        echo '';
  23.   }      
  24.   czy_poprawne_dane(''.$producent);
  25.        echo ("<br  />");
  26.  
  27. if (isset($_POST['poj']))// ----------------------------------------  2
  28. {  
  29.    if (is_array($_POST['poj']))
  30.    {
  31.       echo '<br  />Pojemność silnika: ';
  32.    while ($element = each($_POST['poj']))
  33.    {
  34.       echo $element[1].' ';
  35.    }
  36.    }
  37.    else
  38.       echo 'Filtr pasuje do kilku pojemności silnika:'.$_POST['poj'];
  39. }
  40. else
  41.   echo '<b>Nie podałeś pojemnośći !</b><br /> ';
  42.  
  43. if
  44.   ( $user =="" ||$haslo =="" ||$producent ==""||$oznak ==""||$samoch ==""||$typ ==""||$poj ==""||$rok =="")
  45.      {          
  46.       echo ("Zapis do pliku nie udany, nie podałeś wszystkich danych");
  47.      }
  48. else
  49.     {
  50.        $file = "baza.txt";
  51.        $fp = fopen($file, "a");
  52.        flock($fp, 2);
  53.        fwrite($fp, $dane);
  54.        flock($fp, 3);
  55.        echo ("Zapis do pliku udany");
  56.     }
  57. }
  58. else
  59. {
  60.        $con = mysql_connect ("mysql3.yoyo.pl","$user","$haslo") ;
  61.        mysql_select_db ("db772113") ;
  62.        
  63.        if  (!$con)
  64.        {
  65.                echo ("Nie mogę nawiązać połączenia");
  66.        }
  67.         else
  68.        {
  69.            echo ("Połączono z bazą danych<br  />");
  70.              mysql_query("SET NAMES 'utf8'");
  71.              mysql_query("SET collation_connection = utf8_polish_ci");
  72.          
  73.            $wynik = mysql_query("INSERT INTO Filtry (Producent, Oznakowanie, Samochód, Typ, Rok, Pojemność)
  74.            VALUES ($producent, $oznak, $samoch, $typ, $rok, $poj)")
  75.            or die(mysql_error());//----------------- 4
  76.        }
  77.            mysql_close() or die(mysql_error());
  78. }
  79.      
  80. ?>

aha i jeszcze dlaczego jeśli zaznaczę więcej niż jedną pojemność to i tak wyświetla mi komunikat: "wybrałeś pojemność:" a nie tą którą powinien czyli "Filtr pasuje do pojemności silnika" questionmark.gif

help exclamation.gif
TheaSiX
4. spróbuj zrobić tak:

  1. <?php
  2. $wynik = mysql_query("INSERT INTO Filtry (`Producent`, `Oznakowanie`, `Samochód`, `Typ`, `Rok`, `Pojemność`)
  3.           VALUES ('$producent', '$oznak', '$samoch', '$typ', '$rok', '$poj')")
  4. ?>


3. W pliku sprawdzającym poprawność danych możesz z powrotem wysłać dane, które nie mają być do poprawienia. Wystarczy, że na końcu kodu zrobisz formularz prowadzący na daną stronę i użyjesz JS do automatycznego wysłania formularza. Oczywiście do przekazu danych użyj pól HIDDEN.

  1. document.forms["nazwa_formularza"].submit();


Wtedy w pliku z formularzem, musisz sprawdzić (co myslę, że wiesz) czy dana zmienna już istnieje, jeśli tak to ustawiasz ją jako domyślną wartość w polu.

2. a gdzie masz linijkę odnośnie tego, co zawiera $dane ?
pablo_83
dzięki biggrin.gif
co do $dane to przez pomyłkę nie skopiowałem jak zamieszczałem post. już dodałem < -- 2
Dodawanie do bazy działa faktycznie brakowało mi apostrofów ' ' dzieki wielkie biggrin.gif < --- 4
nie moge użyć js musi to byc zrobione w php już próbowałem wczesniej dać zwykły wstecz (back.history) jednak się dowiedziałem ze nie mogę używać js.

pozostaje jeszcze dlaczego cały czas w pliku, checkbox'y i listę select zapisuje mi jako array'e a nie wstawia ich wartości...?
tak samo do bazy nie wstawił mi pojemności
TheaSiX
jeśli nie możesz używać JS to w takim razie pozostaje użycie metody GET + header lub znacznik meta.

Sytuacja wygląda tak:

W pliku kup.php gdy dane nie zostaną zaakceptowane umieszczasz na samym końcu kod:

  1. <?php
  2. <meta http-equiv=&#092;"refresh\" content=\"czas;URL=twoja_strona.php?poj=$poj&producent=$producent>
  3. ?>


i tak dalej i tak dalej

Wtedy gdy w tablicy POST nie będzie żadnych informacji (jako, że przesyłamy metodą GET, po sprawdzeniu już raz zatwierdzonych danych), musisz wyłowić na nowo dane metodą GET:

  1. <?php
  2. $producent = $_GET["producent"];
  3. $poj = $_GET["poj"];
  4. ?>


a w polach formularza dodaj np:

  1. <?php
  2. <input type="text" name="producent" value="$producent">
  3. ?>


jeśli zmienna będzie pusta (czyli przy pierwszym wywołaniu formularza) to wiadomo, że input będzie pusty tak więc jedyną różnicą między 1 wejściem a sprawdzaniem to sposób pobierania danych. W ten sposób odróżnisz czy jest to nowy wpis, czy wpis do poprawy.

jakby coś było niejasne to wybacz.. 1 w nocy już biggrin.gif

edit:

z tymi checboxami itp. to pokaż strukturę pliku z formularzem ok?
pablo_83
to jest mój formularz, (skrypt php nie zawiera odniesienia do wszystkich pól ponieważ post był za długi) nie mam pojecia dlaczego checkboxy i select jest zapisywany jako array jeśli zaznaczę 2 lub więcej chceckboxy to przy weryfikacji pokazuje mi wszystkie wybrane wartości z tym że komunikat skryptu (echo) zostaje cały czas taki sam.

jeśli ma ktoś ochotę obrazowo sprawdzić jak wygląda problem to formularz jest tutaj,
formularz

jak mam zagnieździć instrukcje if z weryfikacją żeby formularz nie zostawał zapisywany w przypadku błędnych danych? (dla bazy i pliku)

  1. <form action="lista5.php" method="post">
  2. <h3>Formularz dodawania filtrów samochodowych</h3>
  3.  
  4. <table border="2" bordercolor="red" >
  5.  
  6.  
  7. <tr><td><input type="text" name="login" /></td>
  8. <td>Login bazy danych</td></tr>
  9. <tr><td><input type="password" name="haslo" /></td>
  10. <td>Hasło dostępu</td></tr>
  11. <tr>
  12. </tr>
  13. <tr>
  14. </tr><tr>
  15. </tr>
  16. <tr><td><input type="text" name="producent" /></td>
  17. <td>Producent (Filtron, Bosh, Mann)</td></tr>
  18. <tr><td><input type="text" name="oznak" /></td>
  19. <td> Oznaczenie</td></tr>
  20. <tr><td><input type="text" name="samoch" /></td>
  21. <td>Marka samochodu</td></tr><tr>
  22. </tr><tr>
  23. </tr>
  24. <tr><td><b>Wybierz pojemność samochodu</b></td></tr><tr>
  25. </tr><tr>
  26. </tr>
  27. <tr><td><input type="checkbox" name="poj[]" value="1.1" />1.1L</td>
  28. <td><input type="checkbox" name="poj[]" value="1.2" />1.2L</td>
  29. </tr>
  30. <tr><td><input type="checkbox" name="poj[]" value="1.3" />1.3L</td>
  31. <td><input type="checkbox" name="poj[]" value="1.4" />1.4L</td>
  32. </tr>
  33. <tr><td><input type="checkbox" name="poj[]" value="1.6" />1.6L</td>
  34. <td><input type="checkbox" name="poj[]" value="1.7" />1.7L</td>
  35. </tr>
  36. <tr><td><input type="checkbox" name="poj[]" value="1.8" />1.8L</td>
  37. <td><input type="checkbox" name="poj[]" value="1.9" />1.9L</td>
  38. </tr>
  39. <tr><td><input type="checkbox" name="poj[]" value="2.0" />2.0L</td>
  40. <td><input type="checkbox" name="poj[]" value="2.2" />2.2L</td>
  41. </tr>
  42. <tr><td><input type="checkbox" name="poj[]" value="2.5" />2.5L</td>
  43. </tr><tr>
  44. </tr><tr>
  45. </tr><tr>
  46. </tr>
  47. <tr><td><b>Wybierz typ filtra</b></td></tr><tr>
  48. </tr><tr>
  49. </tr><tr>
  50. </tr>
  51. <tr><td><input type="radio" name="typ" value="olej" />olejowy</td>
  52. <td><input type="radio" name="typ" value="powietrze" />powietrza</td></tr>
  53. <tr><td><input type="radio" name="typ" value="paliwo" />paliwa</td>
  54. <td><input type="radio" name="typ" value="pylek" />pyłkowy</td></tr>
  55. <tr>
  56. </tr><tr>
  57. </tr>
  58. <tr><td><b>Wybierz rok produkcji samochodu</b></td></tr>
  59. <tr><td>
  60. <select name="rok[]" size="5" multiple="multiple">
  61. <option >1990</option>
  62. <option >1991</option>
  63. <option >1992</option>
  64. <option >1993</option>
  65. <option >1994</option>
  66. <option >1995</option>
  67. <option >1996</option>
  68. <option >1997</option>
  69. <option >1998</option>
  70. <option >1999</option>
  71. <option >2000</option>
  72. <option >2001</option>
  73. <option >2002</option>
  74. <option >2003</option>
  75. <option >2004</option>
  76. <option >2005</option>
  77. <option >2006</option>
  78. <option >2007</option>
  79. <option >2008</option>
  80. </select></td></tr>
  81.  
  82. <tr>
  83. </tr><tr>
  84. </tr>
  85. <tr><td><input type="reset" name="wyczysc" value="wyczyść" /></td>
  86. <td><input type="submit" name="wyslij" value="dodaj filtr" /></td></tr>
  87. <tr></tr>
  88. <tr></tr>
  89. <tr></tr><tr border="0"><td>
  90. <a href="../index.html"><input type="button" value="home" /></a> </td></tr>
  91. <br />
  92. <input type="checkbox" name="zapis" value="zapis" />Zapisz do pliku <br />
  93.  
  94. </form>
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.