Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dynamicznie dodawanie formularzy, wpisywanie do bazy danych mysql + php
golphp
post 1.06.2011, 21:05:27
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 1.06.2011

Ostrzeżenie: (0%)
-----


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 } ?>
Go to the top of the page
+Quote Post
mortus
post 1.06.2011, 21:51:36
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
golphp
post 2.06.2011, 20:55:30
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 1.06.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował golphp 2.06.2011, 20:59:40
Go to the top of the page
+Quote Post
romantyk
post 2.06.2011, 21:10:55
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 2.06.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
golphp
post 2.06.2011, 21:21:08
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 1.06.2011

Ostrzeżenie: (0%)
-----


Tak, proste dodawanie do bazy danych to jak widac w powyzzym skrypcie jest.

Chodzi mi o dodawanie dynamicznych pol formularzy.
Go to the top of the page
+Quote Post
mortus
post 2.06.2011, 22:19:09
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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.

Ten post edytował mortus 2.06.2011, 22:23:23
Go to the top of the page
+Quote Post
golphp
post 2.06.2011, 22:39:51
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 1.06.2011

Ostrzeżenie: (0%)
-----


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>

Go to the top of the page
+Quote Post
mortus
post 2.06.2011, 22:50:48
Post #8





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
golphp
post 2.06.2011, 23:36:55
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 1.06.2011

Ostrzeżenie: (0%)
-----


Dokładnie o to mi chodziło, dziękuję za pomoc smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:08