Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][POSTGRES] Jak wstawić do bazy rekordy z listy wielokrotnego wyboru?
Forum PHP.pl > Forum > PHP
marcinp1984
Witam 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??
Crozin
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. ?>
winksmiley.jpg
marcinp1984
hmm... zupełnie nic się mi nie rozjaśniło bo nie bardzo wiem co to wnosi? tongue.gif

No dobra chyba już wiem co to daje 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?questionmark.gif Błaaaaaaaaaaagam niech ktoś pomoże smile.gif
john_doe
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
marcinp1984
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 :/
john_doe
jak kilku? możesz zaznaczyć tylko dwóch
questionmark.gifquestionmark.gif
w nazwie zmiennej nie możesz mieć spacji kolego smile.gif
marcinp1984
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 winksmiley.jpg
Largo
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
john_doe
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 smile.gif

  1. <?php
  2.    $test=$_POST['test'];
  3.    if ($test){
  4.     foreach ($test as $t){echo 'wybrales: ',$t,'<br />';}
  5.    }
  6. ?>
marcinp1984
ok zaraz to sobie poprzeglądam winksmiley.jpg

John_doe Twój sposób niestety nic mi nie wyświetla sad.gif
Crozin
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ę.
marcinp1984
ok zaraz zobacze winksmiley.jpg

ahh... to już wiem czemu ten poprzedni przykład który podałeś mi nie chodził :/ Teraz chodzą oby dwa tongue.gif Teraz jeszcze muszę pokombinować jak te dane odebrać i wprowadzić do bazy... jak się nie uda to pewnie jeszcze będe pisał 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ć :/
Crozin
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. ?>
marcinp1984
Post zmieniony 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);"
Crozin
Eee... var_dump" title="Zobacz w manualu PHP" target="_manual() - zobacz do czego to służy.
marcinp1984
hmm... i tu wychodzi to jak bardo jestem zaawansowany w phpie biggrin.gif
Czyli jednak wszystko działało winksmiley.jpg
Wielkie dzięki smile.gif Już wypełnia baze winksmiley.jpg

hmm... chyba jednak nie wypełnia biggrin.gif jeszcze musze to sprawdzić winksmiley.jpg

A więc niby działa ale nie do końca 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 winksmiley.jpg Odwróciłem w kodzie kolejnościami jakieś pierdoły i już wszystko działa ok :]

Dzięki Crozin 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.