Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Aktualizacja zatwierdzonej pozycji
Forum PHP.pl > Forum > PHP
Max Damage
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.
nowotny
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...
Max Damage
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ł.
nowotny
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ę...
Max Damage
Ś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. ?>
nowotny
Dalej nie używasz ID jak prosiłem... :/
Max Damage
Kombinuje jak moge, ale nic z tego. Jakoś nie mogę załapać twego sposóbu myślenia sad.gif
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.