WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Bygga php-variabler från array? (https://www.wn.se/forum/showthread.php?t=1045178)

MRDJ 2010-12-03 18:29

Citat:

Ursprungligen postat av youheardit (Inlägg 20381006)
Tjenixen!

Har en liten fråga jag suttit och funderat på under de tider jag programmerat lite PHP.

Kan man skapa variabler från en array? Säg att jag har en fil som hämtar ca info från 10st $_GET requests.

Ex:
PHP-kod:


$gets 
= array("name","address","city","zip","region");

foreach(
$gets as $newvar){
     ${
$newvar} = $_GET["'".$newvar."'"];
}

echo 
$name//ekar ut det som fanns i $_GET['name']; ex: Philip
echo $address;
osv osv osv..... 

Jag har testat något liknande förr, men fick en massa error och gav upp direkt eftersom jag inte kunde tolka felen.

EDIT: Körde koden som jag skrev i exemplet, men ingenting skrevs ut. Och när jag satte igång E_NOTICE så fick jag:

för varje variabel...

EDIT 2: Tog bort citattecknen i $_GET så det istället blev $_GET[$newvar], det fungerade, men hur gör jag med siffror? för det kommer ju inte funka...

tacksam för svar!

Med vänliga hälsningar, Philip Andersson!

Felet beror på att du försöker anropa ett arrayvärde som inte finns.
du måste alltid kolla om värdet är satt när du loopar igenom en array,
det kan du göra med t.ex strlen() eller empty().

t.ex nått sånthär:
PHP-kod:

$data = array("test1","test2");
foreach(
$data as $d) {
  if(!empty(
$_GET[$d])) {
    
// Gör nått här
  
}


Att skapa nya PHP-variabler utifrån GET eller POST är inte att rekommendera,
Sedan är jag inte riktigt med på varför du vill skapa nya variabler, värdet finns ju redan i $_GET[]

youheardit 2010-12-04 00:15

Citat:

Ursprungligen postat av MRDJ (Inlägg 20381239)
Felet beror på att du försöker anropa ett arrayvärde som inte finns.
du måste alltid kolla om värdet är satt när du loopar igenom en array,
det kan du göra med t.ex strlen() eller empty().

t.ex nått sånthär:
PHP-kod:

$data = array("test1","test2");
foreach(
$data as $d) {
  if(!empty(
$_GET[$d])) {
    
// Gör nått här
  
}


Att skapa nya PHP-variabler utifrån GET eller POST är inte att rekommendera,
Sedan är jag inte riktigt med på varför du vill skapa nya variabler, värdet finns ju redan i $_GET[]

Tack för tipset, låter mycket logiskt att kolla av först om variablen har ett värde.

pelmered 2010-12-04 03:34

Citat:

Ursprungligen postat av Magnus_A (Inlägg 20381019)
Kör inte extract() på $_GET bara....

annars kan du titta på import_request_variables().

extract() är ju inga problem så länge man kontrollerar datan innan man sätter in den i SQL t.ex.

import_request_variables() visste jag inte om däremot, tack för tipset. Förstår dock inte riktigt vad skillnaden är mellan dem. Varför är import_request_variables() säkrare?

youheardit 2010-12-04 08:27

Citat:

Ursprungligen postat av ITisGood.se (Inlägg 20381299)
extract() är ju inga problem så länge man kontrollerar datan innan man sätter in den i SQL t.ex.

import_request_variables() visste jag inte om däremot, tack för tipset. Förstår dock inte riktigt vad skillnaden är mellan dem. Varför är import_request_variables() säkrare?

Jag är inte 100% säker på att jag ska köra extract på $_GET eller $_POST.
Men varnar PHP själv för det så tror jag nog man ska försöka att låta bli ;)

Citat:

Do not use extract() on untrusted data, like user input (i.e. $_GET, $_FILES, etc.). If you do, for example if you want to run old code that relies on register_globals temporarily, make sure you use one of the non-overwriting extract_type values such as EXTR_SKIP and be aware that you should extract in the same order that's defined in variables_order within the php.ini.

Magnus_A 2010-12-04 12:35

Citat:

Ursprungligen postat av ITisGood.se (Inlägg 20381299)
extract() är ju inga problem så länge man kontrollerar datan innan man sätter in den i SQL t.ex.

import_request_variables() visste jag inte om däremot, tack för tipset. Förstår dock inte riktigt vad skillnaden är mellan dem. Varför är import_request_variables() säkrare?

import_request_variables är säkrare för att du byter namn på variabeln och du inte riskerar att skriva över dina egna variabler.

pelmered 2010-12-05 17:03

Citat:

Ursprungligen postat av Magnus_A (Inlägg 20381325)
import_request_variables är säkrare för att du byter namn på variabeln och du inte riskerar att skriva över dina egna variabler.

Jaha, okej.
Tack sak du ha!

youheardit 2010-12-05 22:57

Citat:

Ursprungligen postat av Magnus_A (Inlägg 20381325)
import_request_variables är säkrare för att du byter namn på variabeln och du inte riskerar att skriva över dina egna variabler.

Tack, låter bättre att köra så.


Alla tider är GMT +2. Klockan är nu 16:01.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson