inregistrare automata la refresh

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
andras
Mesaje: 430

inregistrare automata la refresh

Salut,
Atunci cind adaug o inregistrare in BD iar dupa iesire dau Refresh in browser, se adauga automat inca o inregistrare nedorita. Defectiunea e strict din codul scris? Multumesc.

MarPlo Mesaje: 4343
Salut
Nu e o defectiune de cod, motivul e ca atunci cand se da Refresh, browser-ul acceseaza adresa inca o data, cu tot cu datele transmise initial.
Solutia e sa faci un auto-refresh din php, dupa ce ai inregistrat datele; astfel se elimina refresh-ul cu datele transmise.

Cod: Selectaţi tot

<?php
//gets and register data from form..

//auto-refresh
header('Location: '. $_SERVER['PHP_SELF']); 

andras Mesaje: 430
Am incercat dar n-are efect, cred ca n-am plasat corect instructiunea. Dupa salvare (modelinsertdocument.php apelat cu ajax) am pus la sfirsitul fisierului (simplificat):

Cod: Selectaţi tot

<?php
$rezolvat = $conn->sqlExec($re);    // aici se face INSERT in tabela document
header('Location: '. $_SERVER['PHP_SELF']);   // apare pagina alba
if (isset($_SESSION['document']) && $_SESSION['document'] =='document')
    include('modeldocument.php');  // SELECT pe tabela document - afiseaza din nou tabelul HTML cu SELECT reimprospatat (dupa caz, pe tabela de baza sau pe tabela document)
else include('modelselect.php');      // SELECT pe tabela de baza
header('Location: '. $_SERVER['PHP_SELF']); // aici nu are efect
?>
Unde este corect sa-l pun? Daca il pun inainte de SELECT apare o pagina alba, daca il pun dupa SELECT nu are efect, la Refresh mai incarca o data in tabela document chiar daca sint pe tabela de baza.

MarPlo Mesaje: 4343
Conteaza logica si structura codului. Redirect-ul /Refresh sa se faca Doar cand sunt date trimise de la formular. Cand se aplica refresh cu header(), codul de afisare de dupa acea linie de cod, care e in aceeasi conditie if(), nu va putea fi afisat fiindca e Refresh inaintea lui.
Cam asa se face:

Cod: Selectaţi tot

<?php
//daca sunt date de formular
if(isset($_POST['nume_camp'])){
  //adauga datele in mysql
  //face refresh
  header('Location: '. $_SERVER['PHP_SELF']);
  exit();
}
else {
  //restul codului necesar cand nu e actiune de adaugare in baza de date
} 

Subiecte similare