8795 sujets

Développement web côté serveur, CMS

Bonjour,
Je repose un message suite à un problème que j'ai déjà eut, mais qui depuis est revenu Smiley decu

J'ai dans un tableau un <input number value=' '>
Le seul problème est que cette valeur ne renvoie rien (quand je tape une valeur dans mon navigateur) OR quand dans le code je met en dur une valeur <input type='number' name='Nombre' value='99'> là la valeur est bien envoyé...

Voici le code:

<?php

// on crée les requêtes SQL
// permet de décrire le schéma, donc d'avoir entre autre le nom des colonnes
$sql_col = 'describe super;';
// selectionne ttes les lignes

//recuperations du filtre
$test = $_POST['filtreV2'] ;
$choix2 = $_POST['choix'] ;

// selections via le filtre
$sql = "SELECT * FROM super WHERE $choix2 like '%$test%'"; 


echo'<form method=POST action=modifstock2.php>';


// on envoie les requêtes
$req_col = mysql_query($sql_col) or die('Erreur SQL !<br>'.$sql_col.'<br>'.mysql_error());
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

//on créé un tableau
echo "<TABLE BORDER>";

//parcourt du résultat de la 1ere requete, nom des colonnes et formatage du tableau 
while($data_col = mysql_fetch_assoc($req_col)) {
	echo "<th>".$data_col["Field"]."</th>";
}

// on parcourt la 2eme requete et on continue la construction du tableau

while($data = mysql_fetch_assoc($req)){

$i=0;
	echo "<tr>";
		echo "<td>".$data["ID"]."</td>";
		echo "<td>".$data["Emplacement"]."</td>";
		echo "<td>".$data["Ref_Constructeur"]."</td>";
		echo "<td>".$data["Autre_Ref"]."</td>";
		echo "<td>".$data["Modele"]."</td>";
		echo "<td>".$data["Couleur"]."</td>";
		echo "<td>".$data["Stock"]."</td>";
		echo "<td>".$data["Stock_Min"]."</td>";
		echo "<td><input type='checkbox' name='delete_$i' value='".$data['ID']."'></td>";
		echo "<td><input type='number' name='Nombre' value='' /></td>";
		echo "<td><input type='submit' value='Modifier' /></td>";
	echo "</tr>";
$i++;

}
echo "</TABLE>";

// on ferme la connexion à mysql

?>
	<input type="hidden" name="max" value="<?php echo $i; ?>">

	<!--
	<input type="text" name="Valeur" value="">
	<input type="submit" value="Modifier" />
	-->
</form>


</html>


La dernière fois on m'avais conseillé de changer de place le <form methode=post >, ce qui avais marché mais la sans rien modifier depuis la dernière fois je n'arrive pu à envoyer ma valeur

Si vous avez des idées je suis preneur Smiley smile
Rhax
Modérateur
Bonsoir !

J'ai pas de solution mais en passant par là je trouve ça bizarre de spécifier une value à un input de type text ou number... la value c'est ce que la personne rentre mais si tu met value='' j'ai peur que ca force la valeur et que ça te renvoie... rien ! Tente juste avec :

<input type='number' name='Nombre' />

Sur les checkbox, radio bouton ou bouton (ou bien encore les inputs cachés) l'attribut value se justifie mais pas sur les inputs où l'ont veut récupérer la valeur du champs..

Bonne soirée !
Modifié par _laurent (25 Feb 2015 - 21:33)
_laurent a écrit :
Sur les checkbox, radio bouton ou bouton (ou bien encore les inputs cachés) l'attribut value se justifie mais pas sur les inputs où l'ont veut récupérer la valeur du champs..

Bonsoir Laurent
Pas d'accord avec toi: si tu fais un formulaire de mise à jour, il est normal que les champs soient initialisés â la valeur actuelle, je veux dire "avant mise à jour" .
Bonjour,
Merci pour vos réponses
Il est possible de faire un <input> sans mettre la valeur???
Comme dit PapyJP cela ne sert justement pas à initialiser la valeur...

_Laurent
Juste pas acquis de conscience, j'ai quand même essaye sans la valeur='' mais cela ne change rien (ou alors je n'ai pas vu ), la valeur retourné est toujours vide Smiley decu

Si vous avez d'autre idée je suis preneur Smiley cligne
Rhax
Modérateur
PapyJP a écrit :
Pas d'accord avec toi: si tu fais un formulaire de mise à jour, il est normal que les champs soient initialisés â la valeur actuelle, je veux dire "avant mise à jour" .

Effectivement, +1 pour Papy Smiley rolleyes
Désolé Rhax pas plus d'idée, je sors de 3 jour de maladie, j'ai même du mal à voir ou tu récupères ton "Nombre" ! Smiley lol

Bon courage
Bonjour.

Ça n'a rien avoir avec ton soucis, mais dans ta boucle while, tu initialises à chaque fois ton $i, conséquence il est toujours égal à 0 dans ta boucle et à 1 dans ton input:hidden.

Sinon pour ton problème, exercice tout bête : vire le type number pour tester (e.g. pour un type text) !
Bonjour,
Merci pour vos réponses
J'ai déjà essayer avec le input text mais cela ne change rien entre le text et le number ...

Le $i me permet de récupérer l'id pour ma checkbox, je l'ai déplacé juste au dessus de ma boucle (merci pour l'astuce)




<?php

// on crée les requêtes SQL
// permet de décrire le schéma, donc d'avoir entre autre le nom des colonnes
$sql_col = 'describe super;';
// selectionne ttes les lignes

//recuperations du filtre
$test = $_POST['filtreV2'] ;
$choix2 = $_POST['choix'] ;

// selections via le filtre
$sql = "SELECT * FROM super WHERE $choix2 like '%$test%'"; 


echo'<form method=POST action=modifstock2.php>';


// on envoie les requêtes
$req_col = mysql_query($sql_col) or die('Erreur SQL !<br>'.$sql_col.'<br>'.mysql_error());
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

//on créé un tableau
echo "<TABLE BORDER>";

//parcourt du résultat de la 1ere requete, nom des colonnes et formatage du tableau 
while($data_col = mysql_fetch_assoc($req_col)) {
	echo "<th>".$data_col["Field"]."</th>";
}

// on parcourt la 2eme requete et on continue la construction du tableau

$i=0;
while($data = mysql_fetch_assoc($req)){

	echo "<tr>";
		echo "<td>".$data["ID"]."</td>";
		echo "<td>".$data["Emplacement"]."</td>";
		echo "<td>".$data["Ref_Constructeur"]."</td>";
		echo "<td>".$data["Autre_Ref"]."</td>";
		echo "<td>".$data["Modele"]."</td>";
		echo "<td>".$data["Couleur"]."</td>";
		echo "<td>".$data["Stock"]."</td>";
		echo "<td>".$data["Stock_Min"]."</td>";
		echo "<td><input type='checkbox' name='delete_$i' value='".$data['ID']."'></td>";
		echo "<td><input type='text' name='Nombre' value=''/></td>";
		echo "<td><input type='submit' value='Modifier' /></td>";
	echo "</tr>";
$i++;

}
echo "</TABLE>";

?>
	<input type="hidden" name="max" value="<?php echo $i; ?>">

</form>


</html>

Je récupère mes valeur grâce à mon : echo "<td><input type='text' name='Nombre'/></td>";
l'utilisateur rentre une valeur dans la zone texte et valide grâce au bouton modifier.
Mon problème est que, justement quand on rentre une valeur dans cette case, elle ne renvoie rien OR si je fais :
echo "<td><input type='text' name='Nombre' value='99' /></td>";
Là il me renvoie bien la valeur 99

Voila voila,
Si vous avez d'autre suggestions sur mon code je suis preneur
Merci pour votre aide
Rhax
Pour autant que je comprenne, il s'agit de saisir le nombre d'objets dans un inventaire, ou quelque chose du même ordre.
Dans ces conditions, il y a autant de "input" que de lignes dans ta table (c'est à dire d'objets) et tu dois recevoir non pas UN nombre, mais DES nombres, soit sous forme de n variables, soit sous forme d'un tableau.De la même façon que tu écris

    echo "<td><input type='checkbox' name='delete_$i' value='".$data['ID']."'/></td>";

de la même façon tu dois écrire à la ligne suivante

    echo "<td><input type='text' name='Nombre_$i' value=''/></td>";

Tu pourrais également écrire

    echo "<td><input type='checkbox' name='delete[]' value='".$data['ID']."'/></td>";
    echo "<td><input type='text' name='Nombre[]' value=''/></td>";

auquel cas tu récupérerais les valeurs sous forme de tableaux:

    $deleteArray = $_POST['delete'];
    $numberArray = $_POST['Nombre'];

J'espère de c'est clair.

Note 1: tu ne récupères rien dans $_POST['Nombre'] parce que tu dois entrer un nombre dans la première balise input et rien dans la dernière. La valeur est donc écrasée par la valeur "" de la dernière, puisqu'elles portent toutes le même nom.
Note 2: attention, la convention nom[] ne marche qu'à un niveau. Si tu as un tableau de tableaux, le nom de la balise input doit être de la forme name="objet[i]element[]", et non pas name="objet[]element[], auquel cas tu récupérerais autant d'objets "objet" qu'il y a d'éléments....
[/i]
Modifié par PapyJP (26 Feb 2015 - 11:31)
Bonjour,

En effet, si je rentre un nombre dans une des case il ne me renvoie rien or si je rentre un nombre dans la dernière case la il m'envoie bien ma valeur.
Chapeau à toi, j’aurais jamais pense à sa Oo

Si j'ai biens tous compris:
La checkbox marche bien car a chaque fois dans le nom j’incrémente une valeur ce qui fais qu'elle est unique, du-coup tu me propose de faire pareille avec l'input text...


Je test ta solution pour voir si j'arrive à la mettre en place
Encore merci pour ton aide Smiley smile
Rhax
Sa marche!!!!!

Merci beaucoup pour ta solution
J'arrive à envoyé mes valeurs depuis n'importe quelle case.
J'ai donc juste rajouter _$i sur le nom et c'est passé.

Encore un grand merci pour votre aide
Rhax
Personnellement je préfère la forme

    ... name='objet[$i][ delete]'....
    ... name='objet[$i][ nombre]'...

et récupérer les valeurs des input par

    foreach($_POST['objet'] as $objet) {
        $delete = $objet['delete'];
        $nombre = $objet['nombre'];
    }

mais c'est une préférence de style de programmation.
Modifié par PapyJP (26 Feb 2015 - 14:19)
Je regarde sa avec grand plaisir Smiley smile
Si sa peut m'aider à avoir un code plus clair et mieux construit, je suis preneur.

Encore merci pour ton aide