Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamicznie dodawanie formularzy, wpisywanie do bazy danych mysql + php
Forum PHP.pl > Forum > PHP
golphp
Witam.

Szanowni koledzy i koleżanki, chciałbym poprosić Was o pomoc, radę. Poniżej przedstawiam kawałek kodu, dzięki któremu tworzę dynamiczne pola input przy wsparciu jquery.

W tej chwili podany kod dodaje 1 rekord do bazy (jedno pole input). Chciałbym to rozbudować o kolejne pola czyli dodaje:

'<input id="nazwisko_' + count + '" name="surname[]' + '" type="text" />' i pole bedzie.

Teraz, jak dopisac kawalek kodu, zeby dodawalo to do bazy w ten sposob:

$sql_add = ("INSERT INTO sites (imie, nazwisko) VALUES ('$val1', '$val2')");

Nie licze na rozwiazanie problemu za mnie, zatem licze na wskazowki i przklady.

Pozdrawiam.

  1. <script type="text/javascript">
  2. var count = 0;
  3. $(function(){
  4. $('p#add_field').click(function(){
  5. count += 1;
  6. $('#container').append(
  7. '<strong>Link #' + count + '</strong><br />'
  8. + '<input id="field_' + count + '" name="fields[]' + '" type="text" /><br />');
  9.  
  10. });
  11. });
  12. </script>



  1. <?php
  2.  
  3. if (isset($_POST['btnSubmit'])) {
  4.  
  5. $db = new mysqldb();
  6. $db->select_db();
  7.  
  8. if ($_POST['fields']) {
  9.  
  10. foreach ($fields as $value => $val1) {
  11.  
  12. $sql_add = ("INSERT INTO sites (imie) VALUES ('$val1')");
  13. $result_add = $db->query($sql_add);
  14.  
  15.  
  16. }
  17.  
  18. } else {
  19.  
  20. //No additional fields added by user
  21.  
  22. }
  23.  
  24.  
  25.  
  26. echo "Rekordy wpisano do bazy";
  27.  
  28. //disconnect mysql connection
  29. $db->kill();
  30. }
  31. ?>


  1. <?php if (!isset($_POST['btnSubmit'])) { ?>
  2. <form name="test" method="post" action="">
  3.  
  4.  
  5. <div id="container">
  6. <p id="add_field"><a href="#">Dodaj nowy input</a></p>
  7. </div>
  8.  
  9. <input id="go" name="btnSubmit" type="submit" value="Signup" class="btn" />
  10. </form>
  11. <?php } ?>
mortus
  1. if(!empty($_POST['imiona'])) {
  2. $imiona = $_POST['imiona'];
  3. $sql_add = "INSERT INTO sites (imie) VALUES ";
  4. foreach($imiona as $licznik => $imie) {
  5. $sql_add .= "('".$imie."'),";
  6. }
  7. $sql_add = substr($sql_add, 0, -1);
  8. $result_add = $db->query($sql_add);
  9. }
Oczywiście serwer mySQL może mieć pewne ograniczenia, co do liczby tak wykonywanych insertów.
golphp
Chyba mnie zle zrozumiales, nie o to mi chodzilo.

Za pomoca jednego zapytania INSERT INTO chcialbym dodac kilka inputow z formularza. Przeczytaj jeszcze raz i postaraj sie mnie zrozumiec wink.gif

Przyklad: http://www.php-faktura.com.pl/demo.php

Chcialbym zrobic podobny formularz jak dodawanie wartosci: Nazwa towaru, Cena, Ilosc i przy nacisnieciu + Dodaj pozycje dodawanie kolejnych formularzy. Chcialbym to w taki sposob zapisac do bazy.

Za pomoc moge zaplacic.
romantyk
Jest to mój pierwszy post więc przepraszam smile.gif

Oczywiście, żeby dodać więcej informacji niż jedno potrzebujesz bazy z określonymi polami - jakie wskazałeś.
Tutaj podaje Ci skrypty, których ja używam do takich rzeczy:
Skrypt ten dodaje dwie dane imię oraz mail. Na jego podstawie łatwo przerobisz na konkretne dane jakie Cie interesują.
Mam nadzieję, że pomogłem.

Formularz:
CODE
<form action="index.php" method="post">
imię:<br />
<input type="text" name="imie" /><br />
e-mail:<br />
<input type="text" name="email" /><br />
<input type="submit" value="dodaj" />
</form>


Skrypt PHP:
CODE
<?php
// odbieramy dane z formularza
$imie = $_POST['imie'];
$email = $_POST['email'];

if($imie and $email) {

// łączymy się z bazą danych
$connection = @mysql_connect('localhost', 'root', 'haslo')
or die('Brak połączenia z serwerem MySQL');
$db = @mysql_select_db('test', $connection)
or die('Nie mogę połączyć się z bazą danych');

// dodajemy rekord do bazy
$ins = @mysql_query("INSERT INTO test SET imie='$imie', email='$email'");

if($ins) echo "Rekord został dodany poprawnie";
else echo "Błąd nie udało się dodać nowego rekordu";

mysql_close($connection);
}

?>


Skrypt zapożyczony ze strony: http://www.kess.snug.pl/?sid=10&pid=42
golphp
Tak, proste dodawanie do bazy danych to jak widac w powyzzym skrypcie jest.

Chodzi mi o dodawanie dynamicznych pol formularzy.
mortus
Załóżmy, że mamy bazę danych z imionami. Prosta tabela `names`, zawierająca kolumny id i name.
Do dodawania jednego imienia służy formularz:
  1. <form action="" method="post">
  2. <p>
  3. <label for="name">Imię:</label><br />
  4. <input id="name" type="text" name="name" />
  5. </p>
  6. <p>
  7. <input type="submit" name="add" value="Dodaj imię" />
  8. </p>
  9. </form>
Do dodawania kilku imion służyłby natomiast formularz:
  1. <form action="" method="post">
  2. <p>
  3. <label for="name_1">Imię 1:</label><br />
  4. <input id="name_1" type="text" name="names[]" />
  5. </p>
  6. <p>
  7. <label for="name_2">Imię 2:</label><br />
  8. <input id="name_2" type="text" name="names[]" />
  9. </p>
  10. <p><a href="">Więcej imion</a></p>
  11. <p>
  12. <input type="submit" name="add" value="Dodaj imiona" />
  13. </p>
  14. </form>
Przy czym kolejne pola input oznaczone name_x powstają po naciśnięciu odnośnika "Więcej imion".
Po naciśnięciu przycisku "Dodaj imiona" dodajemy je do bazy danych w taki sposób, jak to przedstawiłem w pierwszym poście w tym temacie:
  1. if(!empty($_POST['names'])) {
  2. $names = $_POST['names'];
  3. $sql_add = "INSERT INTO `names` (`name`) VALUES ";
  4. foreach($names as $counter => $name) {
  5. $sql_add .= "('".$name."'),";
  6. }
  7. $sql_add = substr($sql_add, 0, -1);
  8. $result_add = $db->query($sql_add);
  9. }


EDIT
I albo ja jestem totalnym analfabetą, albo źle zdefiniowałeś problem.
golphp
Aktualny kod ktory ja dodalem dokladnie takie zadanie spelnia. Mam natomiast problem, jak dopisac, zeby dodawalo wiele inputow wedlug ponizszego formularza
Przyklad:


  1. <form action="" method="post">
  2. <p>
  3. <label for="name_1">Imię 1:</label><br />
  4. <input id="name_1" type="text" name="names[]" />
  5. <input id="surname_1" type="text" name="surnames[]" />
  6. <input id="address_1" type="text" name="adresss[]" />
  7. </p>
  8. <p>
  9. <label for="name_2">Imię 2:</label><br />
  10. <input id="name_2" type="text" name="names[]" />
  11. <input id="surname_2" type="text" name="surnames[]" />
  12. <input id="address_2" type="text" name="adresss[]" />
  13. </p>
  14. <p><a href="">Więcej imion</a></p>
  15. <p>
  16. <input type="submit" name="add" value="Dodaj imiona" />
  17. </p>
  18. </form>

mortus
  1. if(!empty($_POST['names']) && !empty($_POST['surnames']) && !empty($_POST['addresses'])) {
  2. $names = $_POST['names'];
  3. $surnames = $_POST['surnames'];
  4. $addresses = $_POST['addresss'];
  5. $sql_add = "INSERT INTO `names` (`name`, `surname`, `address`) VALUES ";
  6. foreach($names as $counter => $name) {
  7. $sql_add .= "('".$name."', '".$surnames[$counter]."', '".$addresses[$counter]."'),";
  8. }
  9. $sql_add = substr($sql_add, 0, -1);
  10. $result_add = $db->query($sql_add);
  11. }

Ot tak, ponieważ wszystkie tablice są równej długości. Oczywiście należy obsłużyć również sytuacje, w których potencjalny użytkownik nie poda wszystkich danych.
golphp
Dokładnie o to mi chodziło, dziękuję za pomoc 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.