PHP - OTURUM değişkenleri içine tüm POST veri dönüştürün

5 Cevap php

Bunu yapmanın çok daha zarif bir yolu olmalı var.

Nasıl oturum değişkenleri boş olmayan tüm sonrası veri hattı ile her bir satır belirtmeden, dönüştürebilirim? Temelde, POST dizide mevcut X tüm örnekleri için aşağıdaki işlevi gerçekleştirmek istiyoruz.

if (!empty($_POST['X'])) $_SESSION['X']=$_POST['X'];

Ben bunu tek tek yapmak için gidiyordu, ama sonra çok daha zarif bir çözüm olmalı dedim

5 Cevap

Ben kabul edilebilir POST isimler sözlüğü belirtmek istiyorum.

$accepted = array('foo', 'bar', 'baz');

foreach ( $_POST as $foo=>$bar ) {
    if ( in_array( $foo, $accepted ) && !empty($bar) ) {
        $_SESSION[$foo] = $bar;
    }
}

Veya bu yönde bir şey. O 0 boş gibi davranır çünkü empty kullanmak olmaz.

Hala açık bir dirsek var çünkü sözdizimi hatası vardır. olmalıdır

$vars = array('name', 'age', 'location');
foreach ($vars as $v) {
   if (isset($_POST[$v])) {
      $_SESSION[$v] = $_POST[$v];
   }
}

O gibi çalışmak gerekir. Eğer kullanın

if ($_POST[$v])...

Boş veri aşağı şeritler.

Buyrun,

if(isset($_POST) {
 foreach ($_POST as $key => $val) {
  if($val != "Submit")
   $_SESSION["$key"] = $val;
 }
}

Peki ben öneririm ilk şey don't Bunu yapmak olduğunu. Bu büyük bir potansiyel güvenlik açığı bulunuyor. Diyelim ki kullanıcı adı ve / veya UserType (çok yaygın) bir oturum değişkeni güveniyor diyelim. Birisi sadece bu ayrıntılar üzerinde gönderebilirsiniz. Sadece $_SESSION ie $_POST onaylanmış değerleri kopyalayarak bir beyaz liste yaklaşım olmalıdır:

$vars = array('name', 'age', 'location');
foreach ($vars as $v) {
  if (isset($_POST[$v]) {
    $_SESSION[$v] = $_POST[$v];
  }
}

Eğer "boş" nasıl tanımlamak tür yapmanız kontrol belirler. Yukarıdaki kod kullanımları isset(). Eğer boş dizeleri veya 0 sayısını yazmak istemiyorsanız da if ($_POST[$v]) ... yapabilirdi.

Bu @ Meder cevabı basitleştirilmiş bir versiyonu olan bu bit için bana yol:

<?php
$accepted = array('foo', 'bar', 'baz');

foreach ( $accepted as $name ) {
    if ( isset( $_POST[$name] ) ) {
        $_SESSION[$name] = $_POST[$name];
    }
}

@ Meder işaret olarak da, !empty() isset(), yukarıdaki olsa uzak erimli empty() ne kadar farkında olmak yerine olabilir.