Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Aktualizacja zatwierdzonej pozycji, Spory problem :/
Max Damage
post
Post #1





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Mam w bazie w tabeli 10 kolumn. Kiedy ktoś chce coś zmienić dodaje nowy wiersz który zawiera jego propozycję. Znajduję takie pozycję poprzez ich nazwę bo właśnie one się powtarzają. Nastepnie wyświetlam to co jest w bazie oraz to co jest propozycją. I teraz pytanie jak zrobic abym po zatwierdzeniu miał zaktualizowaną te daną a propozycja aby mi się usunęła?
Z bazy wyświetlam to w ten sposób:
  1. <?php
  2. $wynik=mysql_query("SELECT * FROM woz WHERE nazwa='$marka'") or die(mysql_error());
  3. echo "<table border='1' cellpadding='5'>";
  4. while($wiersz=mysql_fetch_array($wynik)) {
  5. $i=1;
  6. echo "<tr>";
  7.  while($i<10) {
  8. if(($wiersz[$i])==NULL){
  9. echo "<td width='20'></td>";
  10. $i++;
  11. }
  12. else { 
  13.  echo "<td width='20'>".$wiersz[$i]."</td>";
  14.  $i++;
  15. }
  16. }
  17. echo "<td width='20'><a href='akceptuj.php?nazwa=".$wiersz['nazwa'].">zatwierdz<a></td>";
  18. }
  19. echo "</tr>";
  20. echo "</table>";
  21. ?>

Cały problem polaga na tym, że nie wiem który wiersz jest tą propozycją uzytkownika, więc nie mogę tego dopisać to linka, a poza tym przy instrukcji UPDATE muszę mieć nazwę kolumny tej pozycji.
No i jeszcze jest problem jak po zatwierdzeniu usunąć to co było propozycją, skoro moge mieć np. jeszcze 10 innych propozycji.
A i jeszcze jedno: w wierszu który dodał uzytkownik są tylko dwa wpisy, to co on zaproponował oraz to czy artykuł został opublikowany.


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
nowotny
post
Post #2





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Cytat(Max Damage @ 2.08.2008, 17:23:30 ) *
Cały problem polaga na tym, że nie wiem który wiersz jest tą propozycją uzytkownika

Możesz zrobić na przykład tak: dodajesz sobie to tej tabeli jeszcze jedną kolumnę w stylu status('oryg'|'propoz') i przy dodawaniu danego rekordu sprawdzasz najpierw czy istnieje już taka nazwa:
Kod
(schematycznie)
if((SELECT nazwa FROM tabela WHERE nazwa="nazwa_podana_przez_usera")==TRUE) status='propoz';
else status='oryg';

po czym ustawiasz rekordowi odpowiedni status... i już wiesz jak przy updacie rozróżnić oryginał od propozycji...

Cytat(Max Damage @ 2.08.2008, 17:23:30 ) *
więc nie mogę tego dopisać to linka, a poza tym przy instrukcji UPDATE muszę mieć nazwę kolumny tej pozycji.

Stosuj ID do rozróżniania poszczególnych rekordów...

Cytat(Max Damage @ 2.08.2008, 17:23:30 ) *
No i jeszcze jest problem jak po zatwierdzeniu usunąć to co było propozycją,

Jak wyżej... używaj ID...

Cytat(Max Damage @ 2.08.2008, 17:23:30 ) *
skoro moge mieć np. jeszcze 10 innych propozycji.

A to już zależy co chcesz zrobić z pozostałymi propozycjami...

Ten post edytował nowotny 2.08.2008, 17:55:17
Go to the top of the page
+Quote Post
Max Damage
post
Post #3





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


W tym pierwszym źle się wyraziłem, sorry. Mam tak jak pisałem kolumnę (typ bool) opublikowany. Więc jak mam 1 to oryginał, jak 0 to propozycja.
Niestety nie wiem co masz na myśli pisząc o id. W składni UPDATE ma przecież coś takiego: SET kolumna=wyrażenie. Zakładając że będę znał to wyrażenie, nadal nie będę wiedział do której kolumny należy. Próbowałem coś kombinować z mysql_field_name i ewentualnie też przesłać to przez GET, ale nie bardzo wychodzi. A jeśli masz na myśli kolumnę zawierającą numery id, to mam oczywiście taką i mam ją ustawioną na auto_increment. Dlatego właśnie wyszukuje duplikaty za pomocą nazwy.

Poza tym będę musiał przesłać tę proponowaną nazwę która jest wyświetlana w else, i z tym też mam problem bo nie wiem jak ją teraz z tego wyciągnąć.

Jak możesz to wytłumacz mi dokładniej jak ty to wszystko widzisz i jak byś to zrobił.


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
nowotny
post
Post #4





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Załóżmy że masz taką tabelę:
Kod
|ID |marka  |kolor     |stan
----------------------------
|1  |mazda  |niebieski |1
|2  |mazda  |szary     |0
|3  |mazda  |czarny    |0
|4  |mazda  |zielony   |0


Teraz wybierasz sobie wszystkie "mazdy" i wyświetlasz:

  1. <?php
  2. $wynik=mysql_query('SELECT * FROM woz WHERE marka="mazda" ORDER BY stan DESC') or die(mysql_error());
  3. while($wiersz=mysql_fetch_array($wynik)) {
  4. if($wiersz['stan']=='1'){
  5. $oryg_id=$wiersz['id'];
  6. echo $wiersz['id'].'. '."\t".$wiersz['marka']."\t".$wiersz['kolor']."\t".$wiersz['stan']."r\n";
  7. }
  8. else{
  9. echo $wiersz['id'].'. '."\t".$wiersz['marka']."\t".$wiersz['kolor']."\t".$wiersz['stan'].' <a href="edit.php?id='.$wiersz['id'].'&oryg_id='.$oryg_id.'">Ustaw jako oryginal</a>'."r\n";
  10. }
  11. }
  12. ?>


Plik edit.php:
  1. <?php
  2. $oryg_id=$_GET['oryg_id'];
  3. $upd_id=$_GET['id'];
  4. mysql_query('UPDATE woz SET stan="1" WHERE id='.$upd_id) or die(mysql_error());
  5. mysql_query('DELETE FROM woz WHERE id='.$oryg_id) or die(mysql_error());
  6. ?>


Taki generalnie byłby zarys... pewnie dało by się zrobić bardziej elegancko ale chodzi mi tu o zasadę...
Go to the top of the page
+Quote Post
Max Damage
post
Post #5





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Świetny pomysł, tylko jeszcze jeden problem. Będę musiał podczas edycji przepisywać z oryginału pozostałe dane z kolumn, aby mi reszta nie zginęła jak będę to aktualizował. W tej chwili mam zapytanie które tylko wstawia wiersz w propozycją, a reszta kolumn jest pusta. Jak przepisać tą resztę z oryginału? Teraz mam tak:
  1. <?php
  2. mysql_query("INSERT INTO $tabela (nazwa,$kolumna,opublikowany) VALUES ('$nazwa','$wartosc','0') ")or die (mysql_error());
  3. ?>

EDIT: W tej chiwli przychodzi mi na myśl tylko coś takiego:
  1. <?php
  2. mysql_query("SELECT * FROM $tabela WHERE nazwa='$nazwa' and opublikowany='1'");
  3. $wynik=mysql_query("INSERT INTO $tabela VALUES (JAK TU PRZEPISAC TE WARTOSCI Z 1 ZAPYTANIA??) ");
  4. while($wiersz=mysql_fetch_assoc($wynik))
  5. $id=$wiersz['id'];
  6. mysql_query("UPDATE $tabela SET $kolumna='$wartosc',opublikowany='0' WHERE id='$id'");
  7. ?>


Ten post edytował Max Damage 3.08.2008, 14:03:50


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
nowotny
post
Post #6





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Dalej nie używasz ID jak prosiłem... :/
Go to the top of the page
+Quote Post
Max Damage
post
Post #7





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Kombinuje jak moge, ale nic z tego. Jakoś nie mogę załapać twego sposóbu myślenia sad.gif


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
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: 19.08.2025 - 04:56