Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] podmiana wpisów
fredzio90
post
Post #1





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


Mam problem z poniższym kodem, niewiem jak mogę usunąć wpis wybierany pod zmienną: $wyb2

  1. <?php
  2. function overwrite() {
  3. global $rank_dj_tbl, $id;
  4.  
  5. $wyb1 = mysql_query("SELECT * FROM $rank_dj_tbl WHERE id='$id'"); //Nadesłany
  6. $a1 = mysql_fetch_array($wyb1);
  7. $ps = $a1['title'];
  8.  
  9. $wyb2 = mysql_query("SELECT * FROM $rank_dj_tbl WHERE title='$ps'"); //który wpis ma być podmieniony
  10. $a2 = mysql_fetch_array($wyb2);
  11.  
  12. // Wykonanie zapytań
  13.  
  14. $wykonaj = mysql_query("UPDATE $rank_dj_tbl SET dodal='{$a1['dodal']}', title='$ps', imie='{$a1['imie']}', nazwisko='{$a1['nazwisko']}', hobby='{$a1['hobby']}', opis='{$a1['opis']}', zdjecie='{$a1['zdjecie']}', www='{$a1['www']}', typ='ok', odslony='{$a2['odslony']}', il_glosow='{$a2['il_glosow']}' WHERE title='$ps'") or die(mysql_error());
  15.  
  16. mysql_query("DELETE FROM $rank_dj_tbl WHERE title='$ps'") or die(mysql_error());
  17.  
  18. }
  19. ?>


poprostu usuwac zbędny wpis...

ponieważ jest nie potrzebny już

Ten post edytował fredzio90 29.06.2007, 17:47:10
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
Lee
post
Post #2





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

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


Skoro ten wpis zmieniasz, a jedynie zapamiętywałeś go w zmiennej no to on już nie istnieje (stary wpis). Tak mi się wydaje...


--------------------
Nie pomagam w sprawach php na GG i PW od tego jest forum!
Go to the top of the page
+Quote Post
fredzio90
post
Post #3





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


przepraszam, mże nie pwoiedziałem.. ten kod co dałem działa oki, poaz tą ostatnią linijką:

  1. <?php
  2. mysql_query("DELETE FROM $rank_dj_tbl WHERE title='$ps'") or die(mysql_error());
  3. ?>


ten kodzik usuwa mi ten zaaktualizowany wpis, i ten który prubowałem aktualizować..... a niesttey nic nie "wygasa" bo ten wpis jest w bazie... i musze go jakoś automatycznie usunąć, zbędny wpis ( stary )

albo może macie jakiś sposób, aby jedną funmckją poprostu podmienić jeden wpis z drugim, zachowując nr ID... questionmark.gif i 2 pola tak jak były
Go to the top of the page
+Quote Post
flv
post
Post #4





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 29.06.2007

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


Za ten temat należy ci się literacka nagroda nobla, czytam to po raz 5 i dalej nie moge zrozumieć o co ci właściwie chodzi..

Cytat
albo może macie jakiś sposób, aby jedną funmckją poprostu podmienić jeden wpis z drugim, zachowując nr ID... questionmark.gif i 2 pola tak jak były

UPDATE?

Spróbuj też podmieniać poprzez REPLACE INTO, ale tak właściwie nie wiem czemu nie możesz użyc UPDATE?

Ten post edytował flv 29.06.2007, 23:59:10
Go to the top of the page
+Quote Post
fredzio90
post
Post #5





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


OMG. Inaczej, mam 1 Tabele o nazwie dajmy na to ranking_dj
wygląda ona tak:

ID | PSEUDO | DATA_UR | WWW | TYP

Normalnie wpisy, które są pokazywane na stronie głównej, w polu typ mają wartość == OK
Ja, dodałem opcję dzięki której możesz UZUPEŁNIĆ OPIS danego DJ-a, lecz podczas dodawania tego formularza do bazy, zapisywana wartość w polu TYP == OPP

i teraz, mam 2 wpisy, jeden mniej rozbudowany, drugi bardziej.. w polu PSEUDO MAJĄ TAKĄ SAMĄ WARTOŚĆ, w POLACH TYP, mamy 2 różne awrtośći, JEDEN == OK, DRUGI == OPP, i teraz, chciałbym aby ten wpis, który został jakby "Uzupełniony" tak naprawde dodany do bazy, zamienił się rolami z tym którego prubuję zamienić ( z tym mniej rozbudowanym ). I właśnie dodałem tamten kod, aby pokazać że błąd w tamtym zapytaniu widnieje w ostatniej linijce, która usuwa 2 wpisy, ten mniej rozbudowany, i ten bardziej... a ja chcę USUNĄĆ tylko ten MNIEJ ROZBUDOWANY

Ten post edytował fredzio90 30.06.2007, 11:08:55
Go to the top of the page
+Quote Post
Kicok
post
Post #6





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Brednie jakieś wygadujesz smile.gif Zapytanie UPDATE nie ma prawa dodać ci nowego wiersza do tabeli, a jedynie może zamienić już istniejący. Dla testów stwórz sobie taką tabelkę:
Kod
+----+-------+
| id | tekst |
+----+-------+
| 1  |  aaa  |
| 2  |  aaa  |
| 3  |  aaa  |
| 4  |  aaa  |

a następnie wykonaj zapytanie:
  1. UPDATE tabela SET tekst = 'bbb' WHERE id = 3


Sprawdź teraz, czy wiersz o ID = 3 jest zdublowany ;]


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
fredzio90
post
Post #7





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


ale nie zrozumiałęś mnie, chodzi mi że będą 2 takie same wpisy o PRAWIE identycznej treści exclamation.gif
Go to the top of the page
+Quote Post
Kicok
post
Post #8





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Nie, to ty mnie nie zrozumiałeś. UPDATE nie zrobi ci dwóch identycznych wpisów, dwóch prawie identycznych wpisów, ani nawet dwóch całkiem różnych wpisów. UPDATE zaktualizuje ci już istniejący wpis (lub zaktualizuje wiele wpisów, w zależności co masz po WHERE).

Jeśli w pierwszym poście wkleiłeś całość funkcji overwrite(), to muszę cię zmartwić, ale jest ona nieprzydatna.
Pobiera ona jeden wiersz z tabeli. Następnie znowu pobiera ten sam wiersz z tabeli. Następnie aktualizuje ona ten wiersz danymi pobranymi z niego samego smile.gif I na końcu usuwa ten wiersz.


No chyba że kilka wierszy może mieć tą samą wartość w polu title - wtedy również kod jest błędny, ale przynajmniej widać już jakiś konkretny tok rozumowania.

Może lepiej opisz co ta funkcja miałaby robić, to się wymyśli jakieś inne rozwiązanie ;]

Ten post edytował Kicok 30.06.2007, 17:39:25


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
fredzio90
post
Post #9





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


ta funckja chciałbym aby poprostu mając przykładowo takie wpisy:

1. PSEUDO | IMIE | NAZWISKO | OPIS | IL_GLOSOW | ODSLONY_PROFILU

2. PSEUDO | IMIE | NAZWISKO| OPIS_ROZSZEZONY | IL_GLOSOW | ODSLONY_PROFILU


poprostu, aby podmienić tane z wpisu nr 2. z danymi nr 1. zachowując IL_GLOSOW i ODSLONY a reszte podniemioając, i na koniec usuwając wpis NR 1
Go to the top of the page
+Quote Post
Kicok
post
Post #10





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


W takim razie twój kod był w miarę dobry, tyle że musisz znać zarówno ID pierwszego jak i ID drugiego wiersza.

  1. <?php
  2.  
  3.  
  4. function overwrite( $id1, $id2 )
  5. {
  6. global $rank_dj_tbl;
  7.  
  8.  
  9. settype( $id1, 'int' );
  10. settype( $id2, 'int' );
  11.  
  12. // Pobieramy dane z tabeli
  13. $result = mysql_query( "SELECT dodal, title, imie, nazwisko, hobby, opis, zdjecie, www, typ FROM {$
    rank_dj_tbl} WHERE (id = {$id1})"
     ) or die( mysql_error() );
  14. $row = mysql_fetch_assoc( $result );
  15. if( empty( $row ) ) {
  16. return false;
  17. }
  18.  
  19.  
  20. // Tworzymy nowe zapytanie SQL
  21. $query = "UPDATE {$rank_dj_tbl} SET ";
  22. foreach( $row as $key => $value ) 
  23. {
  24. $value = mysql_escape_string( $value );
  25. $query .= "{$key}='{$value}', ";
  26. }
  27. $query = substr_replace( $query, " WHERE (id = {$id2})", -);
  28.  
  29.  
  30. // Aktualizujemy wiersz $id2 i usuwamy $id1
  31. mysql_query( $query ) or die( mysql_error() );
  32. mysql_query( "DELETE FROM {$rank_dj_tbl} WHERE (id = {$id1})" ) or die( mysql_error() );
  33.  
  34. return true;
  35. }
  36.  
  37. ?>


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
fredzio90
post
Post #11





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


oki, ale jak to teraz przystosować do jednego kliknięcia... że za jednym kliknieciem podmieni się ten wpis z oryg.

ja myślałem jescze nad wybieraniem dodać, znaczy:

  1. <?php
  2. $wyb = mysq_query("SELECT * FROM $rank_dj_tbl WHERE id='{$_GET[id]}' AND typ='opp'");
  3. $r1 = mysql_fetch_array($wyb);
  4.  
  5. //Drugie wybieranie, drugiego ID
  6.  
  7. $wyb2 = mysq_query("SELECT * FROM $rank_dj_tbl WHERE title='{$r1[title]}' AND typ='ok'");
  8. $r2 = mysql_fetch_array($wyb2);
  9.  
  10. $id1 = $r1['id'];
  11. $id2 = $r2['id'];
  12. ?>



tylko niewie, bo nie rozkminiłęm, powiedz mi te $id1 i $id2 są do czego...
znaczy która zmienna jest jako do podmiany, a który zamieniamy


i jeśli mógłbyś to czy ten kod co napisałem zdał by egzamin ?

Ten post edytował fredzio90 1.07.2007, 11:26:30
Go to the top of the page
+Quote Post
Kicok
post
Post #12





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Nie zdałby. Załóżmy że masz taką uproszczoną tabelę:
Kod
+----+-------+
| ID | TYTUL |
+----+-------+
| 1  |  aaa  |
| 2  |  bbb  |
| 3  |  ccc  |

Zmienna $_GET['id'] ma na przykład wartość: 2.


I teraz pierwszym zapytaniem pobierasz wiersz o ID=2
> Wynikowe dane to $row['ID'] = 2; $row['TYTUL'] = 'bbb';
Drugim zapytaniem pobierasz wiersz o TUTYL = 'bbb'
> Wynikowe dane to znowu $row['ID'] = 2; $row['TYTUL'] = 'bbb';



Musisz znać identyfikator wiersza z którego będziesz pobierał dane (w moim kodzie: $id1) oraz wiersza, który będzie nadpisywany (w moim kodzie: $id2). A wywołać moją funkcję możesz przez:
  1. <?php
  2.  
  3. if( overwrite( $_GET['id_wiersza_z_ktorego_pobieramy_dane'], $_GET['id_wiersza_ktory_ma_zostac_nadpisany_nowymi_danymi'] ) ) {
  4. echo 'Operacja wykonana pomyślnie!';
  5. }
  6. else {
  7. echo 'Coś poszło nie tak...';
  8. }
  9.  
  10. ?>




Oczywiście linki typu adres.pl/plik.php?id_wiersza_z_ktorego_pobieramy_dane=123&id_wiersza_ktory_ma_zostac_nadpisany_nowymi_danymi=9999 będą brzydko wyglądały, ale zmianę nazwy tych zmiennych pozostawiam już twojej inwencji twórczej.

Ten post edytował Kicok 1.07.2007, 12:29:13


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
fredzio90
post
Post #13





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


dziękuje, już działa
oprucz zmiany pola typ..

wszysko się zmienia tylko nei pole typ.. pole typ zostaje ciągle opp

moj kod jest taki

  1. <?php
  2. if($cmd=='over') {
  3. check();
  4. }
  5.  
  6. function check() {
  7. global $rank_dj_tbl, $id;
  8.  
  9.  
  10. //Wybieranie Nadesłanych Wpisów
  11. $wyb1 = mysql_query("SELECT * FROM $rank_dj_tbl WHERE id='$id' AND typ='opp'");
  12. $wyb11 = mysql_fetch_array($wyb1);
  13.  
  14. //Wybieranie Zatwierdoznych Wpisów
  15. $wyb2 = mysql_query("SELECT * FROM $rank_dj_tbl WHERE title='{$wyb11['title']}' AND typ='ok'");
  16. $wyb22 = mysql_fetch_array($wyb2);
  17.  
  18. $id2 = $wyb22['id'];
  19. $id1 = $wyb11['id'];
  20.  
  21. if(overwrite($id1, $id2)) {
  22. echo 'Operacja wykonana pomyślnie!';
  23. } else {
  24. echo 'Coś poszło nie tak...';
  25. }
  26. }
  27.  
  28. function overwrite( $id1, $id2 )
  29. {
  30. global $rank_dj_tbl;
  31.  
  32.  
  33. settype( $id1, 'int' );
  34. settype( $id2, 'int' );
  35.  
  36. // Pobieramy dane z tabeli
  37. $result = mysql_query( "SELECT dodal, title, imie, nazwisko, hobby, opis, zdjecie, www, data_ur, ty
    p FROM {$rank_dj_tbl} WHERE (id = {$id1})"
     ) or die( mysql_error() );
  38. $row = mysql_fetch_assoc( $result );
  39. if( empty( $row ) ) {
  40. return false;
  41. }
  42.  
  43.  
  44. // Tworzymy nowe zapytanie SQL
  45. $query = "UPDATE {$rank_dj_tbl} SET ";
  46. foreach( $row as $key => $value ) 
  47. {
  48. $value = mysql_escape_string( $value );
  49. $query .= "{$key}='{$value}', ";
  50. }
  51. $query = substr_replace( $query, " WHERE (id = {$id2})", -);
  52.  
  53.  
  54. // Aktualizujemy wiersz $id2 i usuwamy $id1
  55. mysql_query( $query ) or die( mysql_error() );
  56. mysql_query( "DELETE FROM {$rank_dj_tbl} WHERE (id = {$id1})" ) or die( mysql_error() );
  57.  
  58. return true;
  59. }
  60. ?>


kod nie działa w pełni, ponieważ pole typ jest ostatnie, a skrypt przewiduje inne przerabianie.... wyczytuje dane po przecinku, a za polem typ wyczytywanym niema goo:

  1. <?php
  2. $result = mysql_query( "SELECT dodal, title, imie, nazwisko, hobby, opis, zdjecie, www, data_ur, ty
    p FROM {$rank_dj_tbl} WHERE (id = {$id1})"
     ) or die( mysql_error() );
  3. ?>


Ten post edytował fredzio90 1.07.2007, 21:34:19
Go to the top of the page
+Quote Post
Kicok
post
Post #14





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Wstaw sobie przed:
  1. <?php
  2.  
  3. mysql_query( $query ) or die( mysql_error() );
  4.  
  5. ?>



tą linijkę:
  1. <?php
  2.  
  3. die( 'Zapytanie: ' . htmlspecialchars( $query ) );
  4.  
  5. ?>



i zobacz, czy typ z wyświetlonego zapytania zgadza się z typem, który masz w wierszu z ID równym $id1


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
fredzio90
post
Post #15





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


  1. UPDATE ranking_dj SET dodal='test', title='sdwe35235', imie='nowe', nazwisko='nowe', hobby='nowe', opis='nowe', zdjecie='http://www.bajer.pl/photos/64241.jpg', www='nowe', data_ur='01-01-1999', typ='opp' WHERE (id = 12)


ale powino być typ='ok', chodz mi o to że nadpisuje te dane, i zmienia typ ( pokazuje wpis publicznie )

wszysko w odpowiedni wpis sie "wtapia" ale cichiałbym jescz właśnie ta zmiane typ='ok' dodać
Go to the top of the page
+Quote Post
Kicok
post
Post #16





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


To podmień pętlę foreach tym kodem:

  1. <?php
  2.  
  3.  
  4. foreach( $row as $key => $value ) 
  5. {
  6. if( $key == 'typ' ) {
  7. $value = 'ok';
  8. }
  9.  
  10. $value = mysql_escape_string( $value );
  11. $query .= "{$key}='{$value}', ";
  12. }
  13.  
  14.  
  15. ?>


--------------------
"Sumienie mam czyste, bo nieużywane."
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: 22.08.2025 - 09:36