Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] foreach i dostaje array, array, array
Poker
post
Post #1





Grupa: Zarejestrowani
Postów: 205
Pomógł: 3
Dołączył: 20.04.2009
Skąd: Jaworzno

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


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:)

Ten post edytował Poker 6.08.2009, 11:37:54
Go to the top of the page
+Quote Post
jarrod
post
Post #2





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

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


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ść...
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Ellington
post
Post #4





Grupa: Zarejestrowani
Postów: 76
Pomógł: 13
Dołączył: 24.03.2009

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


- 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.

Ten post edytował Ellington 6.08.2009, 11:39:42
Go to the top of the page
+Quote Post
Poker
post
Post #5





Grupa: Zarejestrowani
Postów: 205
Pomógł: 3
Dołączył: 20.04.2009
Skąd: Jaworzno

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


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


Ten post edytował Poker 6.08.2009, 11:50:29
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




  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
Go to the top of the page
+Quote Post
jarrod
post
Post #7





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

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


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 :-)
Go to the top of the page
+Quote Post
Poker
post
Post #8





Grupa: Zarejestrowani
Postów: 205
Pomógł: 3
Dołączył: 20.04.2009
Skąd: Jaworzno

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


Specmajstrem nie jestem więc przepraszam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


Zrobiłem i otrzymuje

Kod
string(86) "niebieski, ciemny, bielizna, kobieta, sklep, zakupy"


Ten post edytował Poker 6.08.2009, 11:54:52
Go to the top of the page
+Quote Post
jarrod
post
Post #9





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

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


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ć
Go to the top of the page
+Quote Post
Poker
post
Post #10





Grupa: Zarejestrowani
Postów: 205
Pomógł: 3
Dołączył: 20.04.2009
Skąd: Jaworzno

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


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')
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Ellington
post
Post #12





Grupa: Zarejestrowani
Postów: 76
Pomógł: 13
Dołączył: 24.03.2009

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


Proponuje, zebys sprawdzil wykonanie mysql_query if'em i wyswietlil mysql_error, czy to Ci sie faktycznie tam dopisuje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
jarrod
post
Post #14





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

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


chyba że id nie jest UNIQUE (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
PS. w nocy się nad tym męczyłem i jak pole `id` miało PRIMARY KEY dostawałem 1 wynik :
(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Fifi209
post
Post #16





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Cytat(nospor @ 6.08.2009, 12:04:40 ) *
Z duzym prawdopodobienstwem sypie bledem, bo id powinno byc unikalne, a u niego zawsze jest 1 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)


Przecież nie napisał, że ID ma jakiś indeks ani że jest polem np. auto_increment (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
jarrod
post
Post #17





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

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


@Poker
Proponuję zmienić strukturę bazy danych na:

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

(dodatkowe paramerty kolumn wg uznania (IMG:http://forum.php.pl/style_emoticons/default/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.

Ten post edytował jarrod 6.08.2009, 12:14:09
Go to the top of the page
+Quote Post
Poker
post
Post #18





Grupa: Zarejestrowani
Postów: 205
Pomógł: 3
Dołączył: 20.04.2009
Skąd: Jaworzno

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


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ź (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) +pomógł

Ten post edytował Poker 6.08.2009, 12:29:10
Go to the top of the page
+Quote Post
jarrod
post
Post #19





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

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


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)
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: 27.09.2025 - 02:09