Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] wybór kilku opcji i zapis do bazy
Forum PHP.pl > Forum > Przedszkole
psbert
Witam,

robię prosty formularz w którym oprócz pól INPUT mam SELECT (multiple)

z inputa wszystko się ładnie zapisuje do bazy, z SELECT-a tylko ostatnia wartość. Wyczytałem że muszę wysyłać dane jako tablice i tak też robię, niestety dalej coś jest nie tak


w pliku wysyłającym dane:
Kod

<FORM ACTION='firma_dodana.php?id=dodaj' METHOD='POST'>

<SELECT name='branza[]' size='4' multiple='multiple' >
<optgroup label='Sprzęt'>
<OPTION value='AGD'> AGD </OPTION>
<OPTION value='RTV'> RTV </OPTION>
</optgroup>
</SELECT>
<INPUT TYPE='submit' VALUE='Dodaj artykuł'>
</form>


w pliku odbierającym dane:
Kod
<?
if ( $_GET[id] == dodaj )
{
     if (!empty($_POST['firma']) && !empty($_POST['branza']) && !empty($_POST['region']) && !empty($_POST['notatka']))
               {
               require "connection.php";
               connection();
               }

foreach ($_POST['branza'] as $branza_ => $wybrano )
{
echo "$wybrano "; // tu wyświetla prawidłowo, ale jak zrobić żeby wpisywało to do bazy??
}

/*  próbowałem tak ale nic to nie daje
$wybrane = foreach ($_POST['branza'] as $branza_ => $wybrano ) { echo $wybrano; };
*/

mysql_query ("INSERT INTO firmy SET id='', firma='$_POST[firma]' , [b]branza='$wybrane',[/b] region='$_POST[region]',  notatka='$_POST[notatka]'") or die(mysql_error());
          
          echo "Firma została pomylnie dodana! <a href=spis_firm.php>Powrót do bazy firm</a>";
      }

    else
     {
     echo "Wypełnij wszystkie pola formularza... <A HREF='javascript:history.back();'>wstecz</A>";
    }

?>



bardzo proszę o pomoc w rozwiązaniu tego problemu
ewela_n
spróbuj zapisać to tak:

  1. <?php
  2. mysql_query ("INSERT INTO firmy SET id='', firma='$_POST[firma]' , branza='$wybrano', region='$_POST[region]', notatka='$_POST[notatka]'") or die(mysql_error());
  3. ?>
tomm
Z tego co widze w Twojej petli foreach wykonuje się tylko echo $wybrano; bo tylko to masz w bloku, wykonuje sie to tyle razy ile masz elementów iza każdym razem zapisuje się do $wybrane i po wykonaniu wszystkich obrotów raz wykonuje sie mysql_query z obecnie przypisana wartościa czyli ostatnią. Spróbuj mysql_query równieź umieścić w bloku {} aby wykonywało sie za kazdym razem
psbert
Cytat(ewela_n @ 29.08.2008, 10:58:07 ) *
spróbuj zapisać to tak:

  1. <?php
  2. mysql_query ("INSERT INTO firmy SET id='', firma='$_POST[firma]' , branza='$wybrano', region='$_POST[region]', notatka='$_POST[notatka]'") or die(mysql_error());
  3. ?>



Niestety nic to nie dało. W tym miejscu wcześniej zapomniałem zmienić $wybrane na $wybrano po moich testach.



Cytat(tomm @ 29.08.2008, 11:00:18 ) *
Z tego co widze w Twojej petli foreach wykonuje się tylko echo $wybrano; bo tylko to masz w bloku, wykonuje sie to tyle razy ile masz elementów iza każdym razem zapisuje się do $wybrane i po wykonaniu wszystkich obrotów raz wykonuje sie mysql_query z obecnie przypisana wartościa czyli ostatnią. Spróbuj mysql_query równieź umieścić w bloku {} aby wykonywało sie za kazdym razem



Dzięki za sugestię, niestety nie działa to do końca prawidłowo bo dane zapisywane są wtedy do kolejnych komórek w bazie a nie do jednej komórki.

PS. nie poddaje się, eksperymentuję dalej.
ewela_n
tutaj mam taki przykład, spróbuj go przerobić

  1. <input type=\"checkbox\" name=\"product_id[]\" value=\"$product_id\">$product_name<br>




if(isset($_POST['product_id'])) {
$checkboxes = $_POST['product_id'];
$string = implode($checkboxes,",");
echo $string;
}

// SEND DATA
$sql = "INSERT news_testimonial VALUES ('', '$customer_id', '$string', '$testimonial_title', '$testimonial_hyperlink', '$testimonial_rank')";
psbert
Niestety dalej nie działa.
Myślałem że uda mi się całą pętle przypisać do zmiennej i tą zmienną wstawić do SQLa ale się nie udało, nawet nie wiem czy tak się da.

$petla = foreach ($_POST['branza'] as $branza_ )
{
echo branza_ ;
};

echo "petla";
tomm
Jeśli ma to być zapisane jako jeden rekord to zrób tak:
$wybrane .= foreach ($_POST['branza'] as $branza_ => $wybrano ) { echo $wybrano; };

Poprostu dodaj ta kropkę przed znakiem = a będzie dodawało na koncu ciągu. Wcześniej przed petlą ustaw $wybrane = '' aby było pustym ciągiem. Dodatkowo mozesz dodać echo $wybrano.' '; aby mieć spację między kolejnymi elementami.
psbert
Dzięki za podpowiedź, ale dalej coś nie tak ...

  1. <? 
  2. if ( $_GET[id] == dodaj ) 
  3.  
  4.  { 
  5.  if (!empty($_POST['firma']) && !empty($_POST['branza']) && !empty($_POST['region']) && !empty($_POST['dodana']) && 
  6. !empty($_POST['notatka']) && !empty($_POST['pelna_nazwa_firmy']))
  7.  {
  8.  require "connection.php";
  9.  connection();
  10.  }
  11.  
  12.  $wybrane = '';
  13.  
  14.  $wybrane .= foreach ($_POST['branza'] as $branza_ => $wybrano ) { echo $wybrano; };
  15.  
  16.  mysql_query ("INSERT INTO firmy SET id='', firma='$_POST[firma]' , branza='$wybrane', region='$wybrane', dodana='$_POST[dodana]', notatka='$_POST[notatka]', pelna_nazwa_firmy='$_POST[pelna_nazwa_firmy]'") or die(mysql_error());
  17.  
  18.  echo "$wybrane - Firma została pomylnie dodana! <a href=spis_firm.php>Powrót do bazy firm</a>"; 
  19.  }
  20.  
  21. else 
  22.  { 
  23.  echo "Wypełnij wszystkie pola formularza... <A HREF='javascript:history.back();'>wstecz</A>"; 
  24.  } 
  25. }
  26.  
  27. ?>


zwraca
Parse error: syntax error, unexpected T_FOREACH in /home/test/ftp/wiz/include/firma_dodana.php on line 14
golaod
A mogę wiedzieć czemu nie zrobisz tego w ten sposób ?:
  1. <?php
  2. mysql_query ("INSERT INTO firmy SET id='', firma='$_POST[firma]' , branza='".implode(' ',$_POST['branza')."', region='$wybrane', dodana='$_POST[dodana]', notatka='$_POST[notatka]', pelna_nazwa_firmy='$_POST[pelna_nazwa_firmy]'") or die(mysql_error());
  3. ?>

A przede wszystkim to bym sprawdził, czy jak rzeczywiście wybierze parę opcji to czy one się znajdą w zmiennej $_POST['branza'] (zrób np. za pomocą print_r($zmienna))
psbert
Działa, jedynie zrobiłeś błąd

branza='".implode(' ',$_POST['branza')."'
powinno być
branza='".implode(' ',$_POST['branza'])."'


cały kod, gdyby kiedyś miało się przydać to wstawiam go tu winksmiley.jpg

  1. <? 
  2. if ( $_GET[id] == dodaj ) 
  3.  
  4.  { 
  5.  if (!empty($_POST['firma']) && !empty($_POST['branza']) && !empty($_POST['region']) && !empty($_POST['dodana']) && 
  6. !empty($_POST['notatka']) && !empty($_POST['pelna_nazwa_firmy']))
  7.  {
  8.  require "connection.php";
  9.  connection();
  10.  }
  11.  
  12.  mysql_query ("INSERT INTO firmy SET id='', firma='$_POST[firma]' , branza='".implode(' ',$_POST['branza'])."', region='$wybrane', dodana='$_POST[dodana]', notatka='$_POST[notatka]', pelna_nazwa_firmy='$_POST[pelna_nazwa_firmy]'") or die(mysql_error());
  13.  
  14.  echo "$wybrane - Firma została pomylnie dodana! <a href=spis_firm.php>Powrót do bazy firm</a>"; 
  15.  }
  16.  
  17. else 
  18.  { 
  19.  echo "Wypełnij wszystkie pola formularza... <A HREF='javascript:history.back();'>wstecz</A>"; 
  20.  } 
  21. ?>
tomm
To co opisywałem wcześniej miało wyglądać
foreach ($_POST['branza'] as $branza_ => $wybrano )
$wybrane .= $wybrano.' ';
golaod
Mała literówka.
Gratulujemy rozwiązania problemu i wstawienia kodu by ktoś w przyszłości mógł z niego skorzystać.
Mod: Zamykamy zamykamy tongue.gif
@edit tomm: Jaki sens jest korzystanie z echo podczas przypisywania do zmiennej ?
tomm
Mój błąd - poprawiony w poscie powyżej ( a właściwie 2 wyżej)
psbert
Bardzo proszę o niezamykanie tego tematu, bo jeszcze będę miał zapewne pytania odnośnie odczytu tych danych i ich modyfikacji w bazie. Jak modyfikować i kasować pojedyncze dane wprowadzane przez INPUT to wiem, ale z multiple będę musiał pokombinować i zapewne zadam tu jeszcze jakieś pytania w tej sprawie.
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.