Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Textarea, enter nowa linia i wrzucenia do bazy
dezerter_af
post 4.12.2011, 19:38:50
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 1.04.2011

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


Witam!

Trochę się podszkoliłem ale mam pewien problem. Otóż zrobiłem formularz w którym mam textarea. Do textarea wrzucam zawartość np. 20 słów każde w nowej linijce. I chce to przetworzyć tak aby każda linijka była dodawana osobno do bazy.

Kod za to odpowiadający wygląda tak:

  1. $white = array("\n","\r","\t",' ');
  2. $code = trim(str_replace($white, '', $code));
  3. $code = explode ( '\r\n' , $kody);
  4. $kody = $code;
  5. $kody = $_POST['code'];


A zapytanie
  1. $q = $db->sql_query('SELECT `id` FROM `phpbb_kody` WHERE `code` = "'.mysql_real_escape_string($kody).'" LIMIT 1;');
  2. $c = mysql_num_rows($q);
  3. IF($c == 0) {
  4. $db->sql_query('INSERT INTO `phpbb_kody` (`code`, `punkty`)
  5. VALUES("'.mysql_real_escape_string($kody).'", "'.$punkty.'");');
  6. }


I nie wiem jak rozwiązać problem.
Pozdrawiam!
Go to the top of the page
+Quote Post
gorden
post 4.12.2011, 20:05:38
Post #2





Grupa: Zarejestrowani
Postów: 486
Pomógł: 101
Dołączył: 27.06.2010

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


no ale chcesz każdy rekord dodać osobno, a robisz jedno zapytanie. w dodatku zawartość dodana do bazy będzie zawierać Array... linijki 3-5 co to ma być? po pierwsze explode zwraca tablicę więc $kody z 4 linii będzie zawierać Array. a linijke później aktualizujesz tą zmienną znów postem ... a w drugiej linii usuwasz w ogóle przejścia nowej linii więc jak ma się dodać do bazy każdy osobno?

  1. foreach(explode("\n", $_POST['textarea']) as $n=>$v) {
  2. mysql_query("INSERT INTO tabela (wartosc) VALUES ('$v')");
  3. }


Go to the top of the page
+Quote Post
dezerter_af
post 4.12.2011, 20:36:04
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 1.04.2011

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


Dobra rzeczywiście namieszałem : )

W formularzu są dwa pola jedno textarea drugie input. W input mam ilosc punktow a w textarea kody.

Jeżeli możesz prosze nie zwracaj uwagi na pierwszy post. Za dużo nie zrozumiełam z tego co napisałes ale poprawiłem kilka rzeczy.

Wszystko to jest w panelu pod phpbb3 więc zmieniłem to tak:

  1. $error = array();
  2. if(!empty($_POST['points']) && !empty($_POST['points']))
  3. {
  4. $code = $_POST['code'];
  5. $code = (explode( "\r\n", $code) as $c=>$v)
  6. $punkty = trim($_POST['points']);
  7. if(!is_numeric($punkty))
  8. {
  9. $message = $user->lang['LOG_FG_CODE_FAILED'].$punkty;
  10. trigger_error($message . adm_back_link($this->u_action), E_USER_WARNING);
  11. }
  12. $q = $db->sql_query('SELECT `id` FROM `phpbb_kody` WHERE `code` = "'.mysql_real_escape_string($code).'" LIMIT 1;');
  13. $c = mysql_num_rows($q);
  14. if($c == 0) {
  15. $db->sql_query('INSERT INTO `phpbb_kody` (`code`, `punkty`)
  16. VALUES("'.mysql_real_escape_string($code).'", "'.$punkty.'");');
  17. }
  18. $message = $user->lang['LOG_FG_CODE_ADDED'];
  19. $log = 'LOG_FG_CODE_ADDED';
  20. add_log('admin', 'LOG_' . $log);
  21. trigger_error($message . adm_back_link($this->u_action));
  22. }


I teraz stoję bo podcas wysłania formularza sypie :

  1. Parse error: syntax error, unexpected T_AS in G:\localhost\nowe\includes\acp\acp_dodatek.php on line 31

Go to the top of the page
+Quote Post
gorden
post 4.12.2011, 20:40:26
Post #4





Grupa: Zarejestrowani
Postów: 486
Pomógł: 101
Dołączył: 27.06.2010

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


foreach przerobiłeś to co Ci dałem na coś, co nie ma prawa istnieć a w dodatku nie zerknąłeś do żadnego manuala ani nic. poczytaj o foreach, o pętlach i tablicach ogólnie też.
explode podzieli string na części do tablicy. każdy element tablicy będzie zawierać oddzielne linie zawartości inputa. foreach ma za zadanie oblecieć przez każdy z tych elementów i dodać je do bazy.
Go to the top of the page
+Quote Post
dezerter_af
post 4.12.2011, 23:11:06
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 1.04.2011

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


czytam cały czas vademecum i przed chwilą właśnie sprawdziłem manual. Ale mimo, ze mam już taki kod to nie potrafię tego przerobić tak aby dodawało. Każda próba wykoania kończy się fiaskiem.


//Edit:

  1. $code = $_POST['code'];
  2. $punkty = trim($_POST['points']);
  3. if(!is_numeric($punkty))
  4. {
  5. $message = $user->lang['LOG_FG_CODE_FAILED'].$punkty;
  6. trigger_error($message . adm_back_link($this->u_action), E_USER_WARNING);
  7. }
  8.  
  9. foreach(explode("\n", $code) as $n=>$v) {
  10. mysql_query("INSERT INTO phpbb_kody (code) VALUES ('$v')");
  11. }


I do bazy teraz nic się nie dodaje.
Zapytanie do stworzenia bazy wygląda tak:
  1. CREATE TABLE IF NOT EXISTS `phpbb_kody` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `code` varchar(20) NOT NULL,
  4. `punkty` int(20) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;


Jestem bezradny : (

  1. $test=explode("\r\n",$_POST['code']);
  2. foreach($test as $keys)
  3. {
  4. $q = $db->sql_query('SELECT id FROM phpbb_kody WHERE code = "'.$keys.'" LIMIT 1000;') or die(mysql_error());
  5. $c = mysql_num_rows($q);
  6. if($c == 0) {
  7. $db->sql_query('INSERT INTO `phpbb_kody` (`code`, `punkty`)
  8. VALUES("'.$keys.'", "'.$punkty.'");');
  9. }
  10. }


PS. problem tkwił w DBAL smile.gif
Ok już wszystko prawie działa zostały mi tylko dwie rzeczy:
1. Jeżeli jest pusta linia to, żeby jej nie dodawało do bazy.
2. Mimo, że kody są dodawane to po kliknięciu wyślij sypie
  1. [phpBB Debug] PHP Warning: in file /includes/acp/acp_dodatek.php on line 41: mysql_num_rows() expects parameter 1 to be resource, object given


Linia 41:
  1. $c = mysql_num_rows($q);


Proszę o jakieś porady z tym już sobie sam nie poradzę .

Pozdrawiam

Ten post edytował dezerter_af 4.12.2011, 20:54:18
Go to the top of the page
+Quote Post
nospor
post 5.12.2011, 08:45:06
Post #6





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Komunikat błedu przecież wyraźnie pisze: oczekuje resource, a ty mu zapodajesz do mysql_num_rows obiekt.

resource otrzymujesz z mysql_query() zaś Twoje $db->sql_query zwraca obiekt. Czytaj komunikaty. One po to właśnie są.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Uriziel01
post 5.12.2011, 09:42:25
Post #7





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


Ten kod 'działa' tylko przez przypadkowa konwersję typów NULL == 0 == false która w PHP jest prawdziwa. co zwraca twoja metoda 'sql_query' ? Jeżeli chodzi o pomijanie pustych wartości do bazy to :
  1. if($c == 0 AND !empty($keys)) {
  2. $db->sql_query('INSERT INTO `phpbb_kody` (`code`, `punkty`)
  3. VALUES("'.$keys.'", "'.$punkty.'");');
  4. }


Swoja droga dlaczego 'keys' a nie 'key' ? Przecież foreach nie zwraca ci tablicy.
Poza tym gdzie masz jakiekolwiek przypisanie wartości dla 'punkty' ? Czy poprostu nie widać tego tylko w kodzie który tutaj wkleiłes ?

Ten post edytował Uriziel01 5.12.2011, 09:43:12
Go to the top of the page
+Quote Post
nospor
post 5.12.2011, 09:46:28
Post #8





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Cytat
co zwraca twoja metoda 'sql_query'
No obiekt, przecież masz to w komunikacie błędu


Cytat
Poza tym gdzie masz jakiekolwiek przypisanie wartości dla 'punkty' ? Czy poprostu nie widać tego tylko w kodzie który tutaj wkleiłes ?

$punkty = trim($_POST['points']);


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dezerter_af
post 5.12.2011, 10:21:01
Post #9





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 1.04.2011

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


Dziękuje bardzo za odpowiedzi. Teraz jestem w pracy ale mimo to nic nie rozumiem. Jeżeli moglibyście bardziej szczegółowo mi pomóc.
Mój kod aktualnie wygląda tak:

  1. if ($submit)
  2. {
  3. $error = array();
  4. if(!empty($_POST['points']) && !empty($_POST['points']))
  5. {
  6. $punkty = trim($_POST['points']);
  7. if(!is_numeric($punkty))
  8. {
  9. $message = $user->lang['LOG_FG_CODE_FAILED'].$punkty;
  10. trigger_error($message . adm_back_link($this->u_action), E_USER_WARNING);
  11. }
  12.  
  13. $test=explode("\r\n",$_POST['code']);
  14. foreach($test as $keys)
  15. {
  16. $q = $db->sql_query('SELECT id FROM phpbb_kody WHERE code = "'.$keys.'" LIMIT 1;') ;
  17. $c = mysql_num_rows($q);
  18. if($c == 0) {
  19. $db->sql_query('INSERT INTO phpbb_kody (code, punkty) VALUES("'.$keys.'", "'.$punkty.'");');
  20. }
  21. }
  22. /*
  23. $q = $db->sql_query('SELECT `id` FROM `phpbb_kody` WHERE `code` = "'.mysql_real_escape_string($code).'" LIMIT 1;');
  24. $c = mysql_num_rows($q);
  25. if($c == 0) {
  26. $db->sql_query('INSERT INTO `phpbb_kody` (`code`, `punkty`)
  27. VALUES("'.mysql_real_escape_string($code).'", "'.$punkty.'");');
  28. }
  29. 8*/
  30. $message = $user->lang['LOG_FG_CODE_ADDED'];
  31. $log = 'LOG_FG_CODE_ADDED';
  32. add_log('admin', 'LOG_' . $log);
  33. trigger_error($message . adm_back_link($this->u_action));
  34. }
  35. else
  36. {
  37. $message = $user->lang['LOG_FG_CODE_FAILED'].'3';
  38. trigger_error($message . adm_back_link($this->u_action), E_USER_WARNING);
  39. }
  40. }


Elegancko dodaje do bazy wszystko tak jak być powinno ale... No ten błąd... Jak zamienić obiekt na resource ?

Bardzo proszę o pomoc ponieważ chciałbym jeszcze w tym tygodniu wysłać całego moda na phpbb.com i phpbb3.pl bo dużo osób tego poszkuje.

Pozdrawiam.
Go to the top of the page
+Quote Post
nospor
post 5.12.2011, 10:29:58
Post #10





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Cytat
. Jak zamienić obiekt na resource ?
Nie da się.

zamiast używać mysql_num_rows() to skorzystaj z klasy $db, której używasz. Skoro ma ona metodę sql_query() to zapewne ma również metodę, która zwraca liczbę przetworzonych rekordów. Poszukaj w tej klasie.

Cytat
Teraz jestem w pracy ale mimo to nic nie rozumiem.
Hmm, skoro Twoja praca ma wpływ na "rozumienie", to z ciekawości zapytam: gdzie pracujesz? Co robisz?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dezerter_af
post 5.12.2011, 10:52:51
Post #11





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 1.04.2011

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


Jestem account managerem w dość dużej firmie i tylko w przerwach mogę tutaj zajrzeć. A tak to cały czas ciężka praca, prawie jak kamieniołom : D
Go to the top of the page
+Quote Post
nospor
post 5.12.2011, 10:54:25
Post #12





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Cytat
account managerem
Aż musiałem w google zajrzeć - pierwszy raz słyszę tę nazwę. Moja ciekawość zaspokojona smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dezerter_af
post 5.12.2011, 19:18:15
Post #13





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 1.04.2011

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


W pracy mam jeszcze programistę PHP może uda mi się go wykorzystać wink.gif

A jak nie to ok. 17 jak będę miał jeszce siłę to napiszę czy coś zdziałałem. Wszystko jest dla phpbb3 ale jeszzcec nie wiem gdzie tam szukać klas : D

Problem rozwiązany
  1. $c = $db->sql_affectedrows($q);
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 1.05.2025 - 04:49