Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zapytanie zależne od wartości zmiennej
Forum PHP.pl > Forum > Przedszkole
Ulysess
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 :/
pedro84
Sprawdzasz ifem wartość zmiennej i jeśli ma określoną wartość to dopisujesz do zapytania (AND).
tehaha
  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. }
Ulysess
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ć ?
tehaha
wydawało mi się, że chcesz dla każdej z tych zmiennych wykonać jakiś update, jeśli nie to napisz jaśniej
croc
  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. }
Ulysess
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 :| :[
croc
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.
Ulysess
ż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 ... :/
croc
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)
Ulysess
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. }
croc
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. }
Ulysess
ok jako tako rozumiem , dzieki tylko jeśli możesz powiedz mi jak zrobić żeby dla każdej zmiennej wstawiał inna nazwe pola..
croc
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
Ulysess
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
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.