Pagina 1 din 1

Creare si adaugare sir JSON in caseta input

Scris: Lun Feb 01, 2016
de andras
Salut,
Sint contrariat ca un sir json nu este preluat in input (simplificat, testare):

Cod: Selectaţi tot

<?php
function formInsert($variabile, $tabela, $clasa){
$numItems = count($variabile);
$i = 0; 
$re='';
$aj='{';
$re .='<div id="'.$tabela.'" ><form action="#" class="'.$tabela.'" method="POST" id="'.$tabela.'" style="text-align: right;">Introduceti datele si acest cod :&nbsp;&nbsp;<span style="font-size: 24px;">'.sprintf( $codev).'</span><br/>';
foreach ($variabile as $key => $value) {
$re .= '<label for="'.$value.'">'.$key.'</label><input type="text" name="'.$value.'" id="'.$value.'" autocomplete="off" value="" align="right" style="width: 200px; height: 22px; margin: 3px;" /><br/>';        
$aj .= '"'.$value.'"';
if (++$i === $numItems) { if(isset($_POST[$value])) $aj .=' : '.'"'.$_POST[$value].'"'.'}'; else $aj .=' : ""}';}
else {if (isset($_POST[$value])) $aj .=' : '.'"'.$_POST[$value].'"'.', '; else $aj .=' : "", ';}    
}    
echo $aj;    //dupa completarea cimpurilor si submit afiseaza {"nume" : "ion", "prenume" : "vasile", "virsta" : "11"}    
$re .= '<input type="text" name="sirjson" id="sirjson" value="'.$aj.'" />'; // pune doar un { in cimp (urmeaza sa-l fac hidden)
$re .= '<input type="submit" name="susr"  id="susr" onclick="ajaxSend(this.parentNode.id(\"sirjson\").value);" value="submit" />';
$re .= '</form></div><br/>';

return $re;   // afiseaza formularul
}
?>
Sirul $aj nu-l pune in id="sirjson" nici daca scot acoladele nici daca mai pun \" \" si nu functioneaza nici ajaxSend () chiar daca pun

Cod: Selectaţi tot

ajaxSend(document.getElementById(\"sirjson\").value);
Unde gresesc?

Creare si adaugare sir JSON in caseta input

Scris: Lun Feb 01, 2016
de MarPlo
Salut,
Sirul JSON nu e nevoie sa-l creezi manual in php, ci se creaza array-ul apoi se aplica json_encode().
Daca vrei sa adaugi sirul json intr-un <input>, pune-l la atributul "value" inttre ghilimele simple (fiindca sirul json contine ghilimele duble).
Exemplu

Cod: Selectaţi tot

<?php
function formInsert($keys, $vals){
  $aj=[];
  $n = min(count($keys), count($vals));
  $re ='<form action="#" method="POST">';
  for($i=0; $i<$n; $i++) {
    $aj[$keys[$i]] = $vals[$i];
  }    
  $aj = json_encode($aj);    //creaza sir json
  $re .= "<input type='text' name='sirjson' id='sirjson' value='". $aj. "' /></form>";

  return $re;
}

echo formInsert(['k1', 'k2', 'k3'], ['v1', 'v2', 'v3']);  // {"k1":"v1","k2":"v2","k3":"v3"} 

Creare si adaugare sir JSON in caseta input

Scris: Lun Feb 01, 2016
de andras
Din pacate ceva nu fac bine si functioneaza doar partial, afiseaza sirul JSON doar dupa submit, adica la submit trimite doar variabile POST vide. Functia completa este:

Cod: Selectaţi tot

<?php
function formInsert($variabile, $tabela, $clasa){
$numItems = count($variabile);
$codev = setCaptcha('codev'); 
$i=0;
$re='';
$aj=[];
$re .='<div id="'.$tabela.'" ><form action="prelucrari.php" class="'.$tabela.'" method="POST" id="'.$tabela.'" style="text-align: right;">Introduceti datele si acest cod :&nbsp;&nbsp;<span style="font-size: 24px;">'.sprintf( $codev).'</span><br/>';
foreach ($variabile as $key => $value) {
$re .= '<label for="'.$value.'">'.$key.'</label><input type="text" name="'.$value.'" id="'.$value.'" autocomplete="off" value="" align="right" style="width: 200px; height: 22px; margin: 3px;" /><br/>';        
if (isset($_POST[$value])) $aj[$value]= $_POST[$value];  // aici e problema, nu preia imediat
$i++;
}
$aj = json_encode($aj); // formeaza corect sirul json
echo $aj; // afiseaza {"nume":"ion","prenume":"vasile","virsta":"11"} dar numai dupa ce face submit
$re .= '<input type="hidden" name="numeclasa" id="numeclasa" value="'.$clasa.'" />';
$re .= '<input type="hidden" name="numetabela" id="numetabela" value="'.$tabela.'" />';                
$re .= "<input type='hidden' name='sirjson' id='sirjson' value='". $aj. "' />";
$re .= '<label for="codev">cod</label><input type="text" name="codev" size="5" maxlength="6" id="codev" autocomplete="off" style="height: 22px;" />';
$re .= "<input type='submit' onclick='ajaxSend(document.getElementById(\"sirjson\").value)' />";
$re .= '</form></div><br/>';
return $re;
}
?>
Daca nu pun conditia if (isset($_POST[$value])) imi da eroare, nu recunoaste variabilele POST. Probabil am gresit din conceptia codului, dar nu pot merge mai departe.
Cum rezolv sa-mi citeasca varibilele POST din prima? Daca nu rezolv trebuie sa renunt la forma asta a functiei.
La fel de defectuos functioneaza indiferent ca apelez la onclick sau la action="prelucrari.php".
Multumesc.

Creare si adaugare sir JSON in caseta input

Scris: Mar Feb 02, 2016
de MarPlo
Cu ce vrei sa completezi array-ul $aj pentru json daca in acel moment nu sunt date trimise /primite cu $_POST?
Care variabile $_POST sa citeasca din prima? $_POST exista doar dupa trimiterea de date la script cu POST.
Poate ar trebui ceva de genu:

Cod: Selectaţi tot

//daca sunt date primite prin POST de la pagina, le preia
//altfel preia pe cele de unde sunt deja salvate
if(isset($_POST[$value])) $aj[$value]= $_POST[$value];
else $aj['nus_ce_cheie'] ='nus_ce_valoare';  //Aci tu stii unde ai Ion, Vasile, etc. 

Creare si adaugare sir JSON in caseta input

Scris: Mar Feb 02, 2016
de andras
Da, acum e clar, scuze pentru obtuzitatea mea, filozofia mea a fost gresita din start. Am vrut prea repede sa captez variabilele POST si sa plec din formular direct catre functia ajax, dar nu merge, variabilele POST n-au existat pentru ca nu au fost trimise. Am transferat functia $aj = json_encode($aj); din formular in script (prelucrari.php) si am gasit variabele POST, functioneaza normal.