Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Jak mam dopisać do bazy nie usuwając pozostałych?
Forum PHP.pl > Forum > Przedszkole
GoldeNx3
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.
matino
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
GoldeNx3
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.
askone
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
GoldeNx3
Czyli na początku pobrać wszystkie dane z pola access, następnie pojedynczo pobierać czy są dane litery i jak nie ma, to dodawać?
askone
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
GoldeNx3
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?
matino
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.
GoldeNx3
  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 ; /
askone
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
matino
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(...))

GoldeNx3
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)
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.