Avatar billede Psylicium Nybegynder
04. november 2011 - 22:58 Der er 1 kommentar

Function() som afgør om output skal være $_POST eller $row

Hejsa. Jeg har siddet og bakset lidt med en funktion som jeg ikke kan få til at makke ret. Det går ud på, at jeg i min database har nogle oplysninger, som kan opdateres vha. en form.

Jeg tjekker ved submit om alle felter er udfyldt, og om teksten i et bestemt textarea er lang nok osv. Det funker også fint nok, men her er udfordringen så:

Når der ingen oplysninger er i databasen (dvs. når recorden skal oprettes), vil jeg have at selvom der bliver vist fejl ved tomme felter osv., skal der der var indtastet i felterne, blive vist efter submit. Det klarer jeg med følgende:

<input type="text" name="feltnavn" value="<?php echo $_POST['feltnavn']; ?>" />

Hvis recorden findes i forvejen, og skal redigeres, laver jeg samme nummer med tekstfelterne, bare med $row['feltnavn']; i stedet for $_POST['feltnavn'];. Her opstår problemet så... Hvis der ved submit er en fejl i bare ét af de påkrævede felter, og hvis man har lavet ændringer i flere felter, vil hele molevitten blive erstattet af indholdet fra databasen ($row) i stedet for det man lige har skrevet ($_POST), så man er nødt til både at rette feltet der fejler, og alle de andre som ellers er okay.

Kan man på en eller anden måde lave en funktion, som undersøger om der er trykket submit, og ud fra det afgør om value i et teksfelt skal være $_POST['felt'] eller $row['felt'], således at man ikke skal redigere flere felter hvis bare ét fejler?

Jeg kunne forestille mig noget i stil med dette (og tag jer ikke af eventuelle fejl, det er bare en skitse):

Funktionen
function prefill($value) {
if (isset($_POST['submit'])) { echo "$_POST['$value']"; } else { echo "$row['$value']"; }


Kaldet til funktionen i formen
<input type="text" name="feltnavn" value="<?php prefill('feltnavn'); ?>" />

Så vidt jeg har forstået kan man ikke umiddebart bruge $_POST og $_GET i funktioner, idet de er globals, men kan det klares på en anden smart måde mon?
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 08:15 #1
$_POST og $_GET er super globale og kan bruges i funktioner.

Det du ønsker kunne formentlig skrives på denne måde:

<?php
$feltnavn= 0;
if(isset($_POST['submit'])){
  // test kode
  $feltnavn= $_POST['feltnavn'];
}else{
  // hent kode
  $feltnavn= $row['feltnavn'];
}
?>
<input type="text" name="feltnavn" value="<?php $feltnavn;?>" />
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester