Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] Rozbijanie tekstu po linii
--Damian--
post
Post #1





Goście







Cześć. Jaką funkcję mogę wykorzystać aby rozbić tekst, chodzi mi o coś takiego:

Mam załóżmy:
CODE
ASD-ASD-ASD-ASD-ASD-ASD
ASD-ASD-ASD-ASD-ASD-ASD
ASD-ASD-ASD-ASD-ASD-ASD
ASD-ASD-ASD-ASD-ASD-ASD
ASD-ASD-ASD-ASD-ASD-ASD
ASD-ASD-ASD-ASD-ASD-ASD
ASD-ASD-ASD-ASD-ASD-ASD
ASD-ASD-ASD-ASD-ASD-ASD
ASD-ASD-ASD-ASD-ASD-ASD


Chodzi o to, żeby z każdej lini wyciągnać te
CODE
ASD-ASD-ASD-ASD-ASD-ASD
i osobno każde dodać do bazy.
Go to the top of the page
+Quote Post
--Damian--
post
Post #2





Goście







Dobra, napisałem coś takiego:

  1. <?php
  2. if(isset($_POST['submit']))
  3. {
  4. @mysql_connect("localhost", "root", "");
  5. @mysql_select_db("test");
  6. $dane = $_POST['asd'];
  7. $ex = explode("\n", $dane);
  8. foreach ($ex as $key=>$value)
  9. {
  10. mysql_query("INSERT INTO `klucze` (`klucz`) VALUES (".$value.")");
  11. echo "Klucz: ".$value." został dodany do bazy danych.<br />";
  12. }
  13.  
  14. }
  15. ?>
  16. <html>
  17. <form action="test.php" method="post">
  18. <textarea rows="20" cols="100" class="auto" name="asd"></textarea>
  19. <input type="submit" name="submit" value="dalej" />
  20. </form>
  21. </html>


I teraz problem polega na tym, że po dodaniu wszystko ładnie wyświetla się, osobno klucze w każdej lini, ale do bazy mi się dodaje tylko: "-10702
", dałem pole typu TEXT. Dodanie z poziomu phpmyadmin działa bezproblemowo..
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Pominąłeś apostrofy w zapytaniu. Powinno być:
  1. mysql_query('INSERT INTO `klucze` (`klucz`) VALUES (\'' . mysql_real_escape_string($value) . '\')');

Pozwoliłem sobie na małe posprzątanie Twojego kodu.

I mała rada: nie używaj "\n", tylko PHP_EOL. Znak nowej linii różni się między różnymi systemami.

Ten post edytował SmokAnalog 14.07.2013, 13:53:19
Go to the top of the page
+Quote Post
-Gość-
post
Post #4





Goście







Ok, dziękuję, działa.
Teraz pytanko jak pozbyć się pustych linii, bo mam np:
Cytat
K9B98-CD833-45896-98569-8D45F
K9B98-CD833-45896-98569-8D45F

K9B98-CD833-45896-98569-8D45F
K9B98-CD833-45896-98569-8D45F



i pustą linie też dodaje do bazy.
Go to the top of the page
+Quote Post
mch.frnc
post
Post #5





Grupa: Zarejestrowani
Postów: 73
Pomógł: 4
Dołączył: 15.08.2008

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


zastosuj trim() na
  1. $dane
Go to the top of the page
+Quote Post
--Damian--
post
Post #6





Goście







Dalej to samo
Go to the top of the page
+Quote Post
lobopol
post
Post #7





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


  1. preg_match_all('/^.+$/im', $tutajzawartoscdoprzeparsowania, $result);
  2. print_r($result);
Go to the top of the page
+Quote Post
--Damian--
post
Post #8





Goście







Dałem tak:

  1. $dane = preg_match_all('/^.+$/im', $_POST['asd'], $dane);


i dalej nic (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
lobopol
post
Post #9





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


zrób to co ja i zobacz wynik podmień sobie tylko zmienną
Go to the top of the page
+Quote Post
--Damian--
post
Post #10





Goście







Jest ok:

Cytat
Array ( [0] => Array ( [0] => K9B98-CD833-45896-98569-8D45F [1] => K9B98-CD833-45896-98569-8D45F [2] => [3] => K9B98-CD833-45896-98569-8D45F [4] => K9B98-CD833-45896-98569-8D45F ) )


Teraz jak to połączyć z explode, bo daję:

  1. $ex = explode(PHP_EOL, $result)


to wywala błąd:

Cytat
Warning: explode() expects parameter 2 to be string, array given
Go to the top of the page
+Quote Post
--Damian--
post
Post #11





Goście







Nie, wybaczcie - nie jest dobrze. Dam przykładowo:

Cytat
asd1









asd2


to wyglada to tak:

Cytat
Array ( [0] => Array ( [0] => asd1 [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => [10] => asd2 ) )
Go to the top of the page
+Quote Post
lobopol
post
Post #12





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


a na diabła ci explode, masz tablicę wynikową przecież ją sobie przeiteruj. w zasadzie pregmatch powinien wyglądać tak:
  1. preg_match_all('/^(.+)$/im', $zawartosc, $result);
  2. print_r($result);
Go to the top of the page
+Quote Post
--Damian--
post
Post #13





Goście







Tak czy siak jest lipa, bo nie usuwa pustych linii tylko ładuje je jako pustą wartość do tablicy.
Go to the top of the page
+Quote Post
lobopol
post
Post #14





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


To co dałem działa...
Go to the top of the page
+Quote Post
--Damian--
post
Post #15





Goście







Mam:

  1. $dane = $_POST['asd'];
  2. preg_match_all('/^(.+)$/im', $dane, $result);
  3. print_r($result);


Skoro wpisuję:

Cytat
asd






asd2


i zamiast dać:

Cytat
Array ( [0] => Array ( [0] => asd [1] => asd2 ) [1] => Array ( [0] => asd [1] => asd2 ) )


daje:

Cytat
Array ( [0] => Array ( [0] => asd [1] => [2] => [3] => [4] => [5] => [6] => [7] => asd2 ) [1] => Array ( [0] => asd [1] => [2] => [3] => [4] => [5] => [6] => [7] => asd2 ) )


to chyba coś nie działa
Go to the top of the page
+Quote Post
lobopol
post
Post #16





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Sprawdziłem lokalnie zwraca:
Kod
Array
(
    [0] => Array
        (
            [0] => asd
            [1] => asd2
        )

    [1] => Array
        (
            [0] => asd
            [1] => asd2
        )

)

jeżeli dasz coś ze spacjami w środku to może dać puste linie inaczej nie
Go to the top of the page
+Quote Post
--Damian--
post
Post #17





Goście







To nie wiem jak to możliwe, bo u mnie zwraca to co wyżej napisałem
Go to the top of the page
+Quote Post
lobopol
post
Post #18





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Bo wstawiasz jakieś spacje zapewne podmień wyrażenie regularne na ^([a-z1-9-]+)$
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #19





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Ale kombinujecie. Wywalić puste linie najprościej z array_filter.
Go to the top of the page
+Quote Post
--Damian--
post
Post #20





Goście







Warning: preg_match_all(): No ending delimiter '/' found
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 23.08.2025 - 01:24