Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Jak obsłużyć taki formularz?
Forum PHP.pl > Forum > PHP
mlawnik
Witam,

Zrobiłem sobie formularz z dodawaniem pól po kliknięciu na przycisk z obsługą:
  1. <?php
  2.  
  3. require_once '../inc/config.inc.php';//konfiguracja
  4.  
  5. require_once "../lang/$lang.lang.php";//plik językowy
  6.  
  7. require_once '../inc/allfunctions.inc.php';
  8.  
  9. require_once '../inc/db.config.php';
  10.  
  11. $PHP_SELF = getnamefile();
  12.  
  13. if (!($conn=mysql_connect($db_hostname, $db_username, $db_password))) {
  14. print("$LANG[db_connect_error]");
  15. error_log("$LANG[db_connect_error]", 3, "../log/db.log");
  16. exit;
  17. }
  18.  
  19. if (!($db=mysql_select_db($db_name,$conn))) {
  20. print("$LANG[db_select_error]");
  21. error_log("$LANG[db_select_error]", 3, "../log/db.log");
  22. exit;
  23. }
  24.  
  25. $FORM = <<<FOTM
  26. <head>
  27. <script type="text/javascript">
  28. <!--
  29. function dodaj_element(kontener){
  30. var znacznik = document.createElement('input');
  31. znacznik.setAttribute('type', 'text');
  32. znacznik.setAttribute('name', 'answer');
  33. znacznik.className = 'input';
  34. var kontener = document.getElementById(kontener);
  35. kontener.appendChild(znacznik);
  36. }
  37. //-->
  38. </script>
  39. <style type="text/css">
  40. <!--
  41. input.input { display: block; }
  42. -->
  43. </style>
  44. </head>
  45. <body>
  46. <form action="$PHP_SELF" method="post">
  47. Lvl:<input type="text" name="lvl_id" /><br>
  48. Question:<br>
  49. <textarea name="question" rows="5" cols="20">
  50.  
  51. </textarea><br>
  52. <div id="answers">
  53. Answers:<br><input type="text" name="answer" class="input"/>
  54. </div>
  55. <div>
  56. <input type="button" value="Dodaj odpowiedź" onclick="dodaj_element('answers');" />
  57. </div>
  58. <input type="hidden" name="IsSent" value="Yes" />
  59. <button type="submit">Wyślij</button>
  60. </form>
  61. </body
  62. FOTM;
  63.  
  64. If(IsSet($_POST['IsSent']) && $_POST['IsSent'] == 'Yes'){
  65. If (IsSet($_POST['lvl_id']) && IsSet($_POST['answer']) && IsSet($_POST['question'])){
  66. $lvl_id = mysql_real_escape_string($_POST['lvl_id']);
  67. $answer = mysql_real_escape_string($_POST['answer']);
  68. $question = mysql_real_escape_string($_POST['question']);
  69.  
  70. $query1 = "INSERT INTO Answers (ID, ID_lvl, Answer) VALUES('NULL', '$lvl_id', '$answer');";
  71. $query2 = "INSERT INTO Levels (ID, ID_lvl, Question) VALUES('NULL', '$lvl_id','$question');";
  72.  
  73. If (!($result=mysql_query($query1))) {
  74. $error = mysql_error();
  75. print("$error");
  76. error_log("$error/n", 3, "../log/db.log");
  77. exit;
  78. }
  79. else{
  80. echo "$LANG[db_query_success]";
  81. echo "<form action=\"$PHP_SELF\" method=\"post\">
  82. <button type=\"submit\">Z powrotem</button>
  83. </form>";
  84. }
  85. If (!($result=mysql_query($query2))) {
  86. $error = mysql_error();
  87. print("$error");
  88. error_log("$error/n", 3, "../log/db.log");
  89. exit;
  90. }
  91. else{
  92. echo "$LANG[db_query_success]";
  93. echo "<form action=\"$PHP_SELF\" method=\"post\">
  94. <button type=\"submit\">Z powrotem</button>
  95. </form>";
  96. }
  97. }
  98. }
  99. else {
  100. echo "$FORM";
  101. }
  102. ?>


Problemem jest to, że obsługuje tylko pierwsze pole niestety.
Jak to zrobić, aby obsłużył wszystkie pola?

Podgląd:
http://www.stw.net23.net/googleme_experime...ions.insert.php
Pozdrawiam,
mlawnik
tehaha
domyślam się , że chodzi o to że tylko jedna odpowiedź jest przesyłana musisz je przerobić na tablicę czyli name="answer" -> name="answer[]" dodajesz nawias kwadratowy do nazwy i $_POST['answer'] będzie tablicą z odpowiedziami, więc albo dobierzesz się do odpowiedzi pętlą foreach() - jeżeli każdą odpowiedź dajesz w od dzielnym polu lub użyjesz serialize() i całą tablicę wrzucisz do bazy
mlawnik
Można jakiś prosty przykład?
tehaha
daj do nazwy kwadratowy nawias czyli name="answer[]" a potem
  1. foreach($_POST['answer'] as $value)
  2. {
  3. echo $value;
  4. }

w taki sposób odczytujesz każdy element tablicy i jeżeli chcesz aby każda odpowiedź była oddzielnym rekordem, to tworzysz w tej pętli zapytanie, $value będzie każdym oddzielnym pytaniem

alternatywnie możesz też po prostu przed umieszczeniem dać serialize()

  1. $answers = serialize($_POST['answer']);

wtedy tablica zostanie prze konwertowana do postaci w, której może już być przechowywana w pojedynczym rekordzie, a potem przy odczycie dajesz unserialize() i masz tablicę gotową do użycia

mlawnik
A jaki kod javascript do dodawania takich pól?
Tzn. Jak zrobić te nawiasy kwadratowe?
phpion
Jak? W magiczny sposób:
  1. znacznik.setAttribute('name', 'answer[]');
  2. alert("phpion rulez");
mlawnik
[JAVASCRIPT] pobierz, plaintext
  1. alert("phpion rulez");
[JAVASCRIPT] pobierz, plaintext
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.