Anonymous
19.05.2004, 11:24:09
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
hwao
19.05.2004, 11:25:16
BBcode prosze uzywac... na przyszlosc
I podaj jaki blad wywala...
ToPeR
19.05.2004, 12:55:47
Taka sugestia:
nawałęś funkcję:
POST_edit_auta a użyłeś methody: GET...
Sprawdź czy masz wogóle włączone Register Globals
Propobuję przejść na: $_GET[] i $_POST[]
cboot
19.05.2004, 23:52:02
[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.
Anonymous
20.05.2004, 06:36:13
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

? Czy to co jest wpisane po SET jest dobrze?? Jeśli tak co ma być po WHERE?
Dzięki za odpowiedzi:)
cboot
22.05.2004, 00:53:00
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ć.
Anonymous
23.05.2004, 20:25:41
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:(
cboot
24.05.2004, 01:51:58
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.
Anonymous
24.05.2004, 07:06:14
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]
cboot
24.05.2004, 15:34:55
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ć.
szpula
24.05.2004, 16:45:23
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).
szpula
24.05.2004, 20:59:37
czy ktoś może mi powiedzieć jak mam rozwiązać ten problem?
Proszę
cboot
25.05.2004, 00:30:43
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ć.
Anonymous
25.05.2004, 06:23:10
dzieki bardzo! sprawdze to po 16ej bo teraz jestem w pracy, ale mam nadzieje ze powinno dzialac:)
Anonymous
25.05.2004, 07:01:58
Wyświtla mi pharse error w tej lini:
echo '<option value="'.$a2['marka_id'].'"
checked>'.a2['marka_nazwa'].'</option>';
szpula
25.05.2004, 09:44:44
nie było $ przy zmiennej:)
szpula
25.05.2004, 10:08:33
nie było dolara przy zmiennej
scanner
25.05.2004, 10:10:28
I do tego potrzebne było zakładanie nowego wątku?
http://forum.php.pl/viewtopic.php?t=17165
Zamykam obydwa.
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.