Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Przycisk w tabeli -> Złe przekazanie wartości do MySQLa
Forum PHP.pl > Forum > Przedszkole
martinii007
Na podstawie pętli foreach wyświetlam rekordy w tabelce, tylko, że chciałbym dodać dodatkową funkcjonalność, przy każdym rekordzie ma być lista rozwijana w której będzie opcja do wyboru (W tym przypadku wolny/zajęty). Po wybraniu opcji naciskam button i nadpisuje określoną wartość w bazie danych.


Kod
case "test":
              
                    $tabela = DatabaseManager::selectBySQL("SELECT * FROM users1");

                    print'<table border="10"><tr><td>Imię i nazwisko</td><td>E-mail</td><td>Telefon</td><td>Adres</td>';
                  
                    foreach($tabela as $tabele )
                    {
                     print'<tr><td>'.$tabele['fullname'].' </td><td>'.$tabele['mail'].' </td><td>'.$tabele['telefon'].' </td>
                    <td>'.$tabele['STAN'].'
                    <form name="form" id="form" action="update" method="POST">
                                    <select name="STAN" class="work1">
                                            <option value="wolny">wolny</option>
                                            <option value="zajęty">zajęty</option>
                                    </select></td></tr>';
                    $_SESSION['stan1'] = $tabele['id']; #id uzytkownika z bazy
                    }
                    print'</table>';
                  
                    print' <br /><br />
                       <input type="submit" name="submit-form" class="submit-form" value="Zarejestruj" /> </form>

            break;


Za pomocą POSTA przesyłam dane do metody update w "usermanagerze":

Kod
public function Update($POST) {

        if(isset($POST) && is_array($POST)) {

            $res = DatabaseManager::updateTable("users1", array("STAN"=>$POST['STAN']),array("id"=>$_SESSION['stan1']));
                                                 #tabela    kolumna tabeli                          where id=stan1
            if($res) {
                return true;
            } else {
                return false;
            }

        } else {

            return false;

        }


Całość przekierowuję do pliku update:

Kod
<?php
if(isset($_POST['STAN'])) {

    $um = new UserManager;

    $res = $um->Update($_POST);

    if($res) {
    echo'succes';
    } else {

        die("Utworzenie użytkownika nie było możliwe!");

    }

} else {
    die("DOSTĘP DO TEJ STRONY ZOSTAŁ ZABLOKOWANY PRZEZ ADMINISTRATORA!");
}

?>



Problem jest następujący: W tabelce po zmianie listy rozwijanej działa update ale tylko dla ostatniego rekordu, dla poprzednich nie.
Trzeba byłoby każde id użytkownika w foreachu jakoś przeiterować i zapisać do zmiennych, ale nie wiem do końca jak to zrobić, chciałem to zrobić na zmiennych sesyjnych no ale tak raczej się nie da jak teraz mam bo zapisuje tylko ostatni element, nadpisuje pozostałe elementy $_SESSION['stan1'] = $tabele['id'] co pokazuje tabelka:


erix
Zrób sobie tablicę z elementów formularza:

  1. name=stan[1]
  2. name=stan[2]


A dalej pomęcz się sam, to praca domowa. tongue.gif
martinii007
Zrobiłem inaczej, ale to rozwiązanie jednak dalej mnie nie satysfakcjonuje:




Za każdym przebiegiem pętli pobieram dane zamieszczając je do tabelki razem z buttonem, czyli w każdym rekordzie mam butona który zmienia dostępność.
Chciałbym zapisać te dane właśnie do tablicy: 1 przebieg petli -> id1 uzytkownika + stan wolny/zajety itd. Pozniej to jakoś odczytać i zamieścić do bazy z wszystkich pól, ale nie wiem jak to zrobić. Najważniejsze, żeby był jeden button, a nie 1000 jak się tabelka rozrośnie. Kod który przerobiłem wygląda tak:


Kod
           $db = DatabaseManager::getConnection();
                    
                    @$stan = $_POST['STAN'];
                    @$numerid = $_POST['ukryteid'];

                    $zapytanie1 = ("UPDATE users1 SET STAN=('".$stan."') where id='".$numerid."'");
                    $wynik1 = $db->query($zapytanie1);
                    
                          
                    $zapytanie = "SELECT * FROM users1";
                    $wynik = $db->query($zapytanie);
                    
                    $ile_znalezionych = $wynik->num_rows;

                    //print_r($tabela);
                    print'<table cellspacing="0" cellpadding="0"><tr><td>Imię i nazwisko</td><td>E-mail</td><td>Telefon</td><td>Adres</td><td>Wykształcenie</td><td>Zawód</td><td>Język(i)</td><td>Dostępność</td></tr>';
                    $a=null;
                    for ($i=0; $i <$ile_znalezionych; $i++) {
                    $tabele = $wynik->fetch_assoc();
                    
                    if($tabele['STAN']=='wolny'){
                        
                        $a="zajęty";
                        
                    }else{
                        
                        $a="wolny";
                    }
                    
                    print'<tr><td>'.$tabele['fullname'].' </td><td>'.$tabele['mail'].' </td><td>'.$tabele['telefon'].' </td><td>'.$tabele['kod'].' '.$tabele['miejscowosc'].'<p>ulica '.$tabele['ulica'].' '.$tabele['numerdomu'].'</td><td>'.$tabele['wyksztalcenie'].' </td><td>'.$tabele['zawod'].' </td><td>'.$tabele['jezyki'].' </td>
                    <td width="200">
                    <form name="form" id="form" action="update/" method="POST">
                                    <input type="hidden" name="ukryteid" value='.$tabele['id'].'>
                                    <select name="STAN" class="work1">
                                            <option value='.$tabele['STAN'].'>'.$tabele['STAN'].'</option>
                                            <option value='.$a.'>'.$a.'</option>
                                    </select><input type="submit" name="submit-form" class="submit-form" value="Aktualizuj" /></form></td></tr>';
                    }
                    print'</table>';
xxdrago
Nie wiem, czy dobrze zrozumiałem ale chodzi ci o zmienienie np. statusu 2 osób na raz?

Robisz sobie po prostu: <input type="radio" ... do każdego i potem button zmień status.

Lub druga możliwość to dodajesz poprostu button:
Robisz if'a który sprawdza czy w bazie np. jest zajęty jeżeli jest to wyświetla button zmiany na dostępny i na odwrót.
  1. if ($status = 'Zajety';
  2. {
  3. echo 'costam'; // Jeżeli zajęty
  4. }
  5. else
  6. {
  7. echo ''cos tam...' // Jeżeli dostępny
  8. }
martinii007
Takiego podobnego ifa już mam i działa, chodzi o coś innego. Żeby zamiast tych butonów które są na screenie zrobić jeden który aktualizował by wartość statusu. Jak będę miał coraz więcej rekordów, jest to uciążliwe jeśli za każdym razem trzeba najpierw zmienić status na dostepny/zajety i pozniej klikać. Chcę żeby był jeden buton całkiem na dole i gdy go nacisne to mi zaktualizuje wszystkie wartości w polu Dostępność.



Moją pętla tworzy za każdem razem post z butonem i jest tam id, nie wiem jak zgromadzić tyle powiązanych ze sobą id z stringiem dostępności i wprowadzić je do bazy.
erix
http://forum.php.pl/index.php?showtopic=18...st&p=923813

Hint: tablica wielowymiarowa.
xxdrago
martinii007, po patrz jak masz np. w e-mail zaznaczasz sobie e-maile i dajesz np. Archiwum,Spam i tak dalej zrób sobie coś takiego. (zaznaczasz wiele np 7 rekordów i wybierz sobie selectem np. WOLNY/ZAJĘTY.
martinii007
xxdrago chyba dalej się nie rozumiemy, ale za to erix ma dobre rozwiązanie tylko nie wiem jak do końca "wcielić go w życie"
Zrobiłem coś takiego:

Kod
$tablicastan[]=$tabele['STAN'];
$tablicaid[]=$tabele['id'];


Wywołując echo za pętlą for mam:

Kod
echo $tablicastan[4];
echo $tablicaid[4];


W tablicy stan wyświetla stan pierwszego usera + przyporządkowany do niego numer id w tablicy tablica id.
Czyli mam już wyciągnięte te dane.

Następnie iteruję:

Kod
for ($a=0; $a<$ile_znalezionych; $a++) {
echo $tablicaid[$a];
echo $tablicastan[$a];}


Wyświetla kolejno:
11zajęty13wolny60zajęty87wolny89zajęty

Teraz pytanie jak wprowadzić to do bazy ? czy wartości które są w option value:

Kod
<option value='.$tabele['STAN'].'>'.$tabele['STAN'].'</option>
<option value='.$a.'>'.$a.'</option>


trzeba zmienić na tablicaid[$a] ? No i button ma być poza pętlą czyli będzie 1, czy post przekaże wszystkie wartości.

Dzięki erix smile.gif
erix
Zadajesz pytania na poziomie elementarza.

Masz var_dump, manuala, mózg, to z tego korzystaj.

Cytat
trzeba zmienić na tablicaid[$a] ?

A czy klawiatura spuści Ci łomot, gdy sprawdzisz, jak działa? Wysadzisz wszystkie reaktory na świecie? Stworzysz supernovą, która wessie nyan-cata?
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.