2 votes

passer une variable de texte d'un fichier texte à une cellule de formulaire html en utilisant php

L'objectif final est très simple. J'ai besoin de récupérer une ligne de texte dans un fichier texte, de l'analyser en quelques variables, puis d'afficher les variables dans les cellules d'un tableau dans une page Web. J'ai fait cela des dizaines de fois en utilisant mysql mais jamais un fichier de test. Le problème est que j'obtiens une entrée vide dans les cellules. Cependant, si je l'exécute à partir de la ligne de commande, les données s'affichent dans les cellules comme il se doit.

Dans mon dépannage, j'ai réduit les choses au strict minimum - juste une variable et une cellule. Si je code en dur la variable $mytest="15" ; cela fonctionne bien. Si je récupère la variable dans le fichier texte et que je la lis dans $mytest, la cellule s'affiche en blanc, alors qu'en ligne de commande, tout semble correct. J'ai même été jusqu'à définir une variable à 15 et à l'envoyer à un petit programme C via exec, puis j'ai défini mon $mytest comme étant égal à la valeur de retour, mais toujours rien.

<?php
$handle = fopen("/home/vm725d/vmbrr.v2.6.6.vticketQ.log", "r");
$line = fgets($handle);
        // process the line read.
        $fields = explode("|",$line);
        // Get data from fields
        $vticket = explode (":", $fields[0]);
        //$vTicket=$vticket[1];
        $vTicket="15";
        $mytest=exec ('/opt/observium/html/custom/fixstring ' . $vTicket);
        //$mytest=$vTicket;
        print "$mytest";
    fclose($handle);
?>
<html>
<body>
<CENTER><B>V-Ticket Test</b> </CENTER>

<TABLE>
<FORM METHOD="POST" name=modticket action=modticket.php>
<center><TABLE bgcolor="#258e8e" width=800 border=1>
<TR></TR<TR></TR>

<TR>
        <TD bgcolor="#FFFF99">vTicket:</TD>

         <TD width=24><input name="thing1" value="<?php print $mytest;?>"></TD>

</TR>
</table>
<input type=submit name=create_case value="Update">
</FORM>
</body>
</html>

Voici le code C du fixstring - rappelez-vous que je l'utilise juste comme un test.

#include <stdio.h>
#include <string.h>

int main(int argc, const char *argv[300])
{
        int length = 0;

        length = strlen(argv[1]);
        char NEW[length];
        memset (NEW,0,length );
        strcpy(NEW, argv[1]);

        printf ("%s",NEW);
}

Lorsque je fixe ma variable $mytest à "15", la cellule de ma page Web affiche 15 pour le vTicket.

Lorsque je fixe ma variable à la valeur du fichier texte ou à la valeur de retour du programme C fixstring, elle affiche un blanc.

Cependant, voici ce que je vois lorsque j'exécute le php à partir de la ligne de commande dans cet exemple

[Root@obs-stl-01 custom]# php vtest1.php

<html>
<body>
<CENTER><B>V-Ticket Test</b> </CENTER>

<TABLE>
<FORM METHOD="POST" name=modticket action=modticket.php>
<center><TABLE bgcolor="#258e8e" width=800 border=1>
<TR></TR<TR></TR>

<TR>
        <TD bgcolor="#FFFF99">vTicket:</TD>

         <TD width=24><input name="thing1" value="15"></TD>

</TR>
</table>
<input type=submit name=create_case value="Update">
</FORM>
</body>
</html>

Pourtant la page montre un champ vide pour la cellule thing1

Je peux en fait capturer cette sortie et l'écrire dans test.html, puis faire pointer mon navigateur dessus et elle s'affiche correctement.

Je sais que j'ai raté quelque chose de vraiment stupide mais je suis mordu par le serpent sur ce coup. Toute aide serait appréciée.

Gracias.

0voto

BradzTech Points 1559

Bienvenue sur StackOverflow ! Il me semble qu'il s'agit d'un problème de permissions. PHP est exécuté par votre utilisateur lorsqu'il est exécuté à partir de la ligne de commande, mais il est généralement exécuté par un utilisateur différent par un serveur web, tel que www-data . Si votre utilisateur a le droit d'exécuter le fichier, mais que l'utilisateur du serveur web ne l'a pas, cela pourrait causer le problème que vous rencontrez : le fichier fonctionne correctement lorsqu'il est exécuté manuellement, mais pas par HTTP.

Pour vérifier rapidement si c'est votre problème, essayez d'exécuter chmod +x /opt/observium/html/custom/fixstring . Est-ce que cela fonctionne dans le navigateur maintenant ?

Je l'espère. Cependant, il s'agit d'une solution techniquement peu sûre, car n'importe quel utilisateur peut maintenant exécuter le fichier. Si vous souhaitez être plus sûr, vous devriez plutôt exécuter chmod o-x /opt/observium/html/custom/fixstring pour annuler ce changement, et lancez chown www-data /opt/observium/html/custom/fixstring pour changer la propriété du fichier sur le serveur web, en supposant que www-data est le nom d'utilisateur du serveur. J'espère que cela vous aidera !

0voto

landru27 Points 1352

Lorsque j'exécute votre PHP avec un fichier d'entrée dont le format est impliqué par la façon dont vous l'interprétez, il fonctionne comme vous le décrivez. Il est fort possible que ce soit simplement un problème de permissions, comme le suggère la réponse de BradzTech.

Quoi qu'il en soit, ce qui pourrait aider à résoudre le problème est d'ajouter print "$line\n"; y print_r($fields); y print_r($vticket); pour être sûr que vous lisez et analysez ce que vous pensez.

Je laisserais tomber le fixstring Le programme C pour le dépannage ; je pense qu'il ne fait que compliquer les choses pour vous. Utilisez simplement PHP pour imprimer les variables que vous définissez, et dépannez à partir du premier point où cette sortie diffère de ce qui est attendu.

EDIT : exemple minimal montrant que le code fonctionne ...

Il ne semble pas y avoir de problème avec votre code PHP. Lorsque j'exécute le code ci-dessous, qui est votre code avec le débogage que j'ai suggéré et avec le HTML réduit, en utilisant la ligne d'entrée de votre commentaire sur votre question, j'obtiens le résultat que vous attendez :

cat vmbrr.v2.6.6.vticketQ.log

vticket: 15 | From: John Doe | To: Jane Doe | Date: Wed, 17 Oct 2018 16:11:29 +0000 | User: Phil Collins | Program: TruthorDare | Issue: Cannot read text into v ariable | Area: 51 | POC: C. Darwin | Chargeline: R&D | ECD: 02/15/19 | Status: 0%

cat read-text-from-file.php

<?php
$handle = fopen("vmbrr.v2.6.6.vticketQ.log", "r");

$line = fgets($handle);
// process the line read.
$fields = explode("|",$line);
print_r($fields);
print "\n";

// Get data from fields
$vticket = explode (":", $fields[0]);
print_r($vticket);
print "\n";

$vTicket=$vticket[1];
$mytest=$vTicket;
print "$mytest\n";

fclose($handle);
?>

<TD width=24><input name="thing1" value="<?php print $mytest;?>"></TD>

php read-text-from-file.php

Array
(
    [0] => vticket: 15 
    [1] =>  From: John Doe 
    [2] =>  To: Jane Doe 
    [3] =>  Date: Wed, 17 Oct 2018 16:11:29 +0000 
    [4] =>  User: Phil Collins 
    [5] =>  Program: TruthorDare 
    [6] =>  Issue: Cannot read text into v ariable 
    [7] =>  Area: 51 
    [8] =>  POC: C. Darwin 
    [9] =>  Chargeline: R&D 
    [10] =>  ECD: 02/15/19 
    [11] =>  Status: 0%

)

Array
(
    [0] => vticket
    [1] =>  15 
)

 15 

<TD width=24><input name="thing1" value=" 15 "></TD>

Ainsi, je pense qu'il s'agit d'un problème non codé, comme l'impossibilité de lire le fichier d'entrée, peut-être en raison des autorisations ; il existe de nombreuses autres possibilités.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X