Gå til innhold

Validering og behandling av variabler


Anbefalte innlegg

Hei,

 

Jeg har et aldri så lite problem. Jeg validerer et skjema med php_self i action attributtet på skjemaet. Slik at det kan kjøres gjennom til det validerer.

 

Problemet er når jeg vil bryte ut av dette. Jeg behandler nemlig variablene i en egen side som sender deg videre med en header slik at jeg unngår at en oppdatering sender ting inn i databasen på ny.

 

Akkurat nå så har jeg et hidden form som ser mer ut som en kvittering av et slag Denne vises når skjemaet er godkjent og gjør at brukeren kan sende det skjulte skjemaet til behandling siden. Jeg vil egentlig ikke ha det sånn, jeg vil at den sender variablene til behandling-siden så fort det validerer, uten å måtte bruke det skjulte skjemaet.

 

Siden der valideringa skjer er inkludert i et design.

 

Håper på litt hjelp ;)

 

Mvh.

Arild Gustavsen

Endret av Blodhemn
Lenke til kommentar
Videoannonse
Annonse

Eg forstår egentleg ikkje problemstillingen.

 

Du vil at når brukeren klikker submit så blir han sendt over til ein egen validerings side ? eller ?

 

Vist, så, bare sett form action til den nye siden. og eventuelt redirect brukeren tilbake med ein error melding vist den ikkje er rett utfylt.

Lenke til kommentar
Eg forstår egentleg ikkje problemstillingen.

 

Du vil at når brukeren klikker submit så blir han sendt over til ein egen validerings side ? eller ?

 

Vist, så, bare sett form action til den nye siden. og eventuelt redirect brukeren tilbake med ein error melding vist den ikkje er rett utfylt.

 

Kan ikke sette form action attributtet til den nye siden da jeg må ha php_self for å sørge at den cycler gjennom valideringa til den godkjenner. Siden man først fyller inn skjemaet og der den validerer er den samme. Problemet mitt er å bryte ut av det uten å vise brukeren enda et skjema han/hun må trykke ok på for å få sendt videre.

Jeg vil sende skjemaet til behandling så raskt skjemaet validerer. Ikke via det skjulte skjemaet.

 

Om jeg skal redirecte som du foreslår. Hvordan gjøres dette for å beholde feltene innfylte og uten javascript? Helst også uten å vise noe i URL.

 

 

Jeg poster med koden så dere kan se det.

 

<?php 

// Innhenting av variabler
$brukernavn = $_POST["brukernavn"];
$passord = $_POST["passord"];
$passord2 = $_POST["passord2"];
$epost = $_POST["epost"];
$fornavn = $_POST["fornavn"];
$etternavn = $_POST["etternavn"];
$submit = $_POST["submit"];


// Strip whitespace fra begynnelse og slutt.
$brukernavn = trim($brukernavn);
$passord = trim($passord);
$passord2 = trim($passord2);
$epost = trim($epost);
$fornavn = trim($fornavn);
$etternavn = trim($etternavn);

$fornavn = ucfirst($fornavn);
$etternavn = ucfirst($etternavn);

if ( !empty($submit) ) {
 $ok = "ja";
 if (strlen($brukernavn) < 6) {
   $ok = null;
 }
 if (strlen($passord) < 6) {
   $ok = null;
 }
 if ($passord != $passord2) {
   $ok = null;
 }
 if ( empty($fornavn) ) {
   $ok = null;
 }
 if ( empty($etternavn) ) {
   $ok = null;
 }
 if ( empty($epost) ) {
   $ok = null;
 }
}

if ( $ok == "ja" ) { 
 
echo "Brukernavn: $brukernavn<br>";
echo "Navn: $fornavn $etternavn<br>";
echo "Passord: $passord<br>";
echo "E-post adresse: $epost";

echo "<p>Om dette er korrekt vennligst klikk \"Godkjenn\"</p>";

echo '<form action="brukere/brukere_behandling.php" method="post">';
echo '<input type="hidden" name="brukernavn" value="' . $brukernavn. '">';
echo '<input type="hidden" name="passord" value="' . $passord . '">';
echo '<input type="hidden" name="fornavn" value="' . $fornavn . '">';
echo '<input type="hidden" name="etternavn" value="' . $etternavn . '">';
echo '<input type="hidden" name="epost" value="' . $epost . '">';
echo '<input type="submit" name="submit" value="Godkjenn">';  
echo '</form>';  
  
}


if ( !empty($submit) && empty($ok) ) {


?>

<h1>Registrering av nye brukere</h1>
<p>Vennligst skriv fornavn og etternavn så riktig som mulig. Navnet vil dukke opp om du legger til noe i aktiviteter.<br>Man bør også legge merke til at brukernavn og passord er casesensitive. Dvs at brukernavnet "root" ikke er det samme som "Root". Store og små bokstaver er forskjellige.</p>



<form name="brukere" method="post" action="<?php $_SERVER["PHP_SELF"] ?>">
 <table width="100%" border="0" cellspacing="0" cellpadding="0">
   <tr> 
     <td width="165">Brukernavn:</td>
     <td> <input name="brukernavn" type="text" id="brukernavn" size="30"  value="<?php echo "$brukernavn"; ?>" maxlength="20"> 
       <?php  if ( strlen($brukernavn) < 6 ) { echo "<font color=red>* Brukernavn må være minst 6 tegn</font>"; }?>
     </td>
   </tr>
   <tr> 
     <td>Fornavn:</td>
     <td> <input name="fornavn" type="text" id="fornavn" size="30"  value="<?php echo "$fornavn"; ?>" maxlength="40"> 
       <?php  if ( empty ($fornavn) ) { echo "<font color=red>* Du må fylle inn fornavn</font>"; }  ?>
     </td>
   </tr>
   <tr> 
     <td>Etternavn:</td>
     <td> <input name="etternavn" type="text" id="etternavn" size="30"  value="<?php echo "$etternavn"; ?>" maxlength="40"> 
       <?php  if ( empty ($etternavn) ) { echo "<font color=red>* Du må fylle inn etternavn</font>"; }  ?>
     </td>
   </tr>
   <tr> 
     <td>Passord:</td>
     <td><input name="passord" type="password" id="passord" size="16"  value="<?php echo "$passord"; ?>" maxlength="16"> 
       <?php  if ( strlen($passord) < 6 ) { echo "<font color=red>* Passordet må være på minst 6 tegn</font> "; }
   ?>
     </td>
   </tr>
   <tr> 
     <td>Gjenta Passord:</td>
     <td><input name="passord2" type="password" id="passord2" size="16"  value="<?php echo "$passord2"; ?>" maxlength="16"> 
       <?php  if ( strlen($passord2) < 6 ) { echo "<font color=red>* Passordet må være på minst 6 tegn</font> "; }
     else  {
       if ( $passord != $passord2 ) { echo "<font color=red>* Passordene du tastet inn var ikke like</font>"; }
     	} 
     	
   ?>
     </td>
   </tr>
   <tr> 
     <td>E-post adresse:</td>
     <td><input name="epost" type="text" id="epost" size="30" value="<?php echo "$epost"; ?>"maxlength="64"> 
       <?php  	if ( empty ($epost) ) { echo "<font color=red>* Du må fylle inn en epostadresse</font>"; } ?>
     </td>
   </tr>
   <tr> 
     <td> </td>
     <td> </td>
   </tr>
   <tr>
     <td> </td>
     <td><input name="submit" type="submit" value="Legg Til Bruker"></td>
   </tr>
 </table>
</form>

<?php
}


// Dette intreffer om skjemaet ikke er fyllt inn og sendt. Dette vil være hva en bruker ser om de åpner siden ferskt.
if ( empty($submit) ) {

?>

<h1>Registrering av nye brukere</h1>
<p>Vennligst skriv fornavn og etternavn så riktig som mulig. Navnet vil dukke opp om du legger til noe i aktiviteter.<br>Man bør også legge merke til at brukernavn og passord er casesensitive. Dvs at brukernavnet "root" ikke er det samme som "Root". Store og små bokstaver er forskjellige.</p>


<form name="brukere" method="post" action="<?php $_SERVER["PHP_SELF"] ?>">
 <table width="100%" border="0" cellspacing="0" cellpadding="0">
   <tr> 
     <td width="165">Brukernavn:</td>
     <td> <input name="brukernavn" type="text" id="brukernavn" size="30" maxlength="20"> 
     </td>
   </tr>
   <tr> 
     <td>Fornavn:</td>
     <td> <input name="fornavn" type="text" id="fornavn" size="30" maxlength="40"> 
     </td>
   </tr>
   <tr> 
     <td>Etternavn:</td>
     <td> <input name="etternavn" type="text" id="etternavn" size="30" maxlength="40"> 
     </td>
   </tr>
   <tr> 
     <td>Passord:</td>
     <td><input name="passord" type="password" id="passord" size="16" maxlength="16"></td>
   </tr>
   <tr> 
     <td>Gjenta Passord:</td>
     <td><input name="passord2" type="password" id="passord2" size="16"  maxlength="16"> 
     </td>
   </tr>
<tr>
   <td>E-post adresse:</td>
   <td><input name="epost" type="text" id="epost" size="30" maxlength="64"> </td>
   </tr>
   <tr> 
     <td> </td>
     <td> </td>
   </tr>
   <tr>
     <td> </td>
     <td><input name="submit" type="submit" value="Legg Til Bruker"></td>
   </tr>
 </table>
</form>

<?php 

}

?>

Endret av Blodhemn
Lenke til kommentar
kan dui kke bare lage en form_validator.php som du inkluderer øverst på hver side?

 

så blir den kjørt i alle filer som får form data

Ikke helt sikker på om jeg skjønner hva du mener her.

 

Problemet et vel mer at jeg vil at brukeren skal se hva som er feil utfylt fortløpende.

Endret av Blodhemn
Lenke til kommentar

Fikk løst magic quotes problemet i allefall.

 

Men etterlyser fremdeles praktiske løsninger på det opprinnelige problemet mitt ;)

 

Jeg innbiller meg jo at slike typer valideringer er mulig, men vet tydeligvis ikke helt hvordan det gjennomføres ;)

Endret av Blodhemn
Lenke til kommentar

Bruk php_self til å sende formen til samme side, deretter sjekk at alt er rett, vist alt er rett enten, send det vider til neste side med sessions eller serial url variablene. (header("Location: adresse");)

Eller du lagrer informasjonen etter at alt er validert, og deretter redirecter brukeren.

 

Eg pleier å bruke den siste sjølv.

Lenke til kommentar
Bruk php_self til å sende formen til samme side, deretter sjekk at alt er rett, vist alt er rett enten, send det vider til neste side med sessions eller serial url variablene. (header("Location: adresse");)

Eller du lagrer informasjonen etter at alt er validert, og deretter redirecter brukeren.

 

Eg pleier å bruke den siste sjølv.

Høres jo ut som greie løsninger det, men litt av problemet mitt er jo at jeg har selve siden med form og validering inkludert i et design, så headere blir sendt før sida med valideringa får tid til å laste. Da må jeg i såfall legge valideringa til en fil jeg inkluderer i toppen av index.php .... og der skjønte jeg hva torbjørn mente ja.. hehe..

 

Har jeg forstått det rett at PHP kjører scriptet fra topp til bånn, så variabler du bruker må settes før du bruker dem?.

 

Så jeg kan ikke bare ta en sjekk på om $ok, variablen jeg bruker for å validere skjemaet, er tom eller ei og så sende header om den ikke er? Fordi $ok variablen blir jo satt lenge etter output.

Lenke til kommentar

Heile websiden din er parset når du får den, det betyr at all variabler er satt osv.

 

Bare legg til validerings file på toppen av dokumentet, deretter kjør testene dine. Husk å bruk $_POST['variablenavn']

 

For at scriptet skal vite når du har sent over informasjon til validering, lag ein "if(isset($_POST['submit']))" som resten av coden ligger under. variablen submit er submit knappen. Husk å ha "name=submit" på den.

 

Det er igrunnen alt, blei litt rotite men eg håper du forstår kva eg meiner. Vist du vil kan eg sende eit kode eksempel i ein pm til deg.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...