Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Niedzialajacy UPDATE
Forum PHP.pl > Forum > Przedszkole
nevar
Formularz do edycji

edytuj.php
  1. <?
  2. include ("baza.php");
  3. $baza = mysql_connect ($mysql_host, $mysql_user, $mysql_haslo);
  4. mysql_select_db($mysql_baza);
  5. $wynik = mysql_query("select * from quiz where id=".$_GET['id']);
  6.  
  7. $pytanie = mysql_fetch_array($wynik);
  8.     print '<form action="update.php" method="POST">';
  9.         print '<font face="Arial" size="2">Pytanie:<textarea name="pyt" rows=5 cols=30 warp=phisical>'.$pytanie['pyt'].'</textarea><br>';
  10.         print '<font face="Arial" size="2">Odp a:<textarea name="a" rows=5 cols=30 warp=phisical>'.$pytanie['odpa'].'</textarea><br /></font>';
  11.         print '<font face="Arial" size="2">Odp b:<textarea name="b" rows=5 cols=30 warp=phisical>'.$pytanie['odpb'].'</textarea><br /></font>';
  12.         print '<font face="Arial" size="2">Odp c:<textarea name="c" rows=5 cols=30 warp=phisical>'.$pytanie['odpc'].'</textarea><br /></font>';
  13.      print '<font face="Arial" size="2">Odp poprawna:<textarea name="praw">'.$pytanie['odppraw'].'</textarea><br /></font>';
  14.      print '<input type="hidden" name="id" value='.$_GET['id'].'><input type="submit" value="edytuj"></form>';
  15.       
  16. ?>


i skrypt kóry powinien wykonywać to UPDATE

update.php
  1. <?php
  2. include ("baza.php");
  3. $baza = mysql_connect ($mysql_host, $mysql_user, $mysql_haslo);
  4. mysql_select_db($mysql_baza);
  5.  
  6. mysql_query("update quiz set pyt='".$_POST['pyt']."',
  7.     odpa='".$_POST['a']."',
  8.     odpb='".$_POST['b']."',
  9.     odpc='".$_POST['c']."'
  10.     where id=".$_POST['id']);
  11.   
  12. ?>


Co w tym jest nie tak bo nie chce mi zmieniać tych danych??
LBO
hmmmm, według mnie zapytanie skonstruowane poprawnie (ja osobiscie wolę SQL'owe komendy pisać duzymi literami... tak, żeby się lpiej czytało - Tobie też tak radzę)

napisz, czy mysql_query" title="Zobacz w manualu php" target="_manual, wyplówa jakiś błąd.
TomASS
Jak mysql_fetch_array() nie burzy się, że mu brakuje tablicy to znaczy, że zapytanie jednak coś zwraca - problem pewnie leży po stonie mysql_fetch_array - przynajmniej wszystko na to wskazuje. Zobacz ten temat pkt 1, a na wypadek gdyby mysql_fetch_array zwracało jednak jakiś błąd, ale zapomniałeś napisać to zobacz na pkt 2
nevar
Zrobiłem tak:

  1. <?php
  2. include ("baza.php");
  3. $baza = mysql_connect ($mysql_host, $mysql_user, $mysql_haslo);
  4. mysql_select_db($mysql_baza);
  5.  
  6. $update = mysql_query("update quiz set pyt='.$_POST['pyt'].',
  7. odpa='.$_POST['a'].',
  8. odpb='.$_POST['b'].',
  9. odpc='.$_POST['c'].',
  10. where id=".$_POST['id'];
  11.  
  12. if($update) {
  13.  echo '<p>Zapisano do bazy</p>';
  14. } else {
  15.  echo mysql_error(); echo '<p>Błąd! Spróbuj ponownie</p>';
  16. };
  17. };
  18.  
  19. ?>


ale nic mi nie wyświetla...
LBO
a co masz w baza.php? Może tam gdzieś się skrypt wywala?
nevar
w baza.php mam:

  1. <?
  2. $mysql_host = "localhost";
  3. $mysql_user = "user";
  4. $mysql_haslo = "haslo";
  5. $mysql_baza = "baza";
  6. ?>


Dlaczego ten update nie działa??
Nie mam już pojęcia co to może być...
siemakuba
sprawdź kazde zapytanie:

  1. <?php
  2.  
  3.  
  4. $baza = mysql_connect ($mysql_host, $mysql_user, $mysql_haslo);
  5.  
  6. echo 'mysql_connect error: '.mysql_error().'<br>';
  7.  
  8.  
  9. $db = mysql_select_db($mysql_baza);
  10.  
  11. echo 'mysql_select_db error: '.mysql_error().'<br>';
  12.  
  13.  
  14. mysql_query( _TWOJE_ZAPYTANIE_ );
  15.  
  16. echo 'mysql_query error: '.mysql_error().'<br>';
  17. echo 'Zmieniono: '.mysql_affected_rows().'<br>';  
  18.  
  19. ?>


ostatnia linia powie ci ile wierszy w tabeli zostalo zmienione przez zapytane. Jezeli wynik jest 0 a wczesniej nie bylo bledow, znakiem to, ze nie masz w tabeli wierszy spelaniajacych warunek z WHERE zapytania.

i jeszcze z manuala: mysql_affected_rows" title="Zobacz w manualu php" target="_manual

Cytat
Notatka:  Podczas operacji UPDATE, MySQL nie aktualizuje kolumn w których nowa wartość jest identyczna z poprzednią. Możliwe jest zatem, że zwrócona przez mysql_affected_rows() liczba nie będzie odpowiadać liczbie wierszy pasujących do zapytania, ale tych, które zostały faktycznie zmienione.


pozdr.
TomASS
connect połącz z die tak:

  1. <?php
  2.  
  3. mysql_connect ($mysql_host, $mysql_user, $mysql_haslo) or die ("Nie masz połączenie do bazy danych");
  4. ?>
nevar
Dalej nic z tego... sad.gif

W całości to wygląda tak:

Najpierw wyświetla mi wszystkie pytania, każde z przyciskiem edytuj i usuń:
  1. <?php
  2. include ("baza.php");
  3. $baza = mysql_connect ($mysql_host, $mysql_user, $mysql_haslo);
  4. mysql_select_db($mysql_baza);
  5. $wynik = mysql_query("select * from quiz");
  6.  
  7.  
  8. if (mysql_num_rows ($wynik)>0)
  9. {
  10. $i=1;
  11. while($pytanie = mysql_fetch_array($wynik))
  12. {
  13. print '<font face="Arial" size="3">'.$i.'.</font>';
  14. print '<font face="Arial" size="3">'.$pytanie['pyt'].'</font><br>';
  15. print '<font face="Arial" size="2"><input type="radio" name=p'.$pytanie['id'].' value="a" />'.$pytanie['odpa'].'<br></font>';
  16. print '<font face="Arial" size="2"><input type="radio" name=p'.$pytanie['id'].' value="b" />'.$pytanie['odpb'].'<br></font>';
  17. print '<font face="Arial" size="2"><input type="radio" name=p'.$pytanie['id'].' value="c" />'.$pytanie['odpc'].'<br></font>';
  18. print '<font face="Arial" size="3" color="green">Poprawna odpowiedź to:'.$pytanie['odppraw'].'</font><br>';
  19.  print '<input type="button" value="Edytuj" onClick="window.open('edytuj.php?id_pyt='.$pytanie['id'].'''nazwa').focus(); return false" />';
  20. print '<input type="button" value="Usuń" onClick="if(window.confirm('Czy na pewno usunąć ?')){window.location='usun.php?id_pyt='.$pytanie['id'].'';}">';
  21. print '<br><hr>';
  22. $i++;
  23. }
  24. }
  25.  
  26. ?>


Po kliknieciu na edytuj otwiera się okno edycji:
  1. <?php
  2. include ("baza.php");
  3. $baza = mysql_connect ($mysql_host, $mysql_user, $mysql_haslo);
  4. mysql_select_db($mysql_baza);
  5. $wynik = mysql_query("select * from quiz where id=".$_GET['id_pyt']);
  6.  
  7. $pytanie = mysql_fetch_array($wynik);
  8. print '<form action="update.php" method="POST">';
  9. print '<font face="Arial" size="2">Pytanie:<textarea name="pyt" rows=5 cols=30 warp=phisical>'.$pytanie['pyt'].'</textarea><br>';
  10. print '<font face="Arial" size="2">Odp a:<textarea name="a" rows=5 cols=30 warp=phisical>'.$pytanie['odpa'].'</textarea><br /></font>';
  11. print '<font face="Arial" size="2">Odp b:<textarea name="b" rows=5 cols=30 warp=phisical>'.$pytanie['odpb'].'</textarea><br /></font>';
  12. print '<font face="Arial" size="2">Odp c:<textarea name="c" rows=5 cols=30 warp=phisical>'.$pytanie['odpc'].'</textarea><br /></font>';
  13.  print '<font face="Arial" size="2">Odp poprawna:<textarea name="praw">'.$pytanie['odppraw'].'</textarea><br /></font>';
  14.  print '<input type="hidden" name="id" value='.$_GET['id_pyt'].'>';
  15.  print '<input type="submit" value="edytuj"></form>';
  16.  
  17. ?>


Zmieniam co potrzebuję klikam na edytuj i powinien się wykonać skrypt:
  1. <?
  2. include ("baza.php");
  3.  
  4. $baza = mysql_connect ($mysql_host, $mysql_user, $mysql_haslo) or die ("Nie masz połączenie do bazy danych");
  5.  
  6. echo 'mysql_connect error: '.mysql_error().'<br>';
  7.  
  8. $db = mysql_select_db($mysql_baza);
  9.  
  10. echo 'mysql_select_db error: '.mysql_error().'<br>';
  11.  
  12. mysql_query("update quiz set pyt='.$_POST['pyt'].',
  13. odpa='.$_POST['a'].',
  14. odpb='.$_POST['b'].',
  15. odpc='.$_POST['c'].'
  16. where id=".$_POST['id_pyt']);
  17.  
  18. echo 'mysql_query error: '.mysql_error().'<br>';
  19. echo 'Zmieniono: '.mysql_affected_rows().'<br>'; 
  20.  
  21. ?>


dodałem żeby mi wyrzucał błędy ale nic się nie dzieje:( puste okno, nic nie wyświetla...
HELP! sad.gif
LBO
hmmm, to jest bardzo dziwne - puste okno mówisz? Wg mnie powinny sie wyswietlić przynajmniej te teksty z echo" title="Zobacz w manualu php" target="_manual. Coś w stylu:
Kod
mysql_connect error: <br>
mysql_select_db error: <br>
mysql_query error: <br>
Zmieniono: <br>
TomASS
Serwer masz na localhoście czy na zewnętrznym tak samo?
Może wystarczy w pliku php.ini (najczęście w katalogu C:\Windows) zmienić:
Cytat
error_reporting = E_ALL
nevar
Serwer jest zewnętrzny
siemakuba
W FORM masz action na update.php
Rozumiem, że skrypt updejtujący masz właśnie w tym pliku?

Sorki, to troche dziwne pytanie, ale to najprostszy i zarazem najciezszy do wychwycenia bug :)
Patrzysz na plik i nie widzisz ze to nie ten na ktory myslisz ze patrzysz :) zdarza sie :)

Aha, moze rzuc jakis dump SQLa coby mozna bylo to jakos calosciowo przetestowac.

pozdr.
nevar
Sprawdziłem, nazwy plików się zgadzają
nospor
  1. <?php
  2. mysql_query("update quiz set pyt='.$_POST['pyt'].',
  3. odpa='.$_POST['a'].',
  4. odpb='.$_POST['b'].',
  5. odpc='.$_POST['c'].'
  6. where id=".$_POST['id_pyt']);
  7. ?>
Po zobaczeniu tego kawalka kodu, wiecej juz mi sie nie chce czytac winksmiley.jpg
polecam dokładną lekturę:
http://pl.php.net/manual/pl/language.types.string.php
http://pl.php.net/manual/pl/language.operators.string.php
misiek172
o kurcze... najlepiej sparwdź to w ten sposób, że włoncz PHPmyAdmina i wejdź do tej bazy i poprostu zmień coś i on ci wygeneruje skrypt zmiany, skopiuj go do dokumentu i uzupelnij poprostu zmiennymi, musi działać! albo poprostu zamis jak masz odpa='.$_POST['a'].' daj odpa=\".$_POST['a'].\"
siemakuba
Cytat(nospor @ 2006-04-18 09:58:49)
  1. <?php
  2. mysql_query("update quiz set pyt='.$_POST['pyt'].',
  3. odpa='.$_POST['a'].',
  4. odpb='.$_POST['b'].',
  5. odpc='.$_POST['c'].'
  6. where id=".$_POST['id_pyt']);
  7. ?>
Po zobaczeniu tego kawalka kodu, wiecej juz mi sie nie chce czytac ;)

@nospor: tez na poczatku rzucilo mi sie to w oczy i wszystko wydawalo sie jasne, ale wydaje mi sie ze problem lezy gdzie indziej. To zapytanie gdzies tam w postach przewija sie w roznej formie, jednak w pierwszym poscie jest OK. To chyba "niedociagniecie" przy kopiowaniu go w kolejnych postach.
kszychu
Misiek, chłopie nie mąć! to z zamianą ' na \" to bzdura totalna. Przeczytaj najpierw powyższe posty a dopiero zabieraj głos.
Poza tym poziom dyskusji, jaki się wyklarował upoważnia mnie do przeniesienia tego do Przedszkola.
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.