Jump to content
php.lv forumi

Form->input->value + Ie->refresh


virtualcook

Recommended Posts

Notiek tā, ka spiežot pogu ar type="submit" formas vērtības value ="vertiba" tiek ievietotas to mainīgajos name="mainigais" un pie lapas atkārtotas izsauksšanas if($mainigais) atgriež true, tas ir "vertiba".

 

Tas pats notiek arī spiežot F5 (IE->refresh).

 

Jautājums šāds: kā panākt, ka nosacījums if($mainigais) ir true, tikai pie submit pogas nospiešanas un ne uz F5?

Link to comment
Share on other sites

Man šķiet ka tur ir jāizmanto JavaScript, bet būtībā, kad tu nospied 'Submit', tev jau lapa arī tiek pārlādēta (vai arī pārlādēta uz citu lapu) un tie variabli jau cer $_GET vai $_POST tur paliek, jo savādāk tu viņus nevarētu apstrādāt. Šķiet, ka te ož pēc JavaScript objektiem, jo tev ir nepieciešams, ka tieši nospiežot refresh pogu, mainīgie pazūd... Tas man šķiet ir client-side... Ideju pasveidu, bet skripts man diemžēl nav tagad un nekad tādu neesmu taisījis... :ph34r:

Link to comment
Share on other sites

... nu jā ar document.forms[0].elements[0].value es varu piešķirt kādam formas objektam vērtību uz onLoad(), bet tas nav tas kas vaajdzīgs, varbūt iepriekš ne īpaši skaidri izteicos - nu tad vēlreiz :-))

 

-------------------------------------------------------------------------

if($id)

{

mysql_query("INSERT ... ");

}

 

mysql_query("SELECT ... ");

 

< form action="add.php" method="post">

...

< input type="hidden" name="id" value="1" >

< input type="submit" name"submit" value="Pievienot" >

< /form >

-------------------------------------------------------------------------

 

nu re

- ielādējoties lapai if($id) ir false, id vēl nav inicializēts;

- nospiežot pogu Pievienot if($id) ir true, $id ir ieguvis caur $_POST["id"] vērtību 1;

- un if($id) ir joprojām true uz F5 - attiecīgi visu laiku uz refresh datubāzē ieveitojas dati, bet vajag lai tikai nospiežot pogu Pievienot;

 

P.S.

varbūt kaut kā savādāk jāorganizē tas, ka pašā apakšā ir forma no kuras dati tiek pievienoti datubāzei un pēc tam tur pat arī attēloti?

Link to comment
Share on other sites

1. Labaak programmee ar globals=off

 

2. Ja es tevi pareizi sapratu, tad tev vajag kaut ko liidziigu shim:

<code><font color="#000000">
if(isset($_POST['id']))
{
mysql_query("INSERT ... ");
Header("Location:add.php?mainiigais=1&mainiigais2=2...");
}
else
{
if(isset($_GET['mainiigais']))$mainiigais=$_GET['mainiigais'];
if(isset($_GET['mainiigais2']))$mainiigais2=$_GET['mainiigais2'];
...
mysql_query("SELECT ... ");
}
<form action="add.php" method="post">
...
<input type="hidden" name="id" value="1">
<input type="submit" name"submit" value="Pievienot">
</form >
</font>
</code>

Link to comment
Share on other sites

Vai es pareizi saprotu tavu piedāvājumu

1) pārbauda vai ir inicializēts if(isset($_POST['id'])) - tikko ielādētai lapai $id, nav inicializēts, attiecīgi nosacījuma vērtība false - izpildās tikai SQL ar select;

2) nospiežot pogu "Pievienot" inicializējas mainīgais $id;

3) pārbauda vai ir inicializēts if(isset($_POST['id'])) - tagad $id ir inicializēts, attiecīgi nosacījuma vērtība true - izpildās SQL ar insert;

4) izpildās Header() - pāradresācija uz norādīto URL, šajā gadījumā uz šo pašu lapu "add.php", kur caur mainīgajiem "mainiigais" un "mainiigais2" tiek nodotas formas jaunās vertības, kas attiecīgi pieder formas elementu īpašībām name -- tā?

- vai add.php?mainiigais=1&mainiigais2=2 jāsaprto kā jauno vērtību pāraidīšana mainīgajiem "mainiigais" un "mainiigais2"?

6) attiecīgi nepieciešams $id inicializēt kā 0 (false), lai otrreiz SQL insert neizpildās, bet tikai SQL select, attiecīgi ir nepieciešams

Header("Location:add.php?id=0 - vai pareizi saprotu?

5) lūk šeit tiek parādīts brīdinājums

 

Warning: Cannot modify header information - headers already sent by (output started at C:Program FilesApache GroupApache2htdocsPHPadd.php:8) in C:Program FilesApache GroupApache2htdocsPHPadd.php on line 18

 

un SQL select neizpildās

 

6) vēl jautājums

 

if(isset($_GET['mainiigais']))$mainiigais=$_GET['mainiigais'];

if(isset($_GET['mainiigais2']))$mainiigais2=$_GET['mainiigais2'];

 

jāsaprot kā punktā 4 pārraidīto vērtību piešķiršana mainīgajiem

$mainiigais un $mainiigais2 un attiecīgi iepriekš formā ierakstītās vērtības aizsgtāj šīs?

 

-----------------------------------

būšu priecīgs, ja tiks ieviesta skaidrība šajos, laikam vienkāršajos, jautājumos :-))

Link to comment
Share on other sites

1) paarbauda vai dati ir nodoti no formas ar pogu submit, ja id nodosi caur url tad taapat buus false

 

2)id inicializeejas un ir atrodams ieksh $_POST mainiigajiem, kas nodoti no formas

 

3)izpildaas ja id ir padots no formas, nevis caur url

 

4)te tu nodod mainiigajiem veertiibas, kuras jaaatteelo formaa, id var nenodot kaa 0, jo tas tiks nodots caur url un isset($_POST['id']) taapat buus false

 

5)Header var suutiit tikai tad, ja ieprieksh nav izvadiiti dati( piem. echo "bla bla" vai print "bla bla" )

Ja ir izvadiiti dati, tad Header vietaa var dariit shitaa: echo "<script>location='add.php?mainiigais1=2&mainiigais2=3'</script>"

 

6)jaa, taa ir mainiigo nolasiishana no url, veelams veel pievienot nokluseetaas veertiibas, ja lapa laadeejas pirmo reizi un mainiigie nav ieksh url

if(isset($_GET['mainiigais']))$mainiigais=$_GET['mainiigais'];else $mainiigais="";

Link to comment
Share on other sites

paldies - kljuva skaidraaks par to visu procesu :-))

 

tikai ar taa heder aizvietoshanu ar echo nekas nesanaak - izdrukaajas luuk shis

 

<script>location='add.php?mainigais=2&mainīgais2=3'</script>

 

bet bez echo vai print jau neiztikt, jo ir jaatspoguljo informācija, kas atlasīta ar SQL select

Link to comment
Share on other sites

... mjā, kā netieku pie rezultāta tā netieku

 

-------------------------------------------------

if(isset($_POST['id']))

{

$sql="INSERT INTO tabulas_nosaukums(lauks1, lauks2) VALUES('NULL', $mainigais')";

mysql_query($sql);

echo "<script>location='add.php'</script>";

}

 

SELECT...

while(..)

{

printf...

}

<FORM action='add.php' method='POST'>

<INPUT type="text" name="mainigais" value="">

...

</FORM>

-------------------------------------------------

 

... nu luuk, ar F5 un Header, šajā gadījumā echo, viss ir kārtībā, bet nesaprotu lūk ko

 

...notiek tā:

1) ielādējot 1x tā kā formā poga nav spiesta if(isset($_POST['id'])) ir false un izpildās SELECT + attēlojas forma

2) uz F5 tas pats - tā arī vajag :-))

2) uz formas pogas nospiešanu izsaucas add.php, kur if(isset($_POST['id'])) ir true, izpildās INSERT un echo attiecīgi tiek no jauna ielādēts add.php, bet tagad jau caur method GET un attiecīgi if(isset($_POST['id'])) ir false un INSERT neizpildās - tā arī vajag :-)) ... vienīgi pēc visa vēl vajadzētu izpildīties SELECT + formas attēlošana - forma attēlojas, bet jaunie dati (kas DB tika ievietoti uz formas pgoas nospiešanu) nē

- kas te man ir nepareizi?

... DB dati parādās tikai pēc F5 - kapēc tā?

 

P.S.

$sql="INSERT INTO tabulas_nosaukums(lauks1, lauks2) VALUES('NULL',". $_POST['mainigais']. ")";

- kas ir nepareizi šajā SQL, ka DB nekas neievietojas?

 

mēģināju gan šādi:

$sql="INSERT INTO tabulas_nosaukums(lauks1, lauks2) VALUES('NULL', $_POST['mainigais'])";

gan šādi:

$sql="INSERT INTO tabulas_nosaukums(lauks1, lauks2) VALUES('NULL', '$_POST['mainigais']')";

nu ne kādi nesanāk, vienīgi tikai caur globāliem

$sql="INSERT INTO tabulas_nosaukums(lauks1, lauks2) VALUES('NULL', '$mainigais')";

 

P.P.S.

tikko gatavoju vienu jautājumu par

if(isset($_GET['mainīgais']))$mainigais=$_GET['mainigais'];

- nesapratu kāpēc šis ir niepieciešams - vai formas attīrīšannai jau caur URL nodotu mainīgo tukšās vērtības un tad nāca kaut kāds klikšķis galvā, kura jēgu tā arī neizprotu...

 

nāca apgaismība un atrisināju problēmu punktā 2 - tagad tikko ievietotie dati attēlojas ... he-he tikai nezinu kādā veidā tas viss secīgi notiekas varbūt vari paskaidrot

... papildināju iepriekšējo šādi

-------------------------------------------------

if(isset($_POST['id']))

{

$sql="INSERT INTO tabulas_nosaukums(lauks1, lauks2) VALUES('NULL', $mainigais')";

mysql_query($sql);

echo "<script>location='add.php?mainigais=$mainigais'</script>";

}

 

if(isset($_GET['mainigais']))$mainigais=$_GET['mainigais'];

 

SELECT...

while(..)

{

printf...

}

<FORM action='add.php' method='POST'>

<INPUT type="text" name="mainigais" value="">

...

</FORM>

-------------------------------------------------

... nu luuk, savā apgaismībā sarakstīju šo te, bet kā tas strādā nesaprotu, un nesaprotu lūk šo - kāpēc tiiko formā ievadītie mainīgie īr jānodod caur URL (citādi, kā pirmajā piemērā, jaunie dati netiek attēloti), jo tie taču tiek ievietoti DB ar INSERT un paņemti ar SELECT un kā tie nokļūst printf funkcijā, ja tie ir pievienoti pie URL - galīgs mikslis man šajā loģikā - varbūt vari ieviest skaidrību?

 

uh, ceru, ka vēl neesmu apnicis :-))

Link to comment
Share on other sites

imho tas ir totali nepareizi, - taisiit SUBMIT scriptu un formu vienaa failaa. parasti

tam izmanto 2 failus, kad pec submita atgriezhamies uz pirmo. attieciigi visi post variablji ir UNSET, bet taapat nospiezhot back, viss notiks, - tas jau cic staasts, kas bija mnieets listee, - parbaudiit sessijas mainigo.

Link to comment
Share on other sites

Formu var taisīt cik grib failos. arī vienā. galvenais ir ievērot trīs fāzes:

1) formas attēlošana klienta pusē.

2) formas apstrādāšana un veiksmes/neveiksmes gadījumā attiecīgo darbību veikšana servera pusē.

3) rezultātu attēlošana klienta pusē.

 

Kopā tiek veikti 2 redirekti(lietotāja pāradresēšanas):

1) no formas uz formas apstrādes skriptu un tad

2) formas apstrādes skripts veic redirektu uz rezultātu attēlošanu

 

Refresh atkārto pēdējo pieprasījumu. Ja ir veikts otrais redirekts, tad skaidrs, ka pēdējais pieprasījums ir formas attēlošana.

 

Forma tiek iesniegt divreiz tad, ja nav bijis otrais redirekts un tiek atkārtots formas iesniegšanas pieprasījums.

 

Par skriptu dalīšanu failos: Var arī veselu CMS turēt vienā failā un nav nemaz tik greizi ;)

Link to comment
Share on other sites

  • 2 weeks later...

jap, paldies visiem par info (it sevišķi lame un jb4) - esmu daudz ko sapratis un viss iepriekšējais strādā un rullē, izņemot:

 

1)to: lame

Header("Location:add.php?mainiigais=1&mainiigais2=2...");

nestrādā arī ja nav izmantoti echo vai arī kāds print - izmantojo otro piedāvāto varinatu ar echo :-))

 

2)to: jb4

jap, fāzes strādā, izņemot šo - pēc otro redirekt, tas ir rezultāta attēlošanā, trešājā fāzē, rezultāts parādās tikai pēc F5, bet ne uzreiz - kāpēc tas tā?

Edited by virtualcook
Link to comment
Share on other sites

×
×
  • Create New...