Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][POSTGRES] Jak wstawić do bazy rekordy z listy wielokrotnego wyboru?
marcinp1984
post
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


Witam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Mam problem ze wstawieniem rekordów do tabeli wybieranych z listy wielokrotnego wyboru. W zasadzie to nie problem tyle że zupełnie nie wiem jak to zrobić :/

Dane z formularza przekazywane są dalej w taki sposób:

  1. <?php
  2. echo "<form action=wokalistaalbumsql.php method=post>";
  3.  
  4. $query = "SELECT * FROM wokalisci order by imie";
  5. $result = pg_query($query);
  6.  
  7. echo "<b>Dodaj Wokalistę/wokalistów:</b><br>";
  8. echo "<select name=wokal multiple>";
  9. while($line = pg_fetch_array($result, null, PGSQL_ASSOC))
  10. {
  11.   echo "<option value='".$line['id_wokal']."'>$line[imie] $line[nazwisko]</option>";
  12. }
  13. echo "</select>";
  14.  
  15.  
  16. $query = "SELECT * FROM albumy order by tytul";
  17. $result = pg_query($query);
  18.  
  19. echo "<b>do albumu: </b>";
  20. echo "<select name=album>";
  21. while($line = pg_fetch_array($result, null, PGSQL_ASSOC))
  22. {
  23.   echo "<option value='".$line['id_albumu']."'>$line[tytul]</option>";
  24. }
  25. echo "</select>";
  26. ?>



Jak teraz należy to odebrać w pliku wokalistaalbumsql.php aby do bazy zostali dodani wszyscy wskazani przeze mnie woaliści??

Ten post edytował marcinp1984 26.05.2009, 20:41:39
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Wszystko powinno się rozjaśnić, gdy w wokalistaalbumsql.php na początku wstawisz sobie:
  1. <?php
  2. die('<pre>' . print_r($_POST, true) . '</pre>');
  3. ?>
(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
marcinp1984
post
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


hmm... zupełnie nic się mi nie rozjaśniło bo nie bardzo wiem co to wnosi? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

No dobra chyba już wiem co to daje (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Pewnie nie bardzo jest co odbierać w drugim pliku bo i tak daje to jedną wartość :/ Wiec jak to zrobić żeby działało poprawnie?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Błaaaaaaaaaaagam niech ktoś pomoże (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
john_doe
post
Post #4





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


zrób to co napisał Crozin.
dwa pola option nazwałeś kolejno
1. name = wokal multiple <- tak w ogóle to dodaj tam jakiś łącznik czy coś żeby spacji nie było
2. name = album

więc na stronie wokalistaalbumsql.php
masz te wartości pod zmiennymi

$_POST['wokal_multiple']
$_POST['album']

i te zmienne do bazki pakuj

pozdro
Go to the top of the page
+Quote Post
marcinp1984
post
Post #5





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


No właśnie tak miałem na początku ale to i tak nie działało bo do bazy ładowany był tylko jeden wokalista pomimo tego że zaznaczyłem kilku :/
Go to the top of the page
+Quote Post
john_doe
post
Post #6





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


jak kilku? możesz zaznaczyć tylko dwóch
(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
w nazwie zmiennej nie możesz mieć spacji kolego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
marcinp1984
post
Post #7





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


potrzebuje zaznaczyć kilku dla tego jest<select multiple> mam relacje wiele do wielu i chce do tabelki łączącej wstawić np. id pięciu wokalistów z tym samym id albumu.
Spacje usune ale chyba to nic nie pomoże (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Largo
post
Post #8





Grupa: Zarejestrowani
Postów: 203
Pomógł: 6
Dołączył: 11.09.2005

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


Witaj,

Może na początek zastanów się co Ci przekazuje - może pary liczb? Połącz je implode i następnie dodawaj do bazy danych jako ciąg znaków, aby je odczytać użyj explode. Przykładowy kod zapisu:

  1. <?php
  2. if ( is_array( $_POST['nazwa_select'] ) )
  3. {
  4.     $array = implode( ",", $_POST['nazwa_select'] );
  5. }
  6. ?>


Analogiczne do odczytania, poczytaj o tym w Manual'u :-)

Pozdrawiam,
Largo

Ten post edytował Largo 25.05.2009, 22:19:02
Go to the top of the page
+Quote Post
john_doe
post
Post #9





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


no dobra to obadaj sobie taki kod

  1. <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
  2. <select name="test[]" multiple="multiple">
  3.    <option value="one">one</option>
  4.    <option value="two">two</option>
  5.    <option value="three">three</option>
  6.    <option value="four">four</option>
  7.    <option value="five">five</option>
  8. <input type="submit" value="Send" />
  9. </form>

a tak to odbierasz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

  1. <?php
  2.    $test=$_POST['test'];
  3.    if ($test){
  4.     foreach ($test as $t){echo 'wybrales: ',$t,'<br />';}
  5.    }
  6. ?>


Ten post edytował john_doe 25.05.2009, 22:22:00
Go to the top of the page
+Quote Post
marcinp1984
post
Post #10





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


ok zaraz to sobie poprzeglądam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

John_doe Twój sposób niestety nic mi nie wyświetla (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
Crozin
post
Post #11





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Kod
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Przykładowy dokument</title>

        <style type="text/css"></style>
        <script type="text/javascript"></script>
    </head>
    <body>
        <form action="post.php" method="post">
            <select name="mySelect[]" multiple="multiple">
                <option value="1">Opcja 1</option>
                <option value="2">Opcja 2</option>
                <option value="3">Opcja 3</option>
                <option value="4">Opcja 4</option>
                <option value="5">Opcja 5</option>
            </select>
            <input type="submit" />
        </form>
    </body>
</html>
Rezultat:
Kod
Array
(
    [mySelect] => Array
        (
            [0] => 2
            [1] => 3
            [2] => 4
        )

)
Teraz już powinieneś dać radę.
Go to the top of the page
+Quote Post
marcinp1984
post
Post #12





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


ok zaraz zobacze (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

ahh... to już wiem czemu ten poprzedni przykład który podałeś mi nie chodził :/ Teraz chodzą oby dwa (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Teraz jeszcze muszę pokombinować jak te dane odebrać i wprowadzić do bazy... jak się nie uda to pewnie jeszcze będe pisał (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

A więc problemów ciąg dalszy... więc wszystkie dane są ładnie przesyłane do drugiego pliku tylko jak to teraz wprowadzić do bazy?? Zapytanie do bazy musi być w jakiejś pętli? Jak to powinno wyglądać?? Nie bardzo wiem jak to zrobić :/
Go to the top of the page
+Quote Post
Crozin
post
Post #13





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Mógłbyś w pierwszym poście dodać BBCode?

A co do problemu:
  1. <?php
  2. $sql = 'INSERT INTO tbl_name ( author_id, art_id ) VALUES %s;';
  3. $values = array();
  4. foreach($_POST['to_z_multiple'] as $aid){
  5.  $values[] = sprintf('(%d, %d)', (int) $aid, (int) $_POST['art']);
  6. }
  7. $values = implode(', ', $values);
  8.  
  9. $sql = sprintf($sql, $values);
  10.  
  11. var_dump($sql); //zapytanie do wykonania
  12. ?>
Go to the top of the page
+Quote Post
marcinp1984
post
Post #14





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


Post zmieniony (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) zaraz sprawdzę ten kod

No i ciągle mi nic nie wychodzi :/

zrobiłem to tak:

  1. <?php
  2.  
  3. $dbconn = pg_connect("host=localhost port=5555 dbname=postgres user=postgres password=marcin");
  4.  
  5. $wokal = $_POST['wokal'];
  6. $album = $_POST['album'];
  7.  
  8. $sql = 'INSERT INTO wokalisci_albumow (id_albumu, id_wokal) VALUES %s;';
  9. $values = array();
  10. foreach($_POST['wokal'] as $aid){
  11. $values[] = sprintf('(%d, %d)', (int) $aid, (int) $_POST['album']);
  12. }
  13.  
  14. $values = implode(', ', $values);
  15.  
  16. $sql = sprintf($sql, $values);
  17.  
  18. var_dump($sql); //zapytanie do wykonania
  19.  
  20. pg_close($dbconn);
  21.  
  22. ?>


I wyskakuje mi coś takiego :

string(82) "INSERT INTO wokalisci_albumow (id_albumu, id_wokal) VALUES (2, 2), (1, 2), (6, 2);"
Go to the top of the page
+Quote Post
Crozin
post
Post #15





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Eee... var_dump" title="Zobacz w manualu PHP" target="_manual() - zobacz do czego to służy.
Go to the top of the page
+Quote Post
marcinp1984
post
Post #16





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


hmm... i tu wychodzi to jak bardo jestem zaawansowany w phpie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Czyli jednak wszystko działało (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Wielkie dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Już wypełnia baze (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

hmm... chyba jednak nie wypełnia (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) jeszcze musze to sprawdzić (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

A więc niby działa ale nie do końca (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Mam teraz taki kod:
  1. <?php
  2.  
  3. $dbconn = pg_connect("host=localhost port=5555 dbname=postgres user=postgres password=marcin");
  4.  
  5. $wokal = $_POST['wokal'];
  6. $album = $_POST['album'];
  7.  
  8. $sql = "INSERT INTO wokalisci_albumow (id_albumu, id_wokal) VALUES %s;";
  9. $values = array();
  10. foreach($_POST['wokal'] as $aid){
  11. $values[] = sprintf('(%d, %d)', (int) $aid, (int) $_POST['album']);
  12. }
  13.  
  14. $values = implode(', ', $values);
  15.  
  16. $sql = sprintf($sql, $values);
  17.  
  18. $query = pg_query("$sql");
  19.  
  20. pg_close($dbconn);
  21.  
  22.  
  23. ?>


Jeśli wybiorę jedną z opcji to doda ją do bazy jeśli inną to już nie... jeśli dodam dwie na raz też raz doda raz nie.... im więcej próbuje dodać tym już w ogóle to nie wychodzi :/ W czym może leżeć problem??

jest w stanie ktoś pomóc??

Ahhh już wiem w czym leżała przyczyna... tabelka była jakoś odwrotnie wypełniana... id_albumu wpadało do id_wokalu i odwrotnie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Odwróciłem w kodzie kolejnościami jakieś pierdoły i już wszystko działa ok :]

Dzięki Crozin (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 14.09.2025 - 15:52