Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Nie działa aktualizacja
Forum PHP.pl > Forum > Przedszkole
ttb
Witam,
próbuję zaktualizować rekord w tabeli MySQL. Dane są pobierane przez formularz ale po kliknięciu popraw nic się nie zmienia, pozostają stare dane.

[php]
piotrooo89
po 1 wywal te@
  1. <?php
  2. $connection = mysql_connect('localhost', 'xxxxx', 'yyyyy')
  3. or die('Brak połączenia z serwerem MySQL');
  4. $db = mysql_select_db('zzzzz', $connection)
  5. or die('Nie mogę połączyć się z bazą danych')
  6. ?>


i tu powinno być zamiast:
  1. <?php
  2. elseif($a == 'save')
  3. ?>


  1. <?php
  2. elseif($_POST['a'] == 'save')
  3. ?>
ttb
zmieniłem ale nadal nie działa... masz może jeszcze jakiś pomysł? bo 5 dni przeszukuję internet i nie mogę znaleźć rozwiązania... wszystko działa tylko nie to...
redelek
A zwraca Ci jakiś błąd ?
Ja mam taki problem na WebSrv i WampSrv, że musi być to ujęte w takich apostrofach

  1. <?php
  2. mysql_query("UPDATE test SET `kod`='$kod' WHERE `id`='$id'")
  3. ?>


Zobacz co dodałem w polach kod i id takie smieszne pazurki ``.

Nie wiem dlaczego tak jest, na serwerach roboczych faktycznie nie jest to wymagane.
Dodatkowo zrób sobie echo danych które odbierasz z formularza, może nie wykonuje on się poprawnie.


Pozdrawiam
Redelek
ttb
dzięki redelek ale dalej bez zmian...
formularz odczytuje dane dla ID z tabeli, wyświetla pole do edycji, pozwala zmienić zawartość pola ale po wciśnięciu POPRAW w wylistowanej tabeli pojawiają się te same dane co przed edycją...
batman
Proszę dodać bbcode oraz poprawić temat. Same tagi nie są tematem.
ttb
poprawione, przepraszam...

i oczywiście nadal szukam podpowiedzi gdzie może leżeć problem... może coś z ID jest nie tak...

czy może być to wina tego, że pobieram tylko jedno pole z rekordu a nie wszystkie? Może resztę powiniennem ukryć poleceniem "hidden"...
kazag
Kod
/* uaktualniamy tabelę test */
mysql_query("UPDATE test SET kod='$kod' WHERE id='$id'")
or die('Błąd zapytania');
echo 'Dane zostały zaktualizowane';


moze to nie ma znaczenia, ale zrób:
$sql=mysql_query("UPDATE test SET kod='$kod' WHERE id='$id'")
a nie samo mysql_query.

potem np:
if(!$sql)
{
echo "Kupa, dane nie zostały zaktualizowane";
exit();
}

Poza tym, to zapytanie jest poprawne moim zdaniem... Czy jesteś pewien, ze masz zmieną "id" w ogole? Mże sie nie przesyła?
ttb
tak, mam zmienną ID (autonumerowanie), klucz podstawowy...
pobiera odpowiednie ID ale coś jest nie tak z przesłaniem poprawionej zmiennej KOD...
spróbuję Twój pomysł...
kazag
chodzi nie o to, czy masz pole id w bazie, ale czy formularz działa, daj sobie echo $id."-".$kod; i zobacz, czy pokazą ci sie te wartosci, ktore chcesz wstawic do bazy.

Kod
/* odbieramy zmienne z formularza */
$id = $_POST['id'];
$kod = $_POST['kod'];

echo $id."-".$kod;
ttb
hmm... teraz to już nic nie rozumiem... wpisałem linijkę kodu z ECHO... i nic się nie zmieniło - czyli nie czyta zmiennych... dobrze rozumiem?
kazag
rozumiem, ze dostałeś tylko ten myślnik, który jest między nimi, tak?
jesli widzisz tylko ten myślnik, to znaczy ni mniej ni wiecej tyle, że zmienne id i kod gdzieś giną.

poza tym:
$a nigdy nie będzie "save", ponieważ wysyłasz formularz postem, a zmienne odczytujesz z $_GET... zmień na:
$a=$_POST['a'] i $id=$_POST['id'], albo zmień method na "get".
ttb
nie, nawet myślnika nie pokazało...
zmieniłem POST na GET i też bez rezultatu...
Spawnm
pokaż jak teraz wygląda twój kod smile.gif
ttb
Kod
<?php
// łączymy się z bazą danych
    $connection = mysql_connect('localhost', 'xxx', 'yyy')
    or die('Brak połączenia z serwerem MySQL');
    $db = mysql_select_db('zzz', $connection)
    or die('Nie mogę połączyć się z bazą danych');

$a = $_GET['a'];
$id = $_GET['id'];

if($a == 'edit' and !empty($id)) {
    /* zapytanie do tabeli */
    $wynik = mysql_query("SELECT * FROM test WHERE id='$id'")
    or die('Błąd zapytania');
    /*wyświetlamy wyniki, sprawdzamy, czy zapytanie zwróciło wartość większą od 0 */
    if(mysql_num_rows($wynik) > 0) {
         /* odczytujemy zawartość wiersza z tabeli */
        $r = mysql_fetch_assoc($wynik);
        /* wczytujemy dane do formularza */
        /* w formularz znajdują się ukryte pola "a" z wartością "save" i pole "id" z wartością zmiennej id */
        echo '<form action="st_dro_1.php" method="get">
        <input type="hidden" name="a" value="save" />
        <input type="hidden" name="id" value="'.$id.'" />
        kod:<br /><input type="text" name="kod" value="'.$r['kod'].'" /><br />
        <input type="submit" value="popraw" />
        </form>';
    }
}
elseif($_POST['a'] == 'save')
{
    /* odbieramy zmienne z formularza */
    $id = $_POST['id'];
    $kod = $_POST['kod'];
echo $id."-".$kod;
  
    /* uaktualniamy tabelę test */
        mysql_query("UPDATE test SET kod='$kod' WHERE id='$id'")
or die('Błąd zapytania');
    echo 'Dane zostały zaktualizowane';
}
?>
Spawnm
echo '<form action="st_dro_1.php" method="get">

nie działa bo teraz wysyłasz get a chcesz odebrać post tongue.gif
ttb
miałem wcześniej POST i też nie działało... sad.gif
Spawnm
to zmień teraz i będzie działało ,
wcześniej miałeś post i odbierałeś get , teraz masz get i odnierasz post smile.gif
ttb
zmieniłem get na post i dalej nie zmienia... sad.gif
redelek
U mnie działa bez problemu

Nie chciało mi się robić więcej więc spreparowałem link smile.gif

Odbierasz tak dane z innego formularza prawda
http://localhost/PHP_forum/Problem_z_aktua...a=edit&id=2
Po wpisaniu tych danych pokazał mi się formularz. Zmieniłem coś w nim i wybrałem POPRAW.

Poprawił w bazie bez problemów.

Tak wygląda mój kod

  1. <?php
  2. // łączymy się z bazą danych
  3.    $connection = mysql_connect('localhost', 'root', '') // ZMIEŃ NA SWOJE DANE !!!
  4.    or die('Brak połączenia z serwerem MySQL');
  5.    $db = mysql_select_db('zzz', $connection) // ZMIEŃ NA SWOJE DANE !!!
  6.    or die('Nie mogę połączyć się z bazą danych');
  7.  
  8. $a = $_GET['a']; // te dane odbierasz z innego formularza
  9. $id = $_GET['id'];// te dane odbierasz z innego formularza
  10.  
  11. if($a == 'edit' and !empty($id)) {
  12.    /* zapytanie do tabeli */
  13.    $wynik = mysql_query("SELECT * FROM zzz WHERE id='$id'")
  14.    or die('Błąd zapytania');
  15.    /*wyświetlamy wyniki, sprawdzamy, czy zapytanie zwróciło wartość większą od 0 */
  16.    if(mysql_num_rows($wynik) > 0) {
  17.         /* odczytujemy zawartość wiersza z tabeli */
  18.        $r = mysql_fetch_assoc($wynik);
  19.        /* wczytujemy dane do formularza */
  20.        /* w formularz znajdują się ukryte pola "a" z wartością "save" i pole "id" z wartością zmiennej id */
  21.        
  22.        /* action ZMIEŃ NA SWOJ PLIK ja dałem ind.php !!!!! */
  23.        echo '<form action="ind.php" method="POST">
  24.        <input type="hidden" name="a" value="save" />
  25.        <input type="hidden" name="id" value="'.$id.'" />
  26.        kod:<br /><input type="text" name="kod" value="'.$r['kod'].'" /><br />
  27.        <input type="submit" value="popraw" />
  28.        </form>';
  29.    }
  30. }
  31. elseif($_POST['a'] == 'save')
  32. {
  33.    /* odbieramy zmienne z formularza */
  34.    $id = $_POST['id'];
  35.    $kod = $_POST['kod'];
  36.  
  37.    /* uaktualniamy tabelę test */
  38.        mysql_query("UPDATE zzz SET kod='$kod' WHERE id='$id'")
  39. or die('Błąd zapytania');
  40.    echo 'Dane zostały zaktualizowane';
  41. }
  42. ?>


Zobacz może się uda. Pierwsze masz dobrze chyba bo odbierasz coś GET z innego formularza. W formularzu do poprawy już uzywasz metody POST
to i dane odbieraj post.
Drobne modyfikacje i działa jak szalone

Przed:
id kod
1 test1
2 test2
3 test3

Po wysłaniu
1 zmiana_test1
2 zmiana_test2
3 zmiana_test3


Redelek
ttb
dzięki za pomoc przy problemie ale nadal nic...
wkleiłem Twój skrypt (zmieniłem dane połączenia, nazwę tabeli po SELECT, plik action="..." i ta dole tabelę do UPDATE...
po zmianie treści pola, kliknięciu popraw, przechodzę do strony podaniej w action="..." i widzę to samo co było przed zmianą...

dalej proszę: POMOCY !
redelek
Jak wygląda przejście z poprzedniego formularza do edycji danych możesz pokazać?
Bo jakoś przechodzisz na ten formularz do edycji ?

Albo wyślij mi wszystko na e-mail piotr.redel[ET]gmail.com

Pozdrawiam
Redelek
ttb
kod porzedniego formularza wygląda następująco:

Kod
<link rel="stylesheet" href="style.css" type="text/css" />

<a href="b_main.php">STRONA GŁÓWNA</a><br><br>
PRZESYŁKI W DRODZE DO ODBIORCY<br>
<?php
    // łączymy się z bazą danych
    $connection = @mysql_connect('localhost', 'xxx', 'yyy')
    or die('Brak połączenia z serwerem MySQL');
    $db = @mysql_select_db('zzz', $connection)
    or die('Nie mogę połączyć się z bazą danych');
    

/* zapytanie do konkretnej tabeli */
$wynik = mysql_query("SELECT * FROM test WHERE status='droga'")
or die('Błąd zapytania');

/*
wyświetlamy wyniki, sprawdzamy,
czy zapytanie zwróciło wartość większą od 0
*/


if(mysql_num_rows($wynik) > 0) {
    /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
    echo "<table cellpadding=\"2\" border=1>";
    while($r = mysql_fetch_assoc($wynik)) {
        
echo "<tr>";
        echo "<td>".$r['id']."</td>";
        echo "<td>".$r['datodb']."</td>";
        echo "<td>".$r['nrzam']."</td>";
        echo "<td>".$r['paleta']."</td>";
        echo "<td>".$r['paczka']."</td>";
        echo "<td>".$r['kod']."</td>";
        echo "<td>".$r['miasto']."</td>";
        echo "<td>".$r['status']."</td>";
        echo "<td>
       <a href=\"edit.php?a=edit&amp;id={$r['id']}\">EDIT</a>
       </td>";
        echo "</tr>";
    }
    echo "</table>";
}

?>


a po kliknięciu EDIT mamy kod:

Kod
<?php
// łączymy się z bazą danych
    $connection = mysql_connect('localhost', 'xxx', 'yyy')
    or die('Brak połączenia z serwerem MySQL');
    $db = mysql_select_db('zzz', $connection)
    or die('Nie mogę połączyć się z bazą danych');

$a = $_GET['a']; // te dane odbierasz z innego formularza
$id = $_GET['id'];// te dane odbierasz z innego formularza

if($a == 'edit' and !empty($id)) {
   /* zapytanie do tabeli */
   $wynik = mysql_query("SELECT * FROM test WHERE id='$id'")
   or die('Błąd zapytania');
   /*wyświetlamy wyniki, sprawdzamy, czy zapytanie zwróciło wartość większą od 0 */
   if(mysql_num_rows($wynik) > 0) {
        /* odczytujemy zawartość wiersza z tabeli */
       $r = mysql_fetch_assoc($wynik);
       /* wczytujemy dane do formularza */
       /* w formularz znajdują się ukryte pola "a" z wartością "save" i pole "id" z wartością zmiennej id */
        
       /* action ZMIEŃ NA SWOJ PLIK ja dałem ind.php !!!!! */
       echo '<form action="st_dro_1.php" method="POST">
       <input type="hidden" name="a" value="save" />
       <input type="hidden" name="id" value="'.$id.'" />
       kod:<br /><input type="text" name="kod" value="'.$r['kod'].'" /><br />
       <input type="submit" value="popraw" />
       </form>';
   }
}
elseif($_POST['a'] == 'save')
{
   /* odbieramy zmienne z formularza */
   $id = $_POST['id'];
   $kod = $_POST['kod'];

   /* uaktualniamy tabelę test */
       mysql_query("UPDATE test SET kod='$kod' WHERE id='$id'")
or die('Błąd zapytania');
   echo 'Dane zostały zaktualizowane';
}
?>
redelek
Cytat(ttb @ 25.03.2009, 13:41:17 ) *
<a href=\"edit.php?a=edit&amp;id={$r['id']}\">EDIT</a>


A co to jest amp; questionmark.gif

Dlaczego id={$r['id']} ? bez tych klamrowych nawiasów.
Straszne kombinacje masz w tym linku
Zrób sobie zmienną
$id_edit=$r['id'];

I zobacz nie ładniej wygląda link?

<a href=\"edit.php?a=edit&id=$id_edit\">EDIT</a>
ttb
teraz po kliknięciu edytuj pokazuje mi się pusta strona
a link wygląda tak:
http:// ... edit.php?a=edit&id=
czyli nie wybiera rekordu z ID
redelek
pokaż kod gdzie to wstawiłeś ?
ttb
Kod
<?php
    // łączymy się z bazą danych
    $connection = @mysql_connect('localhost', 'xxx', 'yyy')
    or die('Brak połączenia z serwerem MySQL');
    $db = @mysql_select_db('zzz', $connection)
    or die('Nie mogę połączyć się z bazą danych');
    

/* zapytanie do konkretnej tabeli */
$wynik = mysql_query("SELECT * FROM test WHERE status='droga'")
or die('Błąd zapytania');

/*
wyświetlamy wyniki, sprawdzamy,
czy zapytanie zwróciło wartość większą od 0
*/
$id_edit=$r['id'];

if(mysql_num_rows($wynik) > 0) {
    /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
    echo "<table cellpadding=\"2\" border=1>";
    while($r = mysql_fetch_assoc($wynik)) {
        
echo "<tr>";
        echo "<td>".$r['id']."</td>";
        echo "<td>".$r['datodb']."</td>";
        echo "<td>".$r['nrzam']."</td>";
        echo "<td>".$r['paleta']."</td>";
        echo "<td>".$r['paczka']."</td>";
        echo "<td>".$r['kod']."</td>";
        echo "<td>".$r['miasto']."</td>";
        echo "<td>".$r['status']."</td>";
        echo "<td>



<a href=\"edit.php?a=edit&id=$id_edit\">EDIT</a>


       </td>";
        echo "</tr>";
    }
    echo "</table>";
}

?>
redelek
Ło rany

PHP nie umie myśleć
Za wcześnie to wstawiłeś czy widzisz gdzieś wyżej zmiennną $r ?
Pojawia się topiero ...... TUUUUU
  1. <?php
  2. $id_edit=$r['id'];
  3.  
  4. if(mysql_num_rows($wynik) > 0) {
  5.    /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
  6.    echo "<table cellpadding=\"2\" border=1>";
  7.    while($r = mysql_fetch_assoc($wynik)) { //  !UUUUUUUUUUUUU/
  8.        
  9. echo "<tr>";
  10.        echo "<td>".$r['id']."</td>";
  11.        echo "<td>".$r['datodb']."</td>";
  12.        echo "<td>".$r['nrzam']."</td>";
  13.        echo "<td>".$r['paleta']."</td>";
  14.        echo "<td>".$r['paczka']."</td>";
  15.        echo "<td>".$r['kod']."</td>";
  16.        echo "<td>".$r['miasto']."</td>";
  17.        echo "<td>".$r['status']."</td>";
  18.        echo "<td>
  19. ?>


Musisz zrobić tak

  1. <?php
  2. echo "<tr>";
  3.        echo "<td>".$r['id']."</td>";
  4.        $id_edit=$r['id']; // TU TU
  5.        echo "<td>".$r['datodb']."</td>";
  6.        echo "<td>".$r['nrzam']."</td>";
  7.        echo "<td>".$r['paleta']."</td>";
  8.        echo "<td>".$r['paczka']."</td>";
  9.        echo "<td>".$r['kod']."</td>";
  10.        echo "<td>".$r['miasto']."</td>";
  11.        echo "<td>".$r['status']."</td>";
  12.        echo "<td>
  13.       <a href=\"edit.php?a=edit&id=$id_edit\">EDIT</a>
  14.       </td>";
  15.        echo "</tr>";
  16.    }
  17.    echo "</table>";
  18. ?>
ttb
ojoj... tak, złe miejsce....
teraz ID jest dobrze wybrane... ale zapisu po zmianie wartości pola nadal nie ma... sad.gif
nawet jak zmienię na inne pole do edycji to też nic nie zmienia...
redelek
A spreparuj swój link tak jak to ja wcześniej zrobiłem
localhost/edit.php?a=edit&id=2 // oczywiście wpisz rekord który istnieje w bazie

Wyświetli Ci się Twój formularz , wprowadź zmiany i zobacz czy zadziała.
ttb
po wklejeniu linku otwera mi się strona edycji danego rekordu, wprowadzam zmianę, klikam popraw i przy podglądzie rekordu w tabeli nic się nie zmienia....
redelek
A wyświetl co Ci zwraca mysql_query
o tak
  1. <?php
  2. echo mysql_query("UPDATE zzz SET kod='$kod' WHERE id='$id'")
  3. or die('Błąd zapytania');
  4. ?>
ttb
nic, nie ma żadnego błędu / komunikatu...
redelek
a dodaj na samym początku skryptu edit.php
coś takiego

  1. <?php
  2. ini_set('display_errors','1');
  3. ?>


i podeślij wyniki. Naprawdę Twój skrypt działa, sprawdziłem na serwerze zewnętrznym i cały czas na localhost
ttb
nie mam czego podesłać... nie pokazało żadnego błędu... przeszło znowu do tabeli wyników nie zmieniając rekordu...
no właśnie... wedle wszelkich prawideł skrypt powinien działać...
redelek
A jak wracasz na stronę z danymi ?
ttb
redelek, idealna wskazówka... działa! w action="plik.php" miałem wpisany zły plik...

dziękuję wszystkim za pomoc i wskazówki
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.