Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Muuttujan muodostus stringistä

B_R_H [27.09.2009 18:03:10]

#

Terve,

törmäsin ongelmaan geneerisen muuttujan käsittelyssä. Koodini käsittelee formilta tulleet tiedostot post-methodin kautta. Ongelma on se, että en osaa muodostaa tuota muuttujaa geneerisesti käsiteltäväksi.

Osa varmaankin jo muistaa, mistä tämä tuli vastaan:
https://www.ohjelmointiputka.net/keskustelu/19743-useita-samanlaisia-comboboxeja

Tässä alla se koodi, jossa noita 30 muuttujaa yritän käsitellä. Neuvokaas taas osaamatonta.

for ($a=1;$a<30;$a++) {
   $muuttuja="$_POST['boxi'".(string)$a."]"; // tän tyyppistä siis yritän tehdä.
   echo $muuttuja.' <br/>';
}

Metabolix [27.09.2009 19:24:45]

#

Siis mitä ihmettä? O_o Valitse näistä:

<?php
$x = $_POST["arvo_1"];   # ilman muuttujaa
$x = $_POST["arvo_$i"];  # muuttujalla
$x = $_POST["arvo_".$i]; # muuttujalla toinen tapa
echo $x; // Tulostaa esim. 'MOI'

$x = '$_POST["arvo_1"]';      # ilman muuttujaa
$x = '$_POST["arvo_'.$i.'"]'; # muuttujalla
$x = "\$_POST['arvo_$i']";    # muuttujalla toinen tapa
echo $x; // Tulostaa esim. '$_POST["arvo_1"]'

B_R_H [28.09.2009 15:09:11]

#

Kiitti! En tiennytkään, että nämä toimii.

$x = $_POST["arvo_$i"];  # muuttujalla
$x = $_POST["arvo_".$i]; # muuttujalla toinen tapa

B_R_H [28.09.2009 17:38:44]

#

Tähän samaan liittyen. Onko tuo luupissa sijoittaminen yleensäkään mahdollista, kun jälkimmäinen toimii ok, mutta ensimmäinen ei. (toivottavasti copy/Paste ei tehnyt pahoja virheitä...)

Funktio:

<?php
Function hae($row,$kentta)
{
if ($_POST[$kentta]<0) {
   return 'NULL';
} else {
   return $row[$_POST[$kentta]];
}

Tää toimimaton:

<?php
$q = "insert into taulu values ('avain',".
     for ($a=1;$a<5;$a++) {
         "'".hae($row,'kentta_'.$a)."',".
     }
     "current_timestamp".");";

Tämä taas toimii

<?php
$q = "insert into taulu values ('avain','".
     hae($row,'kentta_1)."','".
     hae($row,'kentta_1)."','".
     hae($row,'kentta_1)."','".
     hae($row,'kentta_1)."','".
     hae($row,'kentta_1)."','".
     "current_timestamp".");";

Teemu-root [28.09.2009 20:20:21]

#

PHP:ssa käytetään .= -operaattoria kahden (tai useamman) merkkijonon yhdistämiseen. Alla koodisi korjattuna, josta varmasti jo ymmärrät sen toiminnan.

<?php

$q = "insert into taulu values ('avain',";

for ($a=1;$a<5;$a++) {
    $q .= "'" . hae($row,"kentta_$a") . "',";
}

$q .= "current_timestamp);";

?>

Olisi hyvä vähintään tutustua PDO:n ihmeelliseen maailmaan. Sillä kannattanee hoitaa tuo rajapinta-tietokanta -välinen yhteys, säästyt tietoturvaongelmilta, joista on Mureakuhan Wikissäkin oma artikkelinsa. Toki jos tekemäsi skripta tulee vain omaan tai tutun porukan käyttöön, on aika sama millä tuon toteuttaa.

tsuriga [28.09.2009 23:31:49]

#

lainaus:

Toki jos tekemäsi skripta tulee vain omaan tai tutun porukan käyttöön, on aika sama millä tuon toteuttaa.

Datan syöttö varmistetaan myös syötevirheiden vuoksi, ts. kyllä ne tututkin osaa datan hajottaa vaikka vahingossa.

B_R_H [29.09.2009 08:49:48]

#

Kiitos taas valaisusta!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta