Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] podmiana wpisów
Forum PHP.pl > Forum > Przedszkole
fredzio90
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ż
Lee
Skoro ten wpis zmieniasz, a jedynie zapamiętywałeś go w zmiennej no to on już nie istnieje (stary wpis). Tak mi się wydaje...
fredzio90
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
flv
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?
fredzio90
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
Kicok
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 ;]
fredzio90
ale nie zrozumiałęś mnie, chodzi mi że będą 2 takie same wpisy o PRAWIE identycznej treści exclamation.gif
Kicok
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 ;]
fredzio90
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
Kicok
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. ?>
fredzio90
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 ?
Kicok
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.
fredzio90
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. ?>
Kicok
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
fredzio90
  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ć
Kicok
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. ?>
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.