Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Jak mam dopisać do bazy nie usuwając pozostałych?
GoldeNx3
post
Post #1





Grupa: Zarejestrowani
Postów: 228
Pomógł: 1
Dołączył: 24.12.2010

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


Witam. W bazie danych mam pole "access" i są tam literki. Jak mogę zrobić coś takiego:

Skrypt sprawdza, czy jest literka a oraz czy jest literka b. Jeżeli obu nie ma, to do istniejących literek w bazie dopisuje te dwie, a jeżeli np a jest już w bazie, ale nie ma b, to dopisuje do istniejących tylko literkę b. Literki a i b mogą być w ciągu znaków, na początku, na końcu, w środku.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
matino
post
Post #2





Grupa: Zarejestrowani
Postów: 175
Pomógł: 30
Dołączył: 9.08.2007

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


No i w czym masz problem?
  1. if (w polu nie ma literki a)
  2. {
  3. dopisz a
  4. if (w polu nie ma literki b)
  5. {
  6. dopisz b
  7. }
  8. }

czy literki nie ma sprawdzasz za pomocą strpos - http://php.net/manual/en/function.strpos.php

Ten post edytował matino 18.04.2011, 11:47:22
Go to the top of the page
+Quote Post
GoldeNx3
post
Post #3





Grupa: Zarejestrowani
Postów: 228
Pomógł: 1
Dołączył: 24.12.2010

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


Zabłysnąłeś.

Takie rzeczy to ja wiem. Ale nie wiem jak dopisać .= czy += -.-

Zresztą, oba sposoby próbowałem i żadnym nie wyszło.

Ten post edytował GoldeNx3 18.04.2011, 12:03:46
Go to the top of the page
+Quote Post
askone
post
Post #4





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Zgadzam się matino. Sam zrobiłbym podobnie:
  • pobranie danych z bazy
  • dla każdej litery
  • sprawdzenie z wykorzystaniem strpos jej obecności w pobranym ciągu znakowym
  • jeśli jej nie ma to dodanie poprzez .=


I to wszystko wink.gif


--------------------
Kliknij jeśli moja odpowiedź Ci pomogła.
askone.pl
Go to the top of the page
+Quote Post
GoldeNx3
post
Post #5





Grupa: Zarejestrowani
Postów: 228
Pomógł: 1
Dołączył: 24.12.2010

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


Czyli na początku pobrać wszystkie dane z pola access, następnie pojedynczo pobierać czy są dane litery i jak nie ma, to dodawać?
Go to the top of the page
+Quote Post
askone
post
Post #6





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Cytat(GoldeNx3 @ 18.04.2011, 12:14:29 ) *
Czyli na początku pobrać wszystkie dane z pola access, następnie pojedynczo pobierać czy są dane litery i jak nie ma, to dodawać?


Nie wiem co rozumiesz pod pojęciem "wszystkie" - czy to jest jeden rekord czy też wiele rekordów? Jeśli jeden to procedurę przedstawiłem we wcześniejszym poście. Jeśli wiele rekordów to musisz dodać pętlę zewnętrzną iterującą po pobranych rekordach.

Aha, nie zapomnij o zapisaniu do bazy uaktualnionej wartości wink.gif

Pozdrawiam


--------------------
Kliknij jeśli moja odpowiedź Ci pomogła.
askone.pl
Go to the top of the page
+Quote Post
GoldeNx3
post
Post #7





Grupa: Zarejestrowani
Postów: 228
Pomógł: 1
Dołączył: 24.12.2010

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


Mam pola:

Nick | Access


W access są te literki. Czyli mam pobrać wszystkie, sprawdzić czy są i jak nei, to pododawać i zrobić Update bazy?
Go to the top of the page
+Quote Post
matino
post
Post #8





Grupa: Zarejestrowani
Postów: 175
Pomógł: 30
Dołączył: 9.08.2007

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


tak smile.gif

PS. Skąd mam wiedzieć jakie rzeczy wiesz, skoro nie napisałeś dokładnie jakich nie wiesz? Następnym razem dokładniej definiuj problem, to odpowiedź też będzie dokładniejsza.

Ten post edytował matino 18.04.2011, 12:34:25
Go to the top of the page
+Quote Post
GoldeNx3
post
Post #9





Grupa: Zarejestrowani
Postów: 228
Pomógł: 1
Dołączył: 24.12.2010

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


  1. $zap = mysql_query("SELECT access FROM tabela WHERE nickname = '$nick'") OR die(mysql_error());
  2. $ils = mysql_fetch_array($zap);
  3. $ileflag = $ils['access'];
  4. $b = 'b'; $s = 's'; $z = 'z';
  5.  
  6. $posb = strpos($ileflag, $b);
  7. $poss = strpos($ileflag, $s);
  8. $posz = strpos($ileflag, $z);
  9.  
  10. IF($posb == true) $ileflag .= 'b';
  11. IF($poss == true) $ileflag .= 's';
  12. IF($posz == true) $ileflag .= 'z';
  13.  
  14. $result = mysql_query("UPDATE tabela SET access = '$ileflag' WHERE nickname='$nick'") OR die(mysql_error());
  15.  
  16. echo "
  17. <div class=\"right_side\">
  18. <br><div><center><table class=\"error\">
  19. <tr><td>
  20. <center><b><font color=\"red\">Stworzono!</font></b></center>
  21. </td></tr>
  22. </table><br></center></div>
  23. </div>";



Gdy nie ma jakiejś literki, to zamienia pole na wartość 0 ; /
Go to the top of the page
+Quote Post
askone
post
Post #10





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Cytat(GoldeNx3 @ 18.04.2011, 12:35:12 ) *
  1. $zap = mysql_query("SELECT access FROM tabela WHERE nickname = '$nick'") OR die(mysql_error());
  2. $ils = mysql_fetch_array($zap);
  3. $ileflag = $ils['access'];
  4. $b = 'b'; $s = 's'; $z = 'z';
  5.  
  6. $posb = strpos($ileflag, $b);
  7. $poss = strpos($ileflag, $s);
  8. $posz = strpos($ileflag, $z);
  9.  
  10. IF($posb == true) $ileflag .= 'b';
  11. IF($poss == true) $ileflag .= 's';
  12. IF($posz == true) $ileflag .= 'z';
  13.  
  14. $result = mysql_query("UPDATE tabela SET access = '$ileflag' WHERE nickname='$nick'") OR die(mysql_error());
  15.  
  16. echo "
  17. <div class=\"right_side\">
  18. <br><div><center><table class=\"error\">
  19. <tr><td>
  20. <center><b><font color=\"red\">Stworzono!</font></b></center>
  21. </td></tr>
  22. </table><br></center></div>
  23. </div>";



Gdy nie ma jakiejś literki, to zamienia pole na wartość 0 ; /


Odnośnie Twego kodu mam kilka uwag:
  • zgodnie z Twoimi informacjami do pobranej wartości litera miałaby byc dopisywana tylko wtedy gdy jej nie ma. Dlaczego więc dopisujesz ją gdy już w pobranym ciągu znakowym jest? strpos zwraca FALSE gdy znak nie zostaje znaleziony, tak więc zmień warunek
  • osobiście zmieniłbym statyczne przypisanie liter i ich osobne testowanie na testowanie z wykorzystaniem pętli. Jak? Może coś w ten deseń:

  1. $ileflag = $ils['access'];
  2. $litery = array('a', 'b', 's');
  3.  
  4. foreach($litery as $litera)
  5. {
  6. if (! strpos($ileflag, $litera))
  7. {
  8. $ileflag .= $litera;
  9. }
  10. }
  11.  
  12. $result = mysql_query("UPDATE tabela SET access = '$ileflag' WHERE nickname='$nick'") or die(mysql_error());


Kod pisany z palca, nie testowany, ale powinien działać wink.gif


--------------------
Kliknij jeśli moja odpowiedź Ci pomogła.
askone.pl
Go to the top of the page
+Quote Post
matino
post
Post #11





Grupa: Zarejestrowani
Postów: 175
Pomógł: 30
Dołączył: 9.08.2007

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


Jedna uwaga - strpos należy sprawdzać tylko i wyłącznie przez przyrównanie do FALSE (może być sytuacja, gdzie strpos zwróci 0 zamiast FALSE)
  1. if (strpos(...) !== FALSE)

zamiast
  1. if (! strpos(...))

Go to the top of the page
+Quote Post
GoldeNx3
post
Post #12





Grupa: Zarejestrowani
Postów: 228
Pomógł: 1
Dołączył: 24.12.2010

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


No dobra, ale dodaje te litery nawet jak istnieją w danym polu. A mnie chodzi o to, że jak istnieją, to ma nie dodawać.

@Edit:

Poradziłem sobie, zamiast:

  1. if (strpos(...) !== FALSE)


dałem:

  1. if (strpos(...) === FALSE)


Ten post edytował GoldeNx3 18.04.2011, 13:07:02
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 Aktualny czas: 21.08.2025 - 12:00