Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[PHP]Przesłanie z tablicy do formularza

Adalberd 28 Lip 2011 18:24 2099 20
  • #1 28 Lip 2011 18:24
    Adalberd
    Poziom 13  

    Wybieram z bazy tabelka x przypisuje do zmiennej $wybierzzx

    Kod: php
    Zaloguj się, aby zobaczyć kod


    Dane z tabelki wyświetlam w liście rozwijanej:
    Kod: php
    Zaloguj się, aby zobaczyć kod



    wysłam metodą POST
    Kod: php
    Zaloguj się, aby zobaczyć kod


    i teraz wyświetlam to co jest przesłane w polu input type:

    Kod: php
    Zaloguj się, aby zobaczyć kod


    Tym sposobem wyświetla mi wszystko co zawiera $wybierzpojazd, czyli id, produkt1 produkt2.
    Ja bym chciał wyświetlić tylko ID, jest taka szansa?:?:

    0 20
  • #3 28 Lip 2011 19:17
    Adalberd
    Poziom 13  

    Na to wpadłem,
    ale pozostałe dane "produkt1", "produkt2" tez mi są potrzebne, więc nie moge tylko id wyciągnąć z tabelki.
    Help
    :cry:

    0
  • #4 28 Lip 2011 20:53
    loganek2
    Poziom 16  

    ja widze dwie opcje. Po pierwsze, lista rozwijana robiona w ten sposób:

    Kod: php
    Zaloguj się, aby zobaczyć kod


    druga opcja to taka, że przy wyświetlaniu robisz tak:
    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #5 28 Lip 2011 21:08
    Adalberd
    Poziom 13  

    Pierwsza opcja nic nie zmieni, natomiast druga opcja jest genialna, wyciąga mi id hurraaa bardzo dziękuje.
    Właściwie to nie chce wyświetlać tego id tylko go użyć do aktualizacji produktu w innej tabeli.

    Dzięki bardzo jeszcze raz.

    0
  • #6 28 Lip 2011 21:08
    tzok
    Moderator Samochody

    Jako VALUE z OPTION masz string złożony z wybranych pól i to (w całości) jest przesyłane przez POST. Pola masz jednak rozdzielone znakiem ' ' więc można użyć funkcji explode i zrobić z niego tablicę a następnie wybrać tylko n-ty element tej tablicy.

    Osobiście jednak jako value z formularza przesyłałbym wyłącznie ID, a we fragmencie kodu który odbiera formularz dodałbym SELECTa na potrzebne pola po tym ID. Tak byłoby o wiele bardziej poprawnie.

    Kod: php
    Zaloguj się, aby zobaczyć kod


    Kod: sql
    Zaloguj się, aby zobaczyć kod

    0
  • #7 28 Lip 2011 21:49
    Adalberd
    Poziom 13  

    tzok napisał:
    SELECT model, opis, producent FROM `samochody` WHERE `ID`='.$_POST['samochod']

    na szybko dostosowałem do siebie ale niestety jest jakiś błąd:
    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

    Pokaże może co chce osiągnąć, natomiast nie wiem czy to będzie dla was zrozumiałe, ale zaryzykuje:

    Wybieram pojazd z listy przesyłam go do formularza, dopisuje dane do innych pól dalej wysyłam to do tabelki "rejestr_przejazdu" i to działa ok!
    Tylko chce jeszcze zaktualizować rekord 'przebieg' w innej tabelce 'pojazd' powiększając go o dane wysłane z formularza (pole kilometry).

    Kod: php
    Zaloguj się, aby zobaczyć kod



    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #8 28 Lip 2011 21:56
    loganek2
    Poziom 16  

    parse error to błąd składni, daj całą linię kodu z tym zapytaniem

    0
  • #9 28 Lip 2011 22:04
    Adalberd
    Poziom 13  

    loganek2 napisał:
    parse error to błąd składni, daj całą linię kodu z tym zapytaniem


    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #10 28 Lip 2011 22:16
    loganek2
    Poziom 16  

    poprawnie:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #11 28 Lip 2011 22:18
    jan1996
    Poziom 24  

    Kod: php
    Zaloguj się, aby zobaczyć kod
    tak powinno działać

    0
  • #12 28 Lip 2011 22:56
    tzok
    Moderator Samochody

    Nie powinno działać, bo dalej zamiast:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    Masz:
    Kod: php
    Zaloguj się, aby zobaczyć kod


    Popatrz sobie co zwraca Ci:
    Kod: php
    Zaloguj się, aby zobaczyć kod

    ...przy Twojej składni zwróci:
    Code:
    '1  Alfa-Romeo '
    a powinno zwrócić po prostu
    Code:
    '1'


    Nie wiem skąd się wzięło $_POST['samochod'], bo masz <select name="wybierzpojazd" size="10">, czyli to co było wybrane w tym selekcie (value) będzie przesłane jako $_POST['wybierzpojazd'].

    Co do cudzysłowu, to:
    Kod: php
    Zaloguj się, aby zobaczyć kod


    Gubisz się też z łączeniem ciągów... co to ma być:
    $row["id"].' '.' '.$row["Marka"].' '
    Po co te dwie połączone spacje w osobnych ciągach oraz ta spacja na końcu?
    Z kolei w etykiecie brakuje spacji po kropce, co powoduje wyświetlenie '1.Alfa', zamiast '1. Alfa' i ten sam motyw ze spacją na końcu.

    0
  • #13 28 Lip 2011 23:58
    Adalberd
    Poziom 13  

    tzok napisał:
    Nie powinno działać, bo dalej zamiast:

    Kod PHP - [rozwiń]
    echo '<option value="'.$row["id"].'">'.
    $row["id"].'. '.$row["Marka"].' '.$row["Model"].' - '.$row["Rejestracja"].
    '</option>';



    Wiem..wstawiłem tutaj stary kod, przed Twoimi zmianami (chciałem przedstawić swój cel)

    Poprawiłem uwzględniając Twoje uwagi, ale niestety nie wyświetla się lista pojazdów.

    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #14 29 Lip 2011 00:03
    tzok
    Moderator Samochody
  • #15 29 Lip 2011 00:39
    Adalberd
    Poziom 13  

    edytowałem poprzedni post

    0
  • #16 29 Lip 2011 11:21
    tzok
    Moderator Samochody

    Jasne, że się nie wyświetla, bo dałeś:
    $wybierzpojazd = mysql_query('SELECT Marka, Model, Rejestracja FROM `pojazd` WHERE `ID`='.$_POST['wybierzpojazd']); na potrzeby wyświetlenia listy, a jako że $_POST['wybierzpojazd'] = NULL to zapytanie zwraca pusty wynik, zapytanie z tym warunkiem musi być wysłane ponownie, po wysłaniu i odebraniu formularza.

    Do wyświetlania listy ma być bez klauzuli WHERE, ona ma się pojawić dopiero na stronie która odbiera dane z formularza, by ustalić wartości Marka, Model, Rejestracja na podstawie ID zwróconego przez formularz w polu "wybierzpojazd", czyli po klauzuli if (isset($_POST["wybierzpojazd"])) ponownie daj to zapytanie tym razem z dodatkowym warunkiem WHERE `ID`='.$_POST['wybierzpojazd'].

    0
  • #17 30 Lip 2011 23:44
    Adalberd
    Poziom 13  

    tzok napisał:
    Jasne, że się nie wyświetla, bo dałeś:
    $wybierzpojazd = mysql_query('SELECT Marka, Model, Rejestracja FROM `pojazd` WHERE `ID`='.$_POST['wybierzpojazd']); na potrzeby wyświetlenia listy, a jako że $_POST['wybierzpojazd'] = NULL to zapytanie zwraca pusty wynik, zapytanie z tym warunkiem musi być wysłane ponownie, po wysłaniu i odebraniu formularza.

    Do wyświetlania listy ma być bez klauzuli WHERE, ona ma się pojawić dopiero na stronie która odbiera dane z formularza, by ustalić wartości Marka, Model, Rejestracja na podstawie ID zwróconego przez formularz w polu "wybierzpojazd", czyli po klauzuli if (isset($_POST["wybierzpojazd"])) ponownie daj to zapytanie tym razem z dodatkowym warunkiem WHERE `ID`='.$_POST['wybierzpojazd'].


    Ok, poprawiłem, lista poprawnie jest wyświetlana

    Kod: php
    Zaloguj się, aby zobaczyć kod


    ale...

    Kod: php-brief
    Zaloguj się, aby zobaczyć kod

    Zwraca mi tylko id


    Kod: php
    Zaloguj się, aby zobaczyć kod

    to zapytanie właściwie nic nie wnosi.

    0
  • #18 31 Lip 2011 00:13
    tzok
    Moderator Samochody

    Przecież od początku o tym piszę... z formularza masz odbierać TYLKO id - tak jest prawidłowo, ale mając to id możesz sobie wysłać kolejne zapytanie do bazy i pobrać resztę potrzebnych informacji na jego podstawie, wszak id jest kluczem podstawowym tej tablicy w bazie = jednoznacznie identyfikuje wiersz w tabeli.

    Teraz w miejscu w którym miałeś echo $_POST['wybierzpojazd']; daj:

    Code:
    $result = mysql_query("SELECT Marka, Model, Rejestracja FROM pojazd WHERE id=".$_POST['wybierzpojazd']);
    
    $row = mysql_fetch_array($result);
    echo $row['Marka'].' '.$row['Model'].' '.$row['Rejestracja'];


    Zmień sobie też to:
    Code:
    $wybierzpojazd = mysql_query("SELECT id, Marka, Model, Rejestracja FROM pojazd");
    
    while($row = mysql_fetch_array($wybierzpojazd))

    na:
    Code:
    $result = mysql_query("SELECT id, Marka, Model, Rejestracja FROM pojazd");
    
    while($row = mysql_fetch_array($result))

    Bo robisz bałagan ze zmiennymi (tak samo nazywasz pole w formularzu jak zmienną).


    Tu masz cały poprawiony kod:
    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #19 31 Lip 2011 00:46
    Adalberd
    Poziom 13  

    no tak...banalne..brak jakiejkolwiek logiki z mojej strony ale chce się nauczyć!
    Dzięki bardzo za cierpliwość.
    Teraz muszę usiąść i pomyśleć jak skorzystać z tego id, żeby wartość wpisaną w:
    <input type="float" size="4" name="Km" /> [kilometry]<br />';
    zapisać w jednej tabelce i jednocześnie w drugiej tabelce powiększyć rekord 'przebieg' o wartość z tego input type.

    0
  • Pomocny post
    #20 31 Lip 2011 12:16
    tzok
    Moderator Samochody

    W bazach relacyjnych wszystko opiera się o relację między tabelami, relacje są definiowane w oparciu o klucze. Klucze mogą być naturalne (w praktyce bardzo rzadko) lub sztuczne. Przykładem klucza sztucznego jest właśnie kolumna id. W odniesieniu do rekordu (wiersza tabeli) kolumna to pole. Klucz jednoznacznie identyfikuje wiersz (rekord) w tabeli. Powiązania między tabelami czyli relacje realizuje się za pomocą tychże kluczy - po jednej stronie relacji mamy klucz podstawowy, po drugiej natomiast klucz obcy. Klucz obcy to pole rekordu zawierające klucz podstawowy innej tabeli, która pozostaje w relacji z daną. W ten sposób można tworzyć relacje 1:N lub 1:1 (z założenia są błędne - jeśli mamy relację 1:1 to dane powinny być umieszczone w jednej tabeli). Jeśli potrzebujemy relacji M:N trzeba wprowadzić dodatkową tabelę, tzw. tabelę pośredniczącą (proxy table), zawierającą wyłącznie klucze obce z tabel które wiąże (jej klucz podstawowy jest kluczem złożonym - zbudowanym z obydwu kluczy obcych). Tu pojawia się kolejny termin - klucz prosty (pojedyncza kolumna) oraz złożony (złożenie 2 lub więcej kolumn).

    0
  • #21 24 Sie 2011 20:45
    Adalberd
    Poziom 13  

    dałem sobie radę, serdecznie dzięki!

    0