Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]$_GET, $_POST cos mi tu nie gra
Forum PHP.pl > Forum > Przedszkole
achill
witam
mam taki problem

mam baze danych z ktorej wyciagam tekst- jako szary uzytkownik moge sobie go przeczytac jako administrator moge go edytowac ( i tu cos nie gra) bo powinno przeniesc mnie na druga strone gdzie moge go edytowac i zapisac zmiany - na strone przenosi ale zapisu nie moge zrobic. czy ktos moze mi pomoc rozwiklac te zagadke - bo mecze ten kod od jakis 3 godzin
index.php

  1. <?php session_start(); ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <?php
  5. require_once 'header.php';
  6. require_once 'conn.php';
  7. ?>
  8. <div id="text">
  9. <div id="text1">
  10. <h1 class="h1text">
  11. <?php
  12. echo ' Witam na mojej stronie ';
  13. if (isset($_SESSION['user']))
  14. {
  15. echo $_SESSION['user'] ;
  16. }
  17. echo '!'
  18. ?>
  19. </h1>
  20. <?php
  21. $sql = mysql_query("SELECT text FROM teksty WHERE text_id='1' ");
  22. $row = mysql_fetch_array($sql);
  23. echo $row['text'];
  24. ?>
  25. <br>
  26. <?php
  27. if (isset($_SESSION['access_lvl'])
  28. and $_SESSION['access_lvl'] == 2)
  29. {
  30. ?>
  31. <form method="post" action="transact-articles.php">
  32. <input type= "submit" class= "submit" name="action" value="Edytuj"/>
  33. <input type="hidden" name="text_id" value="<?php echo $_GET['text_id']; ?> ">
  34. </form>
  35. <?php
  36. }
  37. ?>
  38. </p>
  39. </div>
  40. <div id="line1">
  41. </div>
  42. <div id="line2">
  43. </div>
  44. </div>
  45. <?php
  46. require_once 'footer.php';
  47. ?>


a teraz
edit.php


  1. <?php session_start(); ?>
  2. <?php
  3. require_once 'conn.php';
  4.  
  5. $text = '';
  6. $text_id = '';
  7.  
  8. if (isset($_GET['a'])
  9. and $_GET['a'] == 'Edytuj'
  10. and isset($_GET['text_id'])
  11. and $_GET['text_id'])
  12. {
  13. $sql = "SELECT text FROM teksty " .
  14. "WHERE text_id=" . $_GET['text_id'];
  15. $result = mysql_query($sql) or die(mysql_error());
  16. $row = mysql_fetch_array($result);
  17. $text = $row['text'];
  18. $text_id = $_GET['text_id'];
  19. }
  20. require_once 'header.php';
  21. ?>
  22. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  23. <html xmlns="http://www.w3.org/1999/xhtml">
  24.  
  25.  
  26. <div id="text">
  27. <div id="text1"><h1 class="h1text">
  28. <?php
  29. echo ' Edycja tekstu ';
  30. ?>
  31. </h1>
  32. <img src="linehorizontal.png" class="linia">
  33.  
  34. <form method="post" action="transact-articles.php">
  35. <p>
  36. <textarea class="text" name="text" rows="30" cols="40">
  37. <?php
  38. </textarea>
  39. <?php
  40. echo '<input type="hidden" name="text_id" value="' . $text_id . "\">\n";
  41.  
  42. if ($text_id) {
  43. echo '<input type="submit" class="submit" name="action" ' .
  44. "value=\"Zapisz\">\n";
  45. }
  46. ?>
  47. </p>
  48. </form>
  49.  
  50. </div>
  51. <div id="line1">
  52. </div>
  53. <div id="line2">
  54. </div>
  55. </div>
  56. <?php
  57. require_once 'footer.php';
  58. ?>

no i jeszcze pliczek od transakcji
  1. <?php
  2. require_once 'conn.php';
  3. require_once 'http.php';
  4.  
  5.  
  6. if (isset($_REQUEST['action']))
  7. {
  8. switch($_REQUEST['action'])
  9. {
  10. case 'Edytuj';
  11. redirect('edit.php?a=edit&text_id=' . $_POST['text_id']);
  12. break;
  13.  
  14. case 'Zapisz';
  15. if (isset($_POST['text'])
  16. and isset($_POST['text_id']))
  17. {
  18. $sql = "UPDATE teksty " .
  19. "SET text='" . $_POST['text'] . "' " .
  20. "WHERE text_id=" . $_POST['text_id'];
  21.  
  22. mysql_query($sql) or die('i cant save changes ' . mysql_error());
  23. }
  24. redirect('index.php');
  25. break;
  26. }
  27. }
  28. ?>


podsumowujac:
1-laduje text z bazy
2- gdy jestem zalogowany jako admin moge go edytowac (submit edit przenosi mnie na edit.php) jesli nie to tylko przeczytac.
3 - powinno umozliwic mi edycje ale niestety nie mam mozliwosci zapisu a na dodatek wyglada to tak jakby nie zaladowal wskazanej komorki

ps.

moim zdaniem to albo cos zle przesylam wartosc text_id z index.php albo zle ją pobieram do edit.php. (bo nie dosc ze nie za bardzo jest co zmieniac to na dodatek przycisk zapisz jest uwarunkowany od tego czy jest pobrana wartosc text_id a przycisku nie ma - blagam niech mi ktos wskaze gdzie jest błąd i na czym on polega)

PS. Nie chce gotowcow.




dokonałem malej modyfikacji w edit.php

<?php
echo htmlspecialchars($text);
echo $row['text'];
?>

no i wniosek jest jeden mam racje: nie wysyla tych danych/lub ich nie pobiera - bo nic sie nie wyswietla.

teraz pytanie co tu jest grane? nie moze pobrac tych danych - tak sie zastanawialem bo to chyba tak jak w temacie $_POST i $_GET nie przesyla text_id z index.php.

ps. hmmm a może powinienem okreslic zmienne w edit.php:
$text= '';
$text_id= '';


ale to chyba i tak nic nie da bo nie przesyla do tej strony wartosci text_id

no właśnie -mam pewien pomysł...
zaraz wracam


no niestety: myslałem, że może jak wpiszę wartości do wyslania w transact... w case "Edytuj" jako session_start() to pojdzie ale to nie byl najlepszy pomysl
Suh
Przede wszystkim mam jedno pytanie ? Skąd w ogóle bierzesz zmienną text_id w pliku index.php ?
Bo w zapytaniu do wyciągania tekstu masz na sztywno text_id = 1, zaś niżej w formularzu masz już ustawione, że w/w zmienną pobierasz z GET.
Po wygenerowaniu strony (zakładam, że adres jakim jest wywoływany plik index.php zawiera ?text_id=xxx) zobacz w kod html czy wszystko się pokazuje w takim miejscu i w takiej postaci jaką oczekujesz. Jeżeli nie - to sprawdź czego brakuje i to popraw. Jeżeli natomiast wszystko jest ok, to usuń z pliku z transakcjami przekierowania, a dodaj jakieś funkcje do wyświetlania tego co przesyłasz do tego pliku, np. var_dump($_POST) czy coś innego..
Jak to nie pomoże to będziemy myśleć dalej. Oczywiście jeżeli okaże się, że w transakcjach jest też dobrze, to tak samo zrób w pliku z edycją - gdzieś musi być jakiś mały błąd, a jak wiadomo - takie są najgorsze winksmiley.jpg
achill
do tego wszytskiego znalazlem jeszcze takie cos
case 'Edytuj';
redirect('edit.php?a=edit&text_id=' . $_POST['text_id']);


a powinno byc
redirect('edit.php?a=Edytuj&text_id=' . $_POST['text_id']);
co i tak duzo nie zmienilo
bo nadal nie dziala

wpisałem w transact
var_dump($_POST)

wyniik

array(2) { ["action"]=> string(6) "Edytuj" ["text_id"]=> string(1) " " }

czyli wracamy do punktu wyjscia deklaracja zmiennej text_id ktorej nie ma


maly update
takie cos wyplodzilem w index.php
  1. <?php
  2. $sql = "SELECT text_id, text FROM teksty WHERE rowname='index' ";
  3. $result = mysql_query($sql);
  4. if (mysql_num_rows($result) > 0) {
  5. while ($row = mysql_fetch_array($result)) {
  6. echo $row['text'];
  7. }
  8. }
  9.  
  10.  
  11. if (isset($_SESSION['access_lvl'])
  12. and $_SESSION['access_lvl'] == 2
  13. )
  14. {
  15. ?>
  16. <input type= "submit" class= "submit" name="action" value="Edytuj"/>
  17. <input type="hidden" name="text_id" value="<?php echo $_GET['text_id'] ?> ">
  18. <?php
  19. }
  20.  
  21. ?>


ale rezultat wciaz ten sam
array(2) { ["action"]=> string(6) "Edytuj" ["text_id"]=> string(1) " " }
Suh
Ok w takim razie jeszcze jedno pytanie z mojej strony.
Masz plik index.php w którym chcesz wyświetlić wybrany tekst na podstawie zmiennej text_id. Powiedz mi w jaki sposób informujesz skrypt, który tekst ma wyświetlić ? Bo z tego co pokazujesz jako efekt var_dump to zmienna $_GET['text_id'] jest po prostu pusta co świadczy o tym, że uruchamiasz plik index.php bez żadnych parametrów. (poprawnie powinno być np. tak : index.php?text_id=x, gdzie x to id konkternego tekstu).

Edit.
Wróć do poprzedniego index.php, tylko w zapytaniu SQL w miejscu gdzie masz "WHERE text_id =" daj $_GET['text_id'], a nie wartość 1 - na sztywno.
achill
ups

no tak nic dziwnego ze nie dziala tym bardziej $_GET jest tu nie na miejscu

No dobra ale skoro juz o tym mowa bo to i tak nie rozwiaze problemu bo to strona startowa - jak mam nadac index.php?text_id?
po wpisaniu adresu laduje mi index.php i innej opcji raczej nie ma albo przynajmniej o tym nie czytalem. to nie moze byc zaden
a w tym co mowisz zmienna jest w url i bedzie dawala znac co zamiescic na stronie - to nie wyswietli tekstu bo niby skad bedzie mial to wiedziec, ktory? - krotko mowiac i tak zle i tak niedobrze

jest pewna opcja tak sie caly czas zastanawiam czy da tak rade to zrobic:
w tabeli teksty mam nastepujace kolumny
text_id, rowname, text

krotko mowiac
text_id, text wiadomo
rowname - mialobyc na poczatku tylko do mojej wewnetrzenj informacji ktory tekst na ktorej stronie ma sie wyswietlac (w phpadminie zebym sie nie pogubil i nie pomylil co i gdzie) ale widze ze bedzie mozna z tego korzystac -wiec generalnie juz sama w sobie jest rozpisana tak, ze tylko jej uzywac bez koniecznosci modyfikacji rekordow zreszta sam ocen

czyli w tym wypadku wiersz wyglada tak
text_id=1, rowname=index, text=ąśżźć
text_id=2, rowname=podstrona, text=łóćą

wiec moze zrobic skrypt ktory bedzie wywolywal tekst na zasadzie
select text, text_id from teksty where rowname="index"
sprobuje jak mowie z tym rowname bo to jak narazie jedyny sposob na zdeklarowanie zmiennych na stronie powitalnej ktory mi przychodzi do glowy.
Suh
No w porządku, tylko co w sytuacji gdy w większej ilości rekordów, kolumna rowname będzie miała wartość index. Wtedy wszystkie te rekordy zostaną wyświetlone.
achill
rowname moze byc dodatkowym kluczem co pozwala zrobic cos takiego:

zawsze mozna dodac columny text1 text2 i wywolywac je osobno - krotko mowiac nie beda spelniac warunku

select text, text_id from teksty where rowname="index"



Suh
To już zależy od Twojego pomysłu, pamiętaj tylko żeby zawsze po wyciągnięciu odpowiedniego tekstu, wyciągać też jego id i umieszczać w odpowiednim miejscu, tak abyś potem mógł edytować/usuwać odpowiedni tekst.
achill
jasne bedę pamiętał.

i o to mi właśnie chodzi żebym mógł edytowac każdy z osobna więc w sumie jestem juz chyba na dobrej drodze.

w każdym razie wielkie dzieki za pomoc
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.