web-dev-qa-db-fra.com

Comment puis-je poster une entrée désactivée

Bonjour, j'ai quelques entrées mais l'une d'entre elles est désactivée (oui et j'en ai besoin pour ma feuille de temps) mais comment puis-je l'envoyer à autocomplete.php à insert.php J'ai cette erreur Index non défini: client1 dans C:\wamp\www\testlp\insert.php à la ligne 30

Voici mon code autocomplete.php

<form action = 'insert.php' method="post"  >

    <input type="text" name="client1" class = "client" size="12" id ="client1" disabled />

        </form>

voici mon code insert.php

    session_start(); 
    $date = $_POST['data'] ;
    $client1 = $_POST['client1'] ;

    echo($client1);
    echo($date);

EDITJ'ai essayé ceci:

<input type="text" name="client1" class = "client" size="12" id ="client1"readonly />

ici l'erreur: Notice: Undefined index: client1 in C:\wamp\www\testlp\insert.php on line 12

9
Thephpdoge

utilisez l'attribut readonly au lieu de disabled.

  • en lecture seule: l'entrée ne peut pas être modifiée
  • disabled: l'entrée n'a pas de fonction de formulaire
  • (et la troisième option associée: type d'entrée = masqué: l'entrée n'est pas visible, mais la valeur est soumise)

vous obtenez une erreur car un élément désactivé n'est pas envoyé lors de l'envoi du formulaire et n'est donc pas présent dans $_POST (il n'y a tout simplement pas de $_POST['client1'] dans votre cas)

edit édité: les exemples n'étaient pas complets - comme l'attribut accepté est la réponse, l'attribut name doit également être présent

 <input type="text" name="client1" class = "client" size="12" id ="client1" value="something" readonly />

ou 

 <input type="text" name="client1" class = "client" size="12" id ="client1" value="something" readonly="readonly" />

si vous voulez avoir une syntaxe plus proche de XML.

49
cypherabe

Voici une idée de comment vous pouvez résoudre ce problème

<form action = 'insert.php' method="post"  >
  <input type="text" name="client1" class="client" size="12" id="client1" disabled />
  <input hidden name="client1" value="inserted_value_of_client1"/>
</form>

Vous pouvez même supprimer le nom de la première entrée.
Avec cela, votre entrée désactivée sera toujours affichée mais php publiera la valeur dans votre champ de saisie masqué. 

Vous pouvez utiliser <?php echo !empty($text)?$text:'';?> pour renseigner les champs value comme indiqué dans certaines réponses ici.

0
TimeTrax

Si vous souhaitez le désactiver afin qu'il ne change pas dans la base de données, vous n'avez pas à le POST. Utilisez le SELECT pour renseigner le <input> et ajouter l'attribut "désactivé".

<?php
if ( !empty($_POST)) {
$other_inputs= $_POST['other'];

$valid = true;
if (empty($text)) {
    $valid = false;
}

if ($valid) {
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "UPDATE table set text = ? WHERE id = ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($other_inputs,$id);
}
} else {
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT * FROM table where id = ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($id));
    $data = $q->fetch(PDO::FETCH_ASSOC);
    $text = $data['client1'];
}
?>
<form action = 'insert.php' method="post"  >
    <input type="text" name="client1" class = "client" size="12" id ="client1" disabled vlaue="<?php echo !empty($text)?$text:'';?>" />
</form>
0
Suren