2016-03-23 24 views
0

Ich habe mehrere Beiträge zu diesem Thema hier gelesen, aber keiner scheint den Trick zu tun, vielleicht bin ich nur Missverständnis, wie ich neu zu diesem Thema. Ich habe ein Formular, das in eine Datenbank einfügt und dann echo out die Daten, perfekt !, Mein Problem ist, weil das Formular auf einer Benutzerkontenseite ist, wenn Sie sich ausloggen alle Informationen verschwindet. Ich bin mir bewusst, dass ich meine $ _POST-Variablen in eine $ _SESSION speichern muss.

Aber selbst wenn sie in einer Sitzung gespeichert werden, verschwinden die Daten immer noch, sobald sie sich ausgeloggt haben, wenn sie sich wieder einloggen. Wie kann man $ _POST in $ _SESSION speichern?

Ich bin derzeit mit:

// Save $_POST to $_SESSION 
$_SESSION['fname'] = $_POST; 

Gibt es einen besseren Weg, hier ist mein Code:

HTML

 <section class="container"> 
    <form id="myform " class="Form" method="post" action="Cus_Account.php?c_id=<?php echo $c_id ?>" accept-charset="utf-8"> 

     <!--     <div id="first">--> 
     <input type="text" id="fname" name="fname" value="<?php echo isset($_POST['fname']) ? $_POST['fname'] : '';?>" required> 
     <input type="text" id="lname" name="lname" value="<?php echo isset($_POST['lname']) ? $_POST['lname'] : '';?>" required> 
     <input type="text" id="email" name="email" value="<?php echo $_SESSION['Cus_Email']; ?>" required> 
     <input type="number" id="phone" name="phone" value="<?php echo isset($_POST['phone']) ? $_POST['phone'] : '';?>"required> 
     <input type="submit" name="Update" value="Update"> 
     <br> 
    </form> 

PHP

<?php 
if (isset($_POST['Update'])) { 
$c_fname = $_POST['fname']; 
$c_lname = $_POST['lname']; 
$c_email = $_POST['email']; 
$c_phone = $_POST['phone']; 

// Save $_POST to $_SESSION 
$_SESSION['fname'] = $_POST; 
//query 

$insert_det = "INSERT INTO Cus_acc_details(CUS_Fname,CUS_Lname,Cus_Email,CUS_Phone) VALUES (?,?,?,?)"; 
$stmt = mysqli_prepare($dbc, $insert_det); 
//new 
// $stmt = mysqli_prepare($dbc, $insert_c); 
//debugging 
//$stmt = mysqli_prepare($dbc, $insert_c) or die(mysqli_error($dbc)); 

mysqli_stmt_bind_param($stmt, 'sssi', $c_fname, $c_lname, $c_email, $c_phone); 

/* execute query */ 
$r = mysqli_stmt_execute($stmt); 

// if inserted echo the following messges 
if ($r) { 
    echo "<script> alert('registration sucessful')</script>"; 
} 
} else { 
echo "<b>Oops! Your passwords do not </b>"; 
} 
?> 

Die $ _SESSION [ 'Cus_Email'] im Formular ist f von einer anderen Abfrage. Jede Hilfe oder Vorschläge würden sehr geschätzt werden.

+1

Mögliche Duplikate von [Sitzungsvariablen nicht funktioniert php] (http://stackoverflow.com/questions/19692157/session-variables-not-working-php) – Machavity

+0

Nicht sicher von Ihrer Frage, aber vielleicht einen Sitzungswert für jeden Feld '$ _SESSION ['fname'] = $ _POST ['fname'];' – chris85

+0

Oder einfach '$ _SESSION = $ _POST;' aber wahrscheinlich '$ _SESSION ['post'] = $ _POST;' dann einfach 'echo $ _SESSION ['post'] ['fname']; 'etc ... – AbraCadaver

Antwort

1

$_POST Daten sollten nur temporär als Sitzungsvariable gespeichert werden. Zum Beispiel, wenn Ihre Benutzer einen Fehler macht:

form.php

<?php 
    // This function should go in a config file, to escape data: 
    function html($str){ 
    return htmlspecialchars($str, ENT_QUOTES); 
    } 

    $data = $_SESSION['form']['data']; 
    $errors = $_SESSION['form']['errors']; 
?> 
<form method="post" action="action.php"> 

    <input type="text" name="fname" value="<?=html($data['fname'])?>" placeholder="First name"> 
    <?php if(isset($errors['fname'])): ?> 
    <p>ERROR: <?=html($errors['fname'])?></p> 
    <?php endif; ?> 

    <input type="text" name="lname" value="<?=html($data['lname'])?>" placeholder="Last name"> 

    <button type="submit">Go</button> 

</form> 
<?php 
    unset($_SESSION['form']); // You don't want to keep this data any longer. 

action.php

<?php 
    $data = $_POST; 

    // Validate the data, for example: 
    if($data['fname'] == ''){ 
    $errors['fname'] = "First name is required."; 
    } 

    if(!empty($errors)){ 
    unset($data['password']); // Do not store passwords in session variables. 
    $_SESSION['form']['data'] = $data; 
    $_SESSION['form']['errors'] = $errors; 
    header("Location: form.php"); 
    die; 
    } 
    // Put your database inserts here (no errors) 

sollten Sie speichern Dinge wie Vorname, Nachname, etc, in Ihrer Datenbank. Speichern Sie diese nicht in $_SESSION anders als im obigen Beispiel.

+0

Die Information befindet sich in der Datenbank. aber ich will nur die info auch auf der konto-seite angezeigt, wenn geladen – jerneva

+0

@jerveva In dem formular, meinst du? – rybo111

+0

Hallo. Ich habe es sortiert. Benutzte stattdessen eine Auswahlabfrage und speicherte die Variablen in einer Sitzung – jerneva