Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]zapytanie zależne od wartości zmiennej
Ulysess
post 20.05.2010, 21:15:04
Post #1





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


dobry wieczór , potrzebuje napisać zapytanie update ale mam pewien problem..
mam zmienne np:

$zmienna[1]
$zmienna[2]
$zmienna[3]
$zmienna[4]
$zmienna[5]

i chodzi o to że jeśli zmienna[1] ma jakąś wartość to jest update np
  1. `pole1` = '".mysql_real_escape_string($zmienna[1] + 200)."'


owszem mógłbym zrobić 5 zapytań update ale to chyba nie ma sensu i wydaje mi się że można to zrobić w 1 pytanie tylko jak :/
Go to the top of the page
+Quote Post
pedro84
post 20.05.2010, 21:18:10
Post #2





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Sprawdzasz ifem wartość zmiennej i jeśli ma określoną wartość to dopisujesz do zapytania (AND).


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
tehaha
post 20.05.2010, 21:18:11
Post #3





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


  1. for($i=1;$i<=5;++$i)
  2. {
  3. $pole= mysql_real_escape_string($zmienna[$i] + 200);
  4.  
  5. $sql = "UPDATE tabela SET pole = $pole";
  6. }
Go to the top of the page
+Quote Post
Ulysess
post 20.05.2010, 21:23:24
Post #4





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


tehaha twoje rozwiazanie ma powodować ze po prostu w pętli 5x się wykona questionmark.gif nie o to mi chodziło . pedro a mógłbyś mi jaśniej wyjaśnić , pokazać ?
Go to the top of the page
+Quote Post
tehaha
post 20.05.2010, 21:29:08
Post #5





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


wydawało mi się, że chcesz dla każdej z tych zmiennych wykonać jakiś update, jeśli nie to napisz jaśniej

Ten post edytował tehaha 20.05.2010, 21:29:20
Go to the top of the page
+Quote Post
croc
post 20.05.2010, 21:32:41
Post #6





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


  1. $updates = array();
  2. foreach($zmienna as $key => $value) {
  3. if($value != '') {
  4. array_push($updates, 'pole' . $key . ' = \'' . mysql_real_escape_string($value) . '\'');
  5. }
  6. }
  7. if(!empty($updates)) {
  8. mysql_query('UPDATE tabela SET ' . implode(', ', $updates));
  9. }
Go to the top of the page
+Quote Post
Ulysess
post 20.05.2010, 21:36:57
Post #7





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


chodzi o to że np jeśli zmienna[] nie jest pusta to do zapytania jest dodawane `pole1` = '".mysql_real_escape_string($zmienna[1])."'

  1. $zapytanie['aktualizacja'] = "UPDATE `tabela` SET `pole1` = '".mysql_real_escape_string($zmienna[1])."',`pole2` = '".mysql_real_escape_string($zmienna[2])."',`pole3` = '".mysql_real_escape_string($zmienna[3])."',`pole4` = '".mysql_real_escape_string($zmienna[4])."',`pole5` = '".mysql_real_escape_string($zmienna[5])."', WHERE `id`='".$id."'";




croc to co napisałeś to chyba to o co mi chodziłe lecz niestety mój mózg nie jest w stanie tego przetworzyć i zrozumie :| :[
Go to the top of the page
+Quote Post
croc
post 20.05.2010, 21:40:46
Post #8





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Tak, to jest dokładnie to co chciałeś smile.gif

Każda fraza do UPDATE zawierająca "pole = wartość" (oczywiście odpowiednio zabezpieczone) dodaje się do tablicy. Jeżeli ta tablica po zebraniu informacji jest niepusta, to odpala się zapytanie, zespalając elementy tej tablicy i oddzielając je przecinkiem. Elegancko.
Go to the top of the page
+Quote Post
Ulysess
post 20.05.2010, 21:44:41
Post #9





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


żeby sprawdzić czy to działa zrobiłem:

  1. $updates = array(1,2,3,4,5);
  2. foreach($zmienna as $key => $value) {
  3. if($value != '') {
  4. array_push($updates, 'pole' . $key . ' = \'' . mysql_real_escape_string($value) . '\'');
  5. }
  6. }
  7. if(!empty($updates)) {
  8. $cos = mysql_query('UPDATE tabela SET ' . implode(', ', $updates));
  9. }
  10.  
  11. echo $cos;


chciałem zobaczyć jak wygląda zapytanie ale nic mi nie echuje wiec prawdopodobnie nie mam pojęcia co robie ... :/
Go to the top of the page
+Quote Post
croc
post 20.05.2010, 22:01:02
Post #10





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Faktycznie, masz tu dwa błędy. Po kolei:
  1. do $updates nic nie wrzucasz, twoje wartości są wg kodu w tablicy $zmienna, tak jak podałeś na samym początku w temacie
  2. nie możesz wypisać wartości mysql_query(. Zrób test z echo z samym zapytaniem, tj. 'UPDATE tabela SET ' . implode(', ', $updates)
Go to the top of the page
+Quote Post
Ulysess
post 20.05.2010, 22:12:59
Post #11





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


tzn jak mam wyświetlić questionmark.gif :| :/ zapomniałeś że w update trzeba jeszcze warunek dodać ;p

tak ?
  1. $updates = array();
  2. foreach($zmienna as $key => $value)
  3. {
  4.  
  5. if($value != '')
  6. {
  7. array_push($updates, 'pole' . $key . ' = \'' . mysql_real_escape_string($value) . '\'');
  8. }
  9.  
  10. }
  11.  
  12. if(!empty($updates))
  13. {
  14. mysql_query('UPDATE `char` SET ' . implode(', ', $updates)).'WHERE `id_char`=\'".$id_user."\'';
  15. }
Go to the top of the page
+Quote Post
croc
post 20.05.2010, 22:14:55
Post #12





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


No do zapytania możesz sobie dopisać co chcesz tongue.gif Ale pokażę ci kod z uwzględnieniem tego wszystkiego i jeszcze test na końcu. Zapiszemy treść zapytania w osobnej zmiennej.

  1. // daję tu ID, bo nie wiem skąd je bierzesz
  2. $id = 3;
  3.  
  4. // przykładowa tablica wejściowa
  5. $zmienna[0] = 'Koralgol';
  6. $zmienna[1] = 'Miś Uszatek';
  7. $zmienna[2] = '';
  8. $zmienna[3] = 'Muminek';
  9.  
  10. $updates = array();
  11. foreach($zmienna as $key => $value) {
  12. if($value != '') {
  13. array_push($updates, 'pole' . $key . ' = \'' . mysql_real_escape_string($value) . '\'');
  14. }
  15. }
  16. if(!empty($updates)) {
  17. $sql = 'UPDATE tabela SET ' . implode(', ', $updates) . ' WHERE id = ' . intval($id);
  18. // zakomentujemy zapytanie, żebyć sobie przetestował
  19. // mysql_query($sql);
  20. echo $sql;
  21. }
Go to the top of the page
+Quote Post
Ulysess
post 20.05.2010, 22:18:07
Post #13





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


ok jako tako rozumiem , dzieki tylko jeśli możesz powiedz mi jak zrobić żeby dla każdej zmiennej wstawiał inna nazwe pola..
Go to the top of the page
+Quote Post
croc
post 20.05.2010, 22:23:06
Post #14





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


No właśnie, miałem nadzieję, że o to zapytasz smile.gif Zrób tak:

  1. // daję tu ID, bo nie wiem skąd je bierzesz
  2. $id = 3;
  3.  
  4. // przykładowa tablica wejściowa
  5. $zmienna['imie_matki'] = 'Koralgol';
  6. $zmienna['imie_ojca'] = 'Miś Uszatek';
  7. $zmienna['imie_brata'] = '';
  8. $zmienna['pseudonim'] = 'Muminek';
  9.  
  10. $updates = array();
  11. foreach($zmienna as $field => $value) {
  12. if($value != '') {
  13. array_push($updates, $field . ' = \'' . mysql_real_escape_string($value) . '\'');
  14. }
  15. }
  16. if(!empty($updates)) {
  17. $sql = 'UPDATE tabela SET ' . implode(', ', $updates) . ' WHERE id = ' . intval($id);
  18. // zakomentujemy zapytanie, żebyć sobie przetestował
  19. // mysql_query($sql);
  20. echo $sql;
  21. }


Teraz nazwy pól podajesz jako klucze w $zmienna[]. guitar.gif
Go to the top of the page
+Quote Post
Ulysess
post 20.05.2010, 22:25:57
Post #15





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


wielkie dzięki , działa tak jak właśnie mi chodziło , szkoda że mogę dać tylko 1 pomógł bo zasłużyłeś na 100 smile.gif
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: 12.06.2025 - 17:53