Autor Zpráva
Mihhc
Profil
Zdravím,

prosil bych o radu.

Bohužel nemám ukázku, takže se pokusím co nejlépe načrtnout.

Problém je, že když se stránka načte: db_vypis.php > db_uprava.php, tak když si vypíšu $_GET, tak se vypíše správně. Ale když kliknu na odeslat s upravenými údaji, tak jakovy get nebylo. Chyba je určitě zde.

Mám 2 stránky k DB:

db_vypis.php(Ve stylu)
1 | Jana | Nová | Václavák | db_uprava.php?id=1 (odkaz k úpravě)
2 | Iva | Stará | Staromák | db_uprava.php?id=2

db_uprava.php

<?php
if (!isset($_GET["id"])) {
    // kdyz sem vypíšu $id=52, tak po kliku na odeslat,  upraví se řádek 52, jako bych to nepředal v url
}
else {
    $id = $_GET["id"];
}
if (isset($_POST["odeslano"])) {
    // ...
    // dotaz SQL v pořádku
}

Předem díky, M.
peta
Profil
"Bohužel nemám ukázku"
Chyba.

isset($_GET["id"])
isset($_POST["odeslano"])
Ale abychom vedeli, co je v tech promennych, museli bychom mit formular a vedet, jake udaje jsi kam vyplnoval. Treba je problem v tom, ze sice udaje preberes z GET, ale nevypises do formulare, ktery odesilas pres POST. Co v html kodu neni, to se logicky neposle.

---stranka1.php---
<a href=stranka2.php?id=5>odkaz</a>

---stranka2.php---
<form action="stranka3.php" method=post>
<input name=id value="<?php echo $_GET['id']?>">
<input type=submit>
</form>

To je ta ukazka, kterou by stacilo na testovani poslat. Nemam to odzkouseno, mozna tam je nejaka chybka. Jednoduchou vec testuj na jednoduchem prikladku bokem az do funkcniho stavu. Pak ji zabuduj do kodu.
Mihhc
Profil
peta:
Děkuju, pravda, funkční.
Po nastavení skrytého inputu a zpracování to funguje krásně.

No, nějak mi částečně uniká princip, proč nefungovalo to moje? Kód přece jde v pořadí v jakém je napsán. Takže můj skrip se koukne do url ... nastaví $id=na GET['id'] ... pak se klikne na ODESLAT formulář ... a v SQL jen předá proměnnou > SELECT ... WHERE `id` = '.$id.'
panther
Profil
Mihhc:
ten tvuj uryvek kodu jsem nepochopil, ale chybu mas ve sve myslence:
Takže můj skrip se koukne do url ... nastaví $id=na GET['id'] ... pak se klikne

Samo se nikam neklikne - pri prvnim nactni stranky script tuhle podminku ignoruje (neignoruje, ale vyhodnoti jako false) a pokracuje scriptem dal. Cokoliv bude za touto podminkou se normalne ypracuje, aniz by byl formular odeslan.
Mihhc
Profil
panther:
To je mi jasné. Tak jsem to nemyslel.

Pokusím se tedy ještě jednou a lépe.
Prostě odkážu přes GET k úpravě konkrétního záznamu, tam přepíši třeba jméno, a uložím do DB.

db_vypis.php
1 | Jana | Nová | db_uprava.php?id=1 (odkaz k úpravě)
2 | Iva | Stará | db_uprava.php?id=2

db_uprava.php
<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">
<input name="jmeno" size="45" value="" />
<input name="prijmeni" size="45" value="" />
<input type="submit" name="odeslano" value="Uložit" /></form>


if (!isset($_GET["id"])) {
    echo " - <strong>Není určen záznam. Nelze odeslat.</strong>";
}
else {
    $id = $_GET["id"];
    echo $id;
}
if (isset($_POST["odeslano"])) {
       $sql = "UPDATE ... WHERE `id` = '.$id.'"
}

Když zde návštěvník - já, kliknu na odeslat, tak to nejde(viz 1. příspěvek), proč? Zde by všechny větve krom první měli projít.
Nejdřív mě napadlo jestli ty větve nemusí být uvnitř "if (isset($_POST["odeslano"])) {", ale ani pak to nefungovalo.
peta
Profil
"vypíšu $_GET, tak se vypíše správně. Ale když kliknu na odeslat s upravenými údaji, tak jakovy get nebylo."
Ten formular se odesila metodou post z html stranky, co prisla ze serveru. Tvuj prohlizec zadne php get udaje nema, ty mel server, ktery je po odeslani stranky tvemu pc zahodil.

Napadla mne jeste jina moznost. Mohl bys nastartovat SESSION nebo COOKIES a do ni si ulozit id z get. Pak si to bude server pamatovat (viz prihlasovaci stranky).
Tori
Profil
Mihhc:
Ale když kliknu na odeslat s upravenými údaji, tak jakovy get nebylo.
Což je imho celkem správně - podívejte se, na jakou adresu a jakou metodou formulář odesíláte. $_SERVER['PHP_SELF'] obsahuje jméno skriptu, ale ne query string (takže $_GET['id'] po odeslání edit.formuláře POSTem neexistuje).

Jinak šlo by i do formuláře předvyplnit současné údaje, aby člověk při malé změně nemusel psát vše znova. Např.:
if (isset($_GET['id'])) { 
  // prisla jsem pres odkaz na editaci, takze podle ID nactu udaje z DB a zobrazim predvyplneny formular
  // ID vlozim do skryteho pole ve formulari

} elseif (isset($_POST['odeslano'])) {
  // byl odeslany formular, takze updatuju udaje v DB

} else {
  // chybejici ID, vypisu chybu.
}
Davex
Profil
I formulář odeslaný POSTem může mít parametr v $_GET.

<form action="<?php echo $_SERVER["PHP_SELF"], empty($_GET['id']) ? '' : '?id=' . intval($_GET['id']) ?>" method="post">
<input name="jmeno" size="45" value="" />
<input name="prijmeni" size="45" value="" />
<input type="submit" name="odeslano" value="Uložit" /></form>
Mihhc
Profil
Děkuju moc všem za reakce a vysvětlení.

Raději použiji to skryté pole formuláře, zdá se mi to přehlednější.
Tori: Přesně takto jsem to zamýšlel, i s tím převyplněním. Jen jsem se do toho nechtěl pouštět, dokud nevyřeším toto.

M.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: