Creare si adaugare sir JSON in caseta input

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
andras
Mesaje: 430

Creare si adaugare sir JSON in caseta input

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?

MarPlo Mesaje: 4343
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"} 

andras Mesaje: 430
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.

MarPlo Mesaje: 4343
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. 

andras Mesaje: 430
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.

Subiecte similare