Avatar billede Slettet bruger
18. maj 2010 - 19:14 Der er 21 kommentarer og
1 løsning

At ændre en $ via en form

Hej!

Jeg har en index-fil der bruger "<?php include('variabler.php'); ?>" til at hente f.eks. $navn = "Jens Jensen";

Nu vil jeg så gerne have en form der kan gå ind og hente $navn og ændre den fra Jens Jensen til Anders Andersen, og skrive det til variabler.php helst via en form. Hvor kan jeg finde en tutorial til det? Eller ligger nogen inde med et script der kan gøre det?

På forhånd tak
Avatar billede Slettet bruger
18. maj 2010 - 19:41 #1
Skal variablerne blive der selvom man lukker browseren? I så fald skal du bruge en database. Hvis du bare vil ændre variablen, skal det være noget i den her stil:

//Formular i index-fil
<form action="variabler.php" method="post">
<input type="text" name="nytnavn" />
<input type="submit" value="Lav nyt navn" />
</form>

//Variabler.php
$navn = "Jens Jensen"
$lavnytnavn = $_POST['nytnavn'];
$navn = $lavnytnavn;
Avatar billede Slettet bruger
18. maj 2010 - 19:48 #2
Jeg sidder og har desværre ikke adgang til en database. Kan man flatscripte det til en txt-fil så?
Avatar billede Slettet bruger
18. maj 2010 - 19:57 #3
Ja det kan man sagtens. Vel at mærke skal du så have en txt-fil pr. variabel.

Opret en txt-fil kaldet myfile.txt (hvis andet skal du ændre det i koden). Formularen og phpkoden vil se sådan ud:

<form action="index.php" method="post">
Nyt navn: <input type="text" name="nytnavn" />
 <input type="submit" />
</form>

<?php



function readmyfile()
    {
    $file = fopen("myfile.txt", "r") or exit("Unable to open file");

    while(!feof($file))
        {
        $content = fgets($file);
        }   

    echo $content;
    fclose($file);
    }

function writemyfile($whattowrite)
    {
    $file = fopen("myfile.txt", "a") or exit("Unable to open file");
    fwrite($file, $whattowrite);
    fclose($file);
    }
   
   
$inputtext = $_POST["nytnavn"];

if ($inputtext)
    {
    writemyfile($inputtext);   
    }

//Hvis du vil se indholdet af txt-filen, så skriv:
readmyfile();
?>
Avatar billede Slettet bruger
18. maj 2010 - 20:03 #4
Jeg bukker og takker. Hvis jeg får adgang til noget MySQL senere, hvordan ser den så ud?
Avatar billede Slettet bruger
18. maj 2010 - 20:16 #5
Først skal du lave en tabel:

$con = mysql_connect("database","bruger","kode");
if (!$con)
    {
    echo("Could not connect");
    }

   
mysql_select_db("database", $con);


$sql = "CREATE TABLE Navne
(
messageID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(messageID),
Navn varchar(25)
)";

mysql_query($sql,$con);

Bemærk, at navnet hæjst kan være på 25 tegn.

Dernæst skal du indsætte et navn i databasen:

... Kode som forbinder til database

$navn = "Jens Jensen";

$sql="INSERT INTO Navne (Navn)
VALUES
('$navn')";

if (!mysql_query($sql,$con))
  {
  die('Fejl: ' . mysql_error());
  }
echo "Navn tilføjet";

Når du så skal ændre et navn, skal følgende skrives (filen skal hedde nytnavn.php. Skal den hedde noget andet, skal du ændre action-atributtens værdi):

<form action="nytnavn.php" method="post">
Navn du vil ændre: <input type="text" name="rigtigtnavn" /> Nyt navn: <input type="text" name="nytnavn" />
<input type="submit" />
</form>

<?php

... kode der forbinder til databasen

$rigtigtnavnvar = $_POST['rigtigtnavn'];
$nytnavnvar = $_POST['nytnavn'];

$sql="INSERT INTO Navne WHERE Navn='$rigtigtnavnvar'(Navn)
VALUES
('$nytnavnvar')";

if (!mysql_query($sql,$con))
  {
  die('Fejl: ' . mysql_error());
  }
echo "Navn ændret";

?>
Avatar billede Slettet bruger
18. maj 2010 - 20:23 #6
Må indrømme at jeg aldrig har fået så god og fyldestgørende feedback på et spørgsmål. Tusinde tak!
Avatar billede Slettet bruger
19. maj 2010 - 08:16 #7
Det var så lidt.
Avatar billede majbom Novice
19. maj 2010 - 08:23 #8
du kunne også overveje at gemme i en xml-fil, så kan du nøjes med en fil i stedet for én txt-fil pr. variabel...

du kan læse lidt om det her bl.a.
http://www.eksperten.dk/guide/1263
Avatar billede Slettet bruger
19. maj 2010 - 08:28 #9
God ide. Jeg har ikke så mange erfaringer med xml. Det må jeg prøve en dag.
Avatar billede olebole Juniormester
19. maj 2010 - 10:40 #10
<ole>

"Må indrømme at jeg aldrig har fået så god og fyldestgørende feedback på et spørgsmål" >> Så har du sandelig noget at glæde dig til! Du har ikke særlig stor erfaring med PHP og opdager derfor ikke, at svareren ikke har mange timers yderligere erfaring/viden. Den løsning, du har fået, er der ingen med et bare nogenlunde beskedent kendskab til PHP, der ville vælge. Én variabel pr. fil er langt ude i det drømmehegnet  =)

Det kan gøres på mange måder, men en måde kunne være at gemme sine variabler i en fil vars.php på formen:

<?php
var_A = "bla";
var_noget = "blabla";
var_B = "blablabla";
var_nogetandet = "blablablabla";
?>

Så kunne du rette filen med:

<?php
if (isset($_POST['contxt']) && $_POST['contxt']=='editVar') {
    $file = file('vars.php');
    for ($i=0,$j=count($file); $i<$j; $i++) {
        $var = explode("=", $file[$i]);
        if ($var[0]==$_POST['varName']) {
            $file[$i] = $var[0]."=\"".$_POST['varName']."\";";
        }
    }
    $file = implode("\r\n", $file);
    $fp = fopen('vars.php', 'w');
    fwrite($fp, $file);
    fclose($fp);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>

<form action="" method="post">
<input type="hidden" name="contxt" value="editVar">
<p>Variabelnavn: <input type="text" name="varName"></p>
<p>Variabelværdi: <input type="text" name="varValue"></p>
<p><button type="submit">Ret</button></p>
</form>

</body>
</html>

- eller det kunne gøres med et array i variabelfilen i stedet. hvordan det præcist gøres bedst afhænger af, hvordan det præcist skal bruges  =)

/mvh
</bole>
Avatar billede Slettet bruger
19. maj 2010 - 10:52 #11
Vil variablerne så blive der når de er ændret, selvom man lukker browseren?
Avatar billede Slettet bruger
19. maj 2010 - 10:59 #12
Jeg har lært PHP vha. af www.w3schools.com
Hvor kan man bygge videre, så man kan lære det mere avancerede?
Avatar billede Slettet bruger
19. maj 2010 - 10:59 #13
Jeg har lært PHP vha. af www.w3schools.com
Hvor kan man bygge videre, så man kan lære det mere avancerede?
Avatar billede majbom Novice
19. maj 2010 - 11:11 #14

<?php
var_A = "bla";
var_noget = "blabla";
var_B = "blablabla";
var_nogetandet = "blablablabla";
?>


skal vel være uden mellemrum mellem variabelnavn og variablsens værdi?
Avatar billede olebole Juniormester
19. maj 2010 - 11:19 #15
Ja, variablerne er permanent ændrede. Du kan åbne filen vars.php og forvisse dig om, at den nye værdi står i filen.

Lad os tage koden fra toppen:

<?php
/*
    Først tjekker vi, om der er sat en variabel contxt
    - og at den indeholder strengen editVar.
    Hvis det er tilfældet, kommer vi fra formen og skal til at rette.
*/
if (isset($_POST['contxt']) && $_POST['contxt']=='editVar') {
// Funktionen file splitter indholdet af en fil til et array
// - bestående af filens linjer
    $file = file('vars.php');
   
// Vi bladrer array'et (filens linjer) igennem:
    for ($i=0,$j=count($file); $i<$j; $i++) {
    // Split hver linje i et array, så første element
    // indeholder navnet - og andet element indeholder værdien
        $var = explode("=", $file[$i]);
       
    // Hvis første del af linjen svarer til variabelnavnet fra formen:
        if ($var[0]==$_POST['varName']) {
        // - så ændrer vi denne ene linje
            $file[$i] = $var[0]."=\"".$_POST['varName']."\";";
        }
    }
   
// Arrayet samles om nye linjer:
    $file = implode("\r\n", $file);

// Filen åbnes for skrivning:
    $fp = fopen('vars.php', 'w');

// Der skrives i filen:
    fwrite($fp, $file);

// Filen lukkes:
    fclose($fp);
}
?>

Her er desuden links til dokumentationen over de funktioner, jeg har brugt i eksemplet. Så ved du også, hvor du finder info ... php.net kan man ikke leve uden  ;o)
Avatar billede olebole Juniormester
19. maj 2010 - 11:23 #17
splazz >> nej, det er der ingen grund til. Til gengæld har jeg lavet et par andre fejl:

<?php
$var_A = "bla";
$var_noget = "blabla";
$var_B = "blablabla";
$var_nogetandet = "blablablabla";
?>

- og:

<?php
if (isset($_POST['contxt']) && $_POST['contxt']=='editVar') {
    $file = file('vars.php');
    for ($i=0,$j=count($file); $i<$j; $i++) {
        $var = explode("=", $file[$i]);
        if ($var[0]==$_POST['varName']) {
            $file[$i] = "$".$var[0]."=\"".$_POST['varName']."\";";
        }
    }
    $file = implode("\r\n", $file);
    $fp = fopen('vars.php', 'w');
    fwrite($fp, $file);
    fclose($fp);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>

<form action="" method="post">
<input type="hidden" name="contxt" value="editVar">
<p>Variabelnavn: <input type="text" name="varName"></p>
<p>Variabelværdi: <input type="text" name="varValue"></p>
<p><button type="submit">Ret</button></p>
</form>

</body>
</html>
Avatar billede majbom Novice
19. maj 2010 - 11:32 #18
vil $var[0] ikke indeholde variabelnavn plus mellemrum? og så vil den ikke være magen til den man sender fra formen...
Avatar billede olebole Juniormester
19. maj 2010 - 12:31 #19
Jo, men ikke sådan som koden er skrevet. Jeg bruger jo netop ikke mellemrum omkring lighedstegnet. Præcis for at undgå det problem. Ellers skal du ud i noget trim eller RegExp  =)
Avatar billede majbom Novice
19. maj 2010 - 12:40 #20
nej det gør du ikke i koden, men det var hvis du brugte den kode du skrev som eksempel på variabel-filen...
Avatar billede olebole Juniormester
19. maj 2010 - 12:48 #21
Sorry - my (very) bad! Der skal naturligvis stå:

<?php
$var_A="bla";
$var_noget="blabla";
$var_B="blablabla";
$var_nogetandet="blablablabla";
?>
Avatar billede majbom Novice
19. maj 2010 - 13:02 #22
tak! :o)
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