Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] foreach i dostaje array, array, array
Forum PHP.pl > Forum > Przedszkole
Poker
Witam:)
Próbuje rozbić ciąg znaków wyglądający mniej więcej tak :

Cytat
niebieski, ciemny, bielizna, kobieta, sklep, zakupy


i następnie wrzucić go do bazy w taki sposób

Kod
   ID      KEY
  1       niebieski
  1       ciemny
  1       bielizna
  1       kobieta
  1       sklep




ID - to id pliku
KEY - to słowo kluczowe z rozbitego ciągu

Robię to w taki prosty sposób:

Kod
<?php
      $keywords=$_POST['keywords'];
          
          $slowa = explode(" ", $keywords);
          $slowa = explode(",", $keywords);    
                          
          foreach($slowa AS $key) {
              mysql_query("INSERT INTO szablony_key(id, key) VALUES('$id', '$key')");
          }
      ?>


W wyniku czego do bazy dostaję coś takiego :

Kod
   ID      KEY
    1       array
  1       array
  1       array
  1       array
  1       array
  1       array



Prosty kawałek kodu a jednak mam błąd z którym nie mogę sobie poradzić, szukałem w google i na forum o podobnych błędach i nie znalazłem dobrej odpowiedzi.

Bardzo prosiłbym o pomoc i z góry dziękuje:)
jarrod
chyba jednak nie taki prosty:
  1. <?php
  2. $slowa = explode(" ", $keywords); //tworzysz tablicę
  3. $slowa = explode(",", $keywords); //nadpisujesz utworzoną wcześniej tablicę
  4. // dla tego przykładu wystarczy $slowa = explode(", ", $keywords);
  5. ?>

generalnie powinno to raczej działać bo explode tworzy jednowymiarową tablicę więc iterowanie po niej zwraca od razu wartość...
nospor
kod co tu pokazales, dla ciagu niebieski, ciemny, bielizna, kobieta, sklep, zakupy nie ma prawa generować ARRAY. Pewnie masz inaczej niż nam tu pokazujesz.

Inny blad to wykorzystujesz $id, ktorego nigdzie nie zadeklarowales

Kolejny blad: uzywasz zle bbcode. popraw
Ellington
- Masz pewnosc, ze $_POST['keywords'] przychodzi w postaci 'niebieski, ciemny, bielizna, kobieta, sklep, zakupy'
- Zrob printa na $_POST['keywords'] i sprawdz czy ma on dokladnie taka postac

Przeprowadzilem u siebie symulacje, z podstawiona zmienna $keywords = 'niebieski, ciemny, bielizna, kobieta, sklep, zakupy' jako $_POST['keywords'] i wszystkie dane wyswietliy mi sie prawidlowo.
Poker
id pochodzi z get'a tutaj nie ma możliwości błędu ale pokażę wam wszystkie sposoby jakie próbuje

Kod
<?php
   $id=$_GET['id'];
   $slowo=explode(",", 'niebieski, ciemny, bielizna, kobieta, sklep, zakupy');    
                      
       foreach($slowo AS $key) {
           mysql_query("INSERT INTO szablony_key(id, key) VALUES ('$id', '$key')");
       }
  
   ?>


Kod
<?php
    $id=$_GET['id'];
   $keywords=$_POST['keywords'];
  
  
    $slowo=explode(", ", $keywords);    
                        
        foreach($slowo AS $key) {
            mysql_query("INSERT INTO szablony_key(id, key) VALUES ('$id', '$key')");
        }
    
    ?>


Kod
<?php
   $id=$_GET['id'];
  $keywords = 'niebieski, ciemny, bielizna, kobieta, sklep, zakupy';
  
  
   $slowo=explode(", ", $keywords);    
                      
       foreach($slowo AS $key) {
           mysql_query("INSERT INTO szablony_key(id, key) VALUES ('$id', '$key')");
       }
  
   ?>



Dane z keywords są w takiej postaci jakiej pisałem .. słowo, słowo2, słowo3, słowo4

do każdego przykładu próbowałem zmiast $id wpisać 1 i również nie działa
ciągle do bazy dostaje około 30 wyników 1 array 1 array 1 array ...


PS. w nocy się nad tym męczyłem i jak pole `id` miało PRIMARY KEY dostawałem 1 wynik :

Cytat
ID KEY
1 NIEBIESKI
nospor
  1. <?php
  2. $keywords='niebieski, ciemny, bielizna, kobieta, sklep, zakupy';
  3.        
  4.         $slowa = explode(", ", $keywords);
  5.        
  6.                        
  7.         foreach($slowa AS $key) {
  8.             echo("INSERT INTO szablony_key(id, key) VALUES('$id', '$key')");
  9.         }
  10. ?>

I napisz co dostajesz.

poraz ostatni prosze o poprawne bbcode
jarrod
trochę nie zrozumiałeś o co chłopakom chodziło.
Zrób, proszę zrzut zmiennej $keywords tuż pod linią
  1. <?php
  2. $keywords=$_POST['keywords'];
  3. var_dump($keywords); //zrzut!
  4. ?>

i pokaż nam co ci wyszło :-)
Poker
Specmajstrem nie jestem więc przepraszam smile.gif


Zrobiłem i otrzymuje

Kod
string(86) "niebieski, ciemny, bielizna, kobieta, sklep, zakupy"
jarrod
a co ci daje to co zaproponował @nospor?
  1. <?php
  2. $keywords='niebieski, ciemny, bielizna, kobieta, sklep, zakupy';
  3. $slowa = explode(", ", $keywords);
  4. foreach($slowa AS $key) {
  5.    echo("INSERT INTO szablony_key(id, key) VALUES('$id', '$key')");
  6. }
  7. ?>

bo wg. mnie to powinno działać
Poker
Dostaje

Kod
INSERT INTO szablony_key(id, key) VALUES('1', 'niebieski')INSERT INTO szablony_key(id, key) VALUES('1', 'ciemny')INSERT INTO szablony_key(id, key) VALUES('1', 'bielizna')INSERT INTO szablony_key(id, key) VALUES('1', 'kobieta')INSERT INTO szablony_key(id, key) VALUES('1', 'sklep')INSERT INTO szablony_key(id, key) VALUES('1', 'zakupy')
nospor
czyli wszystko jest ok. jestes pewien ze do bazy patrzysz na wlasciwe dane? Moze patrzysz na jakies stare. Bo baza sama z siebie tekstu nie zamienia na tekst array winksmiley.jpg
Ellington
Proponuje, zebys sprawdzil wykonanie mysql_query if'em i wyswietlil mysql_error, czy to Ci sie faktycznie tam dopisuje smile.gif.
nospor
Cytat
Proponuje, zebys sprawdzil wykonanie mysql_query if'em i wyswietlil mysql_error, czy to Ci sie faktycznie tam dopisuje
Z duzym prawdopodobienstwem sypie bledem, bo id powinno byc unikalne, a u niego zawsze jest 1 winksmiley.jpg
jarrod
chyba że id nie jest UNIQUE winksmiley.jpg
nospor
Cytat
PS. w nocy się nad tym męczyłem i jak pole `id` miało PRIMARY KEY dostawałem 1 wynik :
winksmiley.jpg
Fifi209
Cytat(nospor @ 6.08.2009, 12:04:40 ) *
Z duzym prawdopodobienstwem sypie bledem, bo id powinno byc unikalne, a u niego zawsze jest 1 winksmiley.jpg


Przecież nie napisał, że ID ma jakiś indeks ani że jest polem np. auto_increment winksmiley.jpg
jarrod
@Poker
Proponuję zmienić strukturę bazy danych na:

id int(11) auto_increment,
file_id int(11),
key varchar(255)

(dodatkowe paramerty kolumn wg uznania smile.gif
zapytanie wówczas wygląda podobnie:
INSERT INTO szablony_key(file_id, key) VALUES(1, 'niebieski')
ale nie będzie błędu z indexem.
Poker
uff... udało się sam do końca nie wiem w czym był problem bo dopiero za jak zrobiłem tabele

która w nazwie nie miała "_" to się udało.

Jeśli ktoś by potrzebował

Struktura tabeli
Kod
CREATE TABLE `szabkey`(
`id` INT(11) AUTO_INCREMENT PRIMARY KEY NOT NULL,
`szabid` INT(11) NOT NULL,
`slowo` VARCHAR(50)
) ENGINE=MYISAM;


Kod
Kod
<?php
$id=$_GET['id'];
$keywords=$_POST['keywords'];

$slowa=explode(", ", $keywords);
        foreach($slowa AS $slowo){
    mysql_query("INSERT INTO szabkey(szabid, slowo) VALUES('$id', '$slowo')");
    }
?>




Wszystkim dziękuje za odpowiedź smile.gif +pomógł
jarrod
myślę, że "_" ma tu najmniejsze znaczenie. a w zasadzie w ogóle go nie ma... :-)
zmieniłeś zapytanie. teraz nie wstawiasz do kolumny id tej samej wartości gdy to pole jest unikalne (PRIMARY KEY)
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.