![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Postów: 0 Pomógł: Dołączył: -- Ostrzeżenie: (0%) ![]() ![]() |
Mam 2 tabele:
1. Auta (auto_id, auto_marka_id) 2. Marka (marka_id, marka_nazwa) Funkcja edit _auta wyświetla mi poprawnie formularz z id i nazwa marki samochodu, które mogę edytować. jednak gdy kliknę w przycisk akceptuj - (wywolywana jest funkcja post_edit_auta) nie updatuje mi danych ------------------------ ta część działa dobrze: [php:1:1689619966]<?php function edit_auta($auto_id) { echo '<h3><p align="center">Edytuj auto</p></h3>'; $r = mysql_query("SELECT auto_id , marka_nazwa FROM auta, marka WHERE marka.marka_id=auto_marka_id and auta.auto_id = $auto_id") or die("error: auta.php - edit_auta"); $a = mysql_fetch_array($r); echo '<form action="auta.php" method="get">'; echo '<input type="hidden" name="action" value="post_edit">'; echo '<input type="hidden" name="auto_id" value="'.$a["auto_id"].'">'; echo '<table width="320" align="center">'; echo '<tr>'; echo '<td width="60">Marka</td>'; echo '<td width="260"><input type="text" name="marka_nazwa" value="'.$a["marka_nazwa"].'" class="big"></td>'; echo '</tr>'; ?>[/php:1:1689619966] tutaj jest gdzieś błąd: [php:1:1689619966]<?php function post_edit_auta($auto_id) { mysql_query("update auta set auto_id=$auto_id, auto_marka_id = '$auto_marka_id' where marka.marka_id=$auto_id") or die("error: osoby.php - post_edit_player"); return 1; } echo '</table>'; echo '<p align="center"><input type="submit" value="Akceptuj"></p>'; echo '</form>'; echo '<p align="center"><a href="index.php?aaction=auta">Powrót do listy aut</a></p>'; } ?>[/php:1:1689619966] Prosiłbym o pomoc bo nie bardzo wiem jak formułować zapytania jeśli dotyczą 2 róznych powiązanych ze sobą tabel. Poprawione by hwao |
|
|
![]() |
![]()
Post
#2
|
|
Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
BBcode prosze uzywac... na przyszlosc
I podaj jaki blad wywala... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 23.03.2004 Skąd: N 50°03 Ostrzeżenie: (0%) ![]() ![]() |
Taka sugestia:
nawałęś funkcję: POST_edit_auta a użyłeś methody: GET... Sprawdź czy masz wogóle włączone Register Globals (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Propobuję przejść na: $_GET[] i $_POST[] |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 2.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
[sql:1:c448394792]update auta set auto_id=$auto_id, auto_marka_id = '$auto_marka_id'
where marka.marka_id=$auto_id[/sql:1:c448394792] Skąd tu się wzięło nagle: marka.marka_id? Każde zapytanie jest realizowane oddzielnie, więc nie możesz się odwoływać nagle do tabeli marka z poprzedniego zapytania. |
|
|
![]()
Post
#5
|
|
Grupa: Postów: 0 Pomógł: Dołączył: -- Ostrzeżenie: (0%) ![]() ![]() |
No tak: - marka.marka_id nie ma tu sensu, więc co powinienem wpisać po poleceniu UPDATE jesli chce zrobić update pola auto_id i auto_marka_id (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? Czy to co jest wpisane po SET jest dobrze?? Jeśli tak co ma być po WHERE?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Dzięki za odpowiedzi:) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 2.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Po usunięciu błędów to zapytanie wygląda tak:
[sql:1:9b79a8deed]UPDATE auta SET auto_id = $auto_id, auto_marka_id = $auto_marka_id WHERE auto_id = $auto_id[/sql:1:9b79a8deed] ... ale jest bezsensowne w tym wypadku, bo po co wstawiać w pole auto_id zmienną $auto_id, skoro w myśl warunku WHERE obie te wartości są sobie równe dla tego wiersza. Więc nie wiem, o co Ci chodzi i sprecyzuj, co ma robić to zapytanie. Albo dla danego wiersza update'uj tylko auto_marka_id: [sql:1:9b79a8deed]UPDATE auta SET auto_marka_id = $auto_marka_id WHERE auto_id = $auto_id[/sql:1:9b79a8deed] Albo może chodziło Ci o insert, a nie update (czyli wstawienie nowego wiersza): [sql:1:9b79a8deed]insert into auta ( auto_id, auto_marka_id ) values ( $auto_id, $auto_marka_id )[/sql:1:9b79a8deed] Ale opisz może dokładniej, co dane zapytanie ma robić, bo tu tylko tak zgaduję, o co może Ci chodzić. |
|
|
![]()
Post
#7
|
|
Grupa: Postów: 0 Pomógł: Dołączył: -- Ostrzeżenie: (0%) ![]() ![]() |
Chodzi o to że w formularzu do edycji pobierana jest "marka_nazwa" z tabeli marka ale mi nie chodzi o update "marka_nazwa". Chce zrobić update tabeli auta gdzie jest auto_marka_id.
Innymi slowy: Na stronie pojawia sie id i nazwa marki. Jesli chcę to edytować wyświetla mi sie formularz gdzie mogę poprawić nazwę marki. Po kliknięciu akceptuj nie aktualizuje mi tabeli auta. A przecież powinno zaktualizować się pole auto_marka_id. Nie ma problemu z update gdy dane są pobierane z jednej tabeli, a tu mam 2 tabele : auta i marka i już nie wiem jak zrobić update:( |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 2.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
No więc jak chcesz zmienić tylko pole auto_marka_id w tabeli auta, to robi to zapytanie, które podałem, czyli:
[sql:1:2f7c3c06cc]UPDATE auta SET auto_marka_id = $auto_marka_id WHERE auto_id = $auto_id[/sql:1:2f7c3c06cc] Jeśli nie o to Ci chodziło, to podaj co jeszcze ma się dziać. Jeśli natomiast o to Ci chodziło, ale powyższe zapytanie nie działa, to podaj cały kod odpowiedzialny za wyświetlanie i zmienianie tych wartości, bo może problem jest gdzieś po drodze. |
|
|
![]()
Post
#9
|
|
Grupa: Postów: 0 Pomógł: Dołączył: -- Ostrzeżenie: (0%) ![]() ![]() |
Przesyłam cały kod odpowiedzialny za powyższy problem:
Tabela auta: auto_id, auto_marka_id Tabela marka: marka_id, marka_nazwa [php:1:2ac70ddb46]<?php <? //funkcja display_auta odpowiada za wyświetlenie aut w komisie //pominąłem <table><tr>żeby nie pisać nieistotnych spraw function display_auta() { $r = mysql_query("SELECT auto_id , marka_nazwa FROM auta, marka WHERE marka.marka_id=auto_marka_id") or die("error: auta.php - display_auta"); for ($i = 0; $i < mysql_num_rows($r); $i++) { $a = mysql_fetch_array($r); echo '<td width="6%">'.($i+1)."</td>"; echo '<td width="18%">'.$a["marka_nazwa"]."</td>"; echo '<td width="50" align="center">'.' <a href="auta.php?action=edit&auto_id='.$a["auto_id"].'">edytuj</a>'."</td>"; } // funkcja edit_auta po kliknięciu w link "edytuj" wyświetla formularz //do edycji marki samochodu (zmienna marka_nazwa) function edit_auta($auto_id) { $r = mysql_query("SELECT auto_id , marka_nazwa FROM auta, marka WHERE marka_id=auto_marka_id and auto_id = $auto_id") or die("error: auta.php - edit_auta"); $a = mysql_fetch_array($r); echo '<form action="auta.php" method="get">'; echo '<input type="hidden" name="action" value="post_edit">'; echo '<input type="hidden" name="auto_id" value="'.$a["auto_id"].'">'; echo '<td width="60">Marka</td>'; echo '<td width="260"><input type="text" name="marka_nazwa" value="'.$a["marka_nazwa"].'" class="big"></td>'; echo '</tr>'; echo '<p align="center"><input type="submit" value="Akceptuj"></p>'; echo '</form>'; } // funkcja post_edit_auta odpowiada za update tabeli auto_id // no i tu własnie nie updaduje mi tabeli:( function post_edit_auta($auto_id, $auto_marka_id) { mysql_query("update auta set auto_marka_id = $auto_marka_id WHERE auto_id=$auto_id ") or die("error: auta.php - post_edit_auta"); return 1; } echo '<h2><p align="center">AUTA W KOMISIE</p></h2>'; connect(); if ($action == "edit") { edit_auta($auto_id); } elseif ($action == "post_edit") { if (post_edit_auta($auto_id, $auto_marka_id )) { display_auta(); } } else { display_auta(); } disconnect(); ?> ?>[/php:1:2ac70ddb46] |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 2.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Nie działa dlatego, że w formularzu przekazujesz zmienną $marka_nazwa a w update chcesz wstawić zmienną $auto_marka_id. Tak więc chyba coś pokręciłeś :wink: Jeśli chcesz zmienić pole marka_nazwa, to powinieneś to robić w tabeli marka, a jak chcesz zmienić pole auto_marka_id, to najpierw musisz skądś wczytać wartość zmiennej $auto_marka_id. Jednak zauważ, że $auto_marka_id to jedynie numer pod jakim jest dana nazwa w tabeli marka, a nie sama nazwa marki. Nazwa marki znajduje się tylko w tabeli marka, więc w tabeli auta nie masz czego updatować.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 24.05.2004 Ostrzeżenie: (0%) ![]() ![]() |
No to nie rozumiem jak mam to zrobić. :cry:
Zapytanie które jest na początku skryptu wypisuje mi id danego auta które zostalo wprowadzone do komisu i markę tego auta. Gdy kliknę edycja w polu input pojawia mi się nazwa marki tego samochodu i mogę ją zmienić na inną (ale nie chcę nic zmieniać w tabeli marka! - ona ma być stala ze wszystkimi dostępnymi markami). Chcę tylko edytować dane samochodu w przypadku blędnego wpisania w celu poprawy tego blędu i żeby te zmiany byly widoczne gdy wyswietlam na stronie spis aut. No a tak na marginesie to przy edycji chcialbym zeby markę można bylo wybrać z pola listy (z tabeli marka). |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 24.05.2004 Ostrzeżenie: (0%) ![]() ![]() |
czy ktoś może mi powiedzieć jak mam rozwiązać ten problem?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Proszę |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 2.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
To już chyba rozumiem, o co Ci chodzi. W takim razie funkcję edit_auta zrób tak:
[php:1:694cc8fbb3]<?php // funkcja edit_auta po kliknięciu w link "edytuj" wyświetla formularz //do edycji marki samochodu (zmienna marka_nazwa) function edit_auta($auto_id) { // w zapytaniu pobieżemy również auto_marka_id $r = mysql_query("SELECT auto_id , marka_nazwa, auto_marka_id FROM auta, marka WHERE marka_id=auto_marka_id and auto_id = $auto_id") or die("error: auta.php - edit_auta"); $a = mysql_fetch_array($r); echo '<form action="auta.php" method="get">'; echo '<input type="hidden" name="action" value="post_edit">'; echo '<input type="hidden" name="auto_id" value="'.$a["auto_id"].'">'; echo '<td width="60">Marka</td>'; // tutaj dodamy select ze wszystkimi markami z tabeli marka echo '<td width="260"><select name="auto_marka_id">'; $r2 = mysql_query("SELECT * FROM marka") or die("error: auta.php - edit_auta"); while($a2 = mysql_fetch_array($r2)) { if($a2['marka_id']==$a1['auto_marka_id']) // tutaj sprawdzamy, czy dana marka w selekcie jest aktualnie przypisana do danego auta marka i jesli tak, to ta pozycja będzie domyślnie zaznaczona { echo '<option value="'.$a2['marka_id'].'" checked>'.a2['marka_nazwa'].'</option>'; } else { echo '<option value="'.$a2['marka_id'].'">'.a2['marka_nazwa'].'</option>'; } } echo '</select></td></tr>'; echo '<p align="center"><input type="submit" value="Akceptuj"></p>'; echo '</form>'; } ?>[/php:1:694cc8fbb3] 1. Dodałem tu listę rozwijalną, ze wszystkimi markami (domyślnie wybrana jest aktualna marka). 2. Chociaż na liście pokazuje się nazwa marki, to formularz przesyła dalej id_marki, więc update, który napisałeś powinien teraz już działać. |
|
|
![]()
Post
#14
|
|
Grupa: Postów: 0 Pomógł: Dołączył: -- Ostrzeżenie: (0%) ![]() ![]() |
dzieki bardzo! sprawdze to po 16ej bo teraz jestem w pracy, ale mam nadzieje ze powinno dzialac:)
|
|
|
![]()
Post
#15
|
|
Grupa: Postów: 0 Pomógł: Dołączył: -- Ostrzeżenie: (0%) ![]() ![]() |
Wyświtla mi pharse error w tej lini:
echo '<option value="'.$a2['marka_id'].'" checked>'.a2['marka_nazwa'].'</option>'; |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 24.05.2004 Ostrzeżenie: (0%) ![]() ![]() |
nie było $ przy zmiennej:)
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 24.05.2004 Ostrzeżenie: (0%) ![]() ![]() |
nie było dolara przy zmiennej
|
|
|
![]()
Post
#18
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
I do tego potrzebne było zakładanie nowego wątku?
http://forum.php.pl/viewtopic.php?t=17165 Zamykam obydwa. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 01:56 |