Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z aktualizacją danych w bazie. Ciąg dalszy.
Forum PHP.pl > Forum > PHP
Józek
Wyświetlam stare dane z bazy w odpowiednich polach formularza i po zmianie ich wartości w polach trzeba je zapisać do bazy. Kręcę się w koło i ciągle nie mogę tego zrobić. Pewnie to jest banalnie proste ale jak ktoś mógłby mnie naprowadzić byłbym wdzięczny.

<form action="popraw.php?co=$wiersz->id" method="get">
<input type="text" value="<?echo $wiersz->pole1?>" name="pole1" />tekst<br />
<input type="text" value="<?echo $wiersz->pole2?>" name="pole2" />liczba
<input type="submit" value="popraw" />
</form>


[php:1:2eaaaf9157]<?php
$jaki = $_GET['co'];
$popraw = "UPDATE `testowa` SET `pole1` = '$_GET['pole1']' 'pole2' = '$_GET['pole2']' WHERE `id` = '$jaki' LIMIT 1 ;";

?>[/php:1:2eaaaf9157]
uboottd
Kod
<form action="popraw.php" method="get">

<input type="hidden" name="co" value="<?echo $wiersz->co?>"  />

<input type="text" value="<?echo $wiersz->pole1?>" name="pole1" />tekst<br />

<input type="text" value="<?echo $wiersz->pole2?>" name="pole2" />liczba

<input type="submit" value="popraw" />

</form>


[php:1:308020283f]
$popraw = "UPDATE `testowa` SET `pole1` = ".$_GET['pole1'].", `pole2` = ".$_GET['pole2']." WHERE `id` = '$jaki' LIMIT 1 ";
[/php:1:308020283f]
Józek
Czy istotnie ten kod powinien zamienić dane na nowe?
Też kombinowałem z polami ukrytymi, ale efekt jest podobny ? wyświetla się komunikat, że dane poprawnie zmienione ale nic nie zostaje zamienione. A przecież to taka podstawowa czynność.
Ponadto w formularzu występują wszystkie typy pól, i też nie mogę poprawnie wyświetlić w formularzu starych opcji i zaznaczeń.
Podaję jeszcze raz mój pierwotny kod.

[php:1:a39a0d9227]<?php
$pokaz = $_GET["co"];
$zapytanie = "SELECT * FROM `testowa` WHERE `id` = '$pokaz'";
$wynik = mysql_query($zapytanie);
$ile = mysql_num_rows($wynik);
for ($i=0; $i <$ile; $i++)
{
$wiersz = mysql_fetch_object($wynik);
?>
<form action="popraw.php?co=$wiersz->id" method="get">
<input type="text" value="<?echo $wiersz->pole1?>" name="pole1" />tekst<br />
<input type="text" value="<?echo $wiersz->pole2?>" name="pole2" />liczba
<input type="submit" value="popraw" />
</form>

?>[/php:1:a39a0d9227]

[php:1:a39a0d9227]<?php
$jaki = $_GET['co'];
$popraw = "UPDATE `testowa` SET `pole1` = '$_GET['pole1']' 'pole2' = '$_GET['pole2']' WHERE `id` = '$jaki' LIMIT 1 ;";

$wynik_poprawy = mysql_query($popraw);

if ($popraw) {
echo mysql_affected_rows()." <b>Dane poprawnie zmienione w bazie</b><br />
<br />
";
echo "<a href="index.php">wróc</a>";
}
else
echo "Bł?d zapisu";

?>[/php:1:a39a0d9227]

Ps.
I jak pętla -for- wyświetla dane w kilku miejscach na stronie korzystając z tego samego zbioru wyników to nie wyświetla dobrze wyników, gdzieś czytałem że trzeba "zresetować zbiór wyników" lub coś takiego. Ale nie mogę do dojść co to było.
uboottd
1.
<form action="popraw.php?co=$wiersz->id" method="get"> - to jest blad. Nie mozna umieszczac w action wartosci zmiennych. Tam ma byc sam adres podstawowy strony i nic wiecej. Wszelkie wartosci musisz przekazywac polami typu hidden.

2. $popraw = "UPDATE `testowa` SET `p... - tu masz abosluitnie pomieszane " ' i ` ZApisz to zapytanie tak jak ci podalem.

3. if ($popraw) { - jest zawsze spelnione, tobie raczej chodzilo o if ($wynik_poprawny) {
Józek
No to wracamy do punktu wyjścia. Powtarzam, że twój kod już testowałem i nic. Fakt, popełniłem błąd przy sprawdzaniu warunku, ale to nie jest sedno sprawy. Tylko ,że chyba i Ty się pomyliłeś bo do czego ma się odwoływać zmienna "$jaki". Przeglądałem inne skrypty o podobnym działaniu i wedle logiki mój przyklad powinien działać. A może ma to związek z wersją bazy danych, ja mam obecnie MySql - 4.
uboottd
To znaczy po prostu tyle ze udalo Ci sie popelnic wiecej bledow w tak krotkim skrypcie niz ustawa przewiduje. Jest tego tyle ze nawet nie udalo mnie sie wszystkich wylapac od razu.

1. nie $_GET tylko $_POST lub jeszcze lepiej $_REQUEST

2. Zapytanie napisalem Ci dobrze. $jaki ustawiasz linijke wczesniej.
Józek
Dzięki "uboottd" jesteś genialny. Nigdy bym na to nie wpadł, że skrypt który nie działa zawiera błędy. "Więcej niż ustawa przewiduje". Nawet jeden przecinek rozwala cały skrypt.
members_of_mayday
niewiem po co Ci metoda GET daj ją na POST

może tak będzie ok? :

[php:1:dea9885f8d]<?php

$db = mysql_connect("host", "user", "pass") ;
mysql_select_db("nazwa_tabeli", $db);
$jaki = mysql_query("UPDATE `user`
SET pole = '$pole1',
pole2 = '$pole2'
WHERE id = '$jaki'
Limit 1");
$wynik_poprawy = mysql_query($popraw);
if ($jaki) {
echo "<b>Dane poprawnie zmienione w bazie</b><br><br>";
echo "<a href=index.php>wróc</a>";
} else {
echo "Błąd zapisu";
}

?>[/php:1:dea9885f8d]

Niewiem czy jest dobrze chodź wątpie smile.gif nie testowałęm tego. Po zatym jak na zwykłą aktualizacje tabeli b skąplikowany ten Twój sktypt zrąbił bym go inaczej

jak by co wal na PW
uboottd
Jesli jest register_globals to na moje oko powinien dzialac (oczywiscie po zmienie w zapytaniu $jaki na $co - bo tak bylo w formularzu).
Józek
Bingo
A wystarczyło zmienić cudzysłowy w zapytaniu do bazy.
I nie żadne GETY czy POSTY i to działa i to. Jedyny błąd to próba przekazania parametru przez submit (dzięki uboottd).

[php:1:2f6c1d3f53]<?php
$popraw = "UPDATE `testowa` SET `pole1` = '".$_GET['pole1']."' , `pole2` = '".$_GET['pole2']."' WHERE `id` = '".$_GET['co']."' LIMIT 1 ";
?>[/php:1:2f6c1d3f53]
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.