how to store variable values over multiple page loads

前端 未结 7 478
南笙
南笙 2020-12-18 07:34

I\'m making a php script that stores 3 arrays: $images, $urls, $titles based on the input data of the form within the php file.

<
相关标签:
7条回答
  • 2020-12-18 08:03

    You can use sessions to store values and write rules to refill form fields after validations on data submit. Also function isset() is very helpful to avoid "not defined" errors.

    0 讨论(0)
  • 2020-12-18 08:07

    What brought me here was somewhat different kind of beast. I had problem with subsequent post request from AXIS IP camera and needed to preserve last file name across requests. In case that someone stumble here looking for some way to cache variables and SESSION is not an option maybe should look at Alternative PHP Cache:

    Note: Unlike many other mechanisms in PHP, variables stored using apc_store() will persist between requests (until the value is removed from the cache).

    http://php.net/manual/en/book.apc.php

    0 讨论(0)
  • 2020-12-18 08:08

    Changing the scope of the variables to a larger scope, might do the trick. Also, check if you have a post request before updating the values.

    <?php
        if(sizeof($_POST) >0)
        {
          //UPDATE VALUES
        }
    ?>
    
    0 讨论(0)
  • 2020-12-18 08:11

    If you want a permanent storage of state, between different pages, you should use sessions, by putting session_start(); in the start of your script. After this, every variable $_SESSION[$x] will be persisted, and will be available to your scripts.

    However, in this particular case, answering your question: "Is there a way to store the values of the array so that the form always gets pre-filled with the last saved values?", it is easier to just use the $_POST variable if it exists already:

    <?php
    if(!$_POST){
        $_POST = array();
        foreach(array("i0","i1","i2","i3") as $i) $_POST[$i]="";
        foreach(array("u0","u1","u2","u3") as $i) $_POST[$i]="";
        foreach(array("t0","t1","t2","t3") as $i) $_POST[$i]="";
    }
    foreach($_POST as $k=>$v)  filter_input(INPUT_POST,$k,FILTER_SANITIZE_SPECIAL_CHARS);
    
    //save the arrays with the form data
    $images = array($_POST["i0"], $_POST["i1"], $_POST["i2"], $_POST["i3"]);
    $urls   = array($_POST["u0"], $_POST["u1"], $_POST["u2"], $_POST["u3"]);
    $titles = array($_POST["t0"], $_POST["t1"], $_POST["t2"], $_POST["t3"]);
    
    
    //print the arrays
    print_r($images);
    print_r($urls);
    print_r($titles);
    //create the form and populate it
    echo "<p><form method='post' action='".$_SERVER['PHP_SELF']."';";
    $x = 0;
    while ($x <= 3) {
       echo"<div>
                <input name='i".$x."' type='text' value='".$images[$x]."'>
                <input name='u".$x."' type='text' value='".$urls[$x]."'>
                <input name='t".$x."' type='text' value='".$titles[$x]."'>";
           $x++;
    }
    ?>
    <br>
    <input type="submit" name="sumbit" value="Save"><br>
    </form>
    

    Note: this line foreach($_POST as $k=>$v) filter_input(INPUT_POST,$k,FILTER_SANITIZE_SPECIAL_CHARS); should be enough to protect you from basic XSS attacks. Note also that in general, it is best to follow the pattern of reloading pages with GET after POST, which makes you less susceptible to form resubmitions, in which case using sessions for storage is the better solution.

    0 讨论(0)
  • 2020-12-18 08:22

    Store the variables in a PHP session.

    session_start();
    $_SESSION['images'] = $images;
    

    Then on next (or any other) page, you can retrieve the values as:

    session_start();
    $images = $_SESSION['images'];
    
    0 讨论(0)
  • 2020-12-18 08:22

    Use sessions: http://php.net/manual/en/function.session-start.php

    0 讨论(0)
提交回复
热议问题