Avatar billede sandslot Nybegynder
06. november 2007 - 21:29 Der er 9 kommentarer

globals = off

Hej jeg har et lille script fra en bog.
Der kører fint når globals = on.
hvordan får man det til at virke når den nu er off.


<?
$page = "form1.php";
?>
<html>
<head>
<style type="text/css">
    .error {color:red;}
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<?
function error_flag($error, $field) {
    if($error[$field]) {
        print("<td class=error>");
    } else {
        print("<td>");
    }
} //slut på funktion error_flag()

function print_form() {
    global $error, $print_again, $first, $last, $page;
    ?>
    <form action="<? echo $page ?>" method="post">
    <?
    if($print_again) {
        ?><h3>Du glemte at udfylde visse felter - ret venligst de <span class=error>røde</span> felter.<?
    } else {
        ?><h3>Udfyld venligst følgende felter:</h3><?
    }
    ?>
    <table border="0">
        <tr><td <? error_flag($error, "first"); ?>Fornavn:</td>
            <td><input type="text" name="first" value="<?=$first ?>"></td></tr>
        <tr><td <? error_flag($error, "last"); ?>Efternavn:</td>
            <td><input type="text" name="last" value="<?=$last ?>"></td></tr>
        <tr><td colspan="2" align="center">
            <input type="submit" name="submit" value="Send formular"></td></tr>
    </table>
    </form>
    <?
} // slut på funktionen print_form()

function check_form() {
    global $error, $print_again, $first, $last;
    $error['first'] = false;
    $error['last'] = false;
    $print_again = false;
    if($first == "") {
        $error['first'] = true;
        $print_again = true;
    }
    if($last == "") {
        $error['last'] = true;
        $print_again = true;
    }   
    if($print_again) {
        print_form();
    } else {
        print("<h3>Tak fordi du har udfyldt formularen!</h3>");
    }
} // slut på funktionen check_form()

/***** MAIN *****/
if(isset($submit)) {
    check_form();
} else {
    print_form();
}
?>
</body>
</html>
Avatar billede erikjacobsen Ekspert
06. november 2007 - 22:12 #1
Groft sagt: hvor du bruger fx $first, skal du nu bruge $_POST['first']
Men gør dig selv en stor tjeneste: smid den bog langt væk - hvis den er i gang med at lære dig PHP med registerglobals har den sikkert også en masse anden skodkode, den vil lære dig. Det synes jeg ikke du skal spilde din tid med.
Avatar billede sandslot Nybegynder
06. november 2007 - 23:06 #2
Hej jeg er igang med med at lære php fra en bog. 'avanceret php' fra libris www.libris.dk 1 oplag 2003 :-)
$_POST['first'] giver fejl hvis jeg bruger det i funktionerne.

Har i stedet slette /***** MAIN *****/
if(isset($submit)) {
    check_form();
} else {
    print_form();
}
?>
og erstatte det med
if (empty($_POST['first'])) $first = '';
else $first = $_POST['first'];

if (empty($_POST['last'])) $last = '';
else $last = $_POST['last'];

if($first)
{
    check_form();
}
else
{
    print_form();
}
samt skiftet
<form action="<? echo $page ?>" method="post">
<form action=<?php echo $_SERVER['PHP_SELF']; ?>  method="post">

Nu virker det det men er det, så den rigtige måde at gøre det på.
Og findes der en bog der virker :-)

<?
$page = "form1.php";
if (empty($_POST['first'])) $first = '';
else $first = $_POST['first'];

if (empty($_POST['last'])) $last = '';
else $last = $_POST['last'];

if($first)
{
    check_form();
}
else
{
    print_form();
}
//
?>
<html>
<head>
<style type="text/css">
    .error {color:red;}
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<?
function error_flag($error, $field) {
    if($error[$field]) {
        print("<td class=error>");
    } else {
        print("<td>");
    }
} //slut på funktion error_flag()

function print_form() {
    global $error, $print_again, $first, $last, $page;
    ?>

    <form action=<?php echo $_SERVER['PHP_SELF']; ?>  method="post">
    <?
    if($print_again) {
        ?><h3>Du glemte at udfylde visse felter - ret venligst de <span class=error>røde</span> felter.<?
    } else {
        ?><h3>Udfyld venligst følgende felter:</h3><?
    }
    ?>
    <table border="0">
        <tr><td <? error_flag($error, "first"); ?>Fornavn:</td>
            <td><input type="text" name="first" value=""></td></tr>
        <tr><td <? error_flag($error, "last"); ?>Efternavn:</td>
            <td><input type="text" name="last" value=""></td></tr>
        <tr><td colspan="2" align="center">
            <input type="submit" name="submit" value="Send formular"></td></tr>
    </table>
    </form>
    <?
} // slut på funktionen print_form()

function check_form() {
    global $error, $print_again, $first, $last;
    $error['first'] = false;
    $error['last'] = false;
    $print_again = false;
    if($first == "") {
        $error['first'] = true;
        $print_again = true;
    }
    if($last == "") {
        $error['last'] = true;
        $print_again = true;
    }
    if($print_again) {
        print_form();
    } else {
        print("<h3>Tak fordi du har udfyldt formularen!</h3>");
    }
} // slut på funktionen check_form()

?>
</body>
</html>
Avatar billede erikjacobsen Ekspert
06. november 2007 - 23:12 #3
Det er bestemt en måde at sætte $first ud fra $_POST['first'] osv.

Du skal dog hellere

if (!isset($_POST['first'])) $first = '';
else $first = $_POST['first'];

Jeg følger ikke med i hvilke bøger der udgives, men din lyder gammel, og 2003 er jo ret lang tid siden. Jeg skal kun gentage, hvad der er min anbefaling: smid den bog væk. Desværre kan jeg ikke give dig et alternativ.
Avatar billede sandslot Nybegynder
06. november 2007 - 23:43 #4
Okay jeg er ikke blevet meget kloger ;-)
$_POST['first'] jo det virker jeg havde bare ikke fjerne $ $_POST['$first'] :-)

Når men jeg vil stille mig.

if (!isset($_POST['first'])) $first = '';
else $first = $_POST['first'];

Det virker fint.
Hvad med resten af koden i eksemple er det ok, eller skodkode ?
Avatar billede erikjacobsen Ekspert
07. november 2007 - 08:48 #5
Resten? Det er vel typisk for pre 2003: gammeldags.
Avatar billede sandslot Nybegynder
07. november 2007 - 09:02 #6
Okay jeg vil prøve at finde en nyere bog.
Send et svar du kan få dine point.
Avatar billede erikjacobsen Ekspert
07. november 2007 - 09:24 #7
Jeg samler slet ikke på point, tak.
Avatar billede sandslot Nybegynder
07. november 2007 - 10:13 #8
Okay tak for hjælpen
Avatar billede dkfire Nybegynder
07. november 2007 - 11:22 #9
Faldt lige over et bilag til din bog:
http://www.libris.dk/bm/bilag/avanceret_php/
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