Besoin d'aide

Eléphanteau du PHP | 18 Messages

17 juil. 2011, 18:25

Bonjour a tous,

Je me permet de vous demander votre aide car là je bloque totalement. Je suis anciennement programmeur amateur sur VB6, je me débrouillais et arriver à faire ce que je voulais. Je viens de me mettre au php depuis maintenant 3 mois et je bloque. Je vous explique: Lorsque j'apprends un nouveau langage, je me lance des petits défis pour bien comprendre la mécanique du langage mais là, j'ai épuisé toute les solutions alors je vous demande votre aide. Voici mon défi:

L'utilisateur à partir d'une liste déroulante choisis une catégorie correspondant à une table (ca j'y arrive)
Puis lorsque celui-ci clique sur envoyer, un tableau html s'affiche avec tous les résultats trouvés dans une seconde table suite au choix qu'il a fait (ca j'y arrive aussi)
Dans ce tableau on y trouve plusieurs choses, tout d'abord les informations standards relative à la table puis une textbox dans laquelle l'utilisateur peut modifier la quantité et une checkbox que l'utilisateur peut cocher.
Lorsque l'utilisateur clique sur mettre à jour je voudrais que la base se mette à jour en prenant en compte l'ensemble des modifications. De plus je souhaiterais que soit mémorisé si la checkbox est cochée ou non pour un prochain affichage.

Si quelqu'un se sent le courage de me taper un bout de code pour que je puisse comprendre, je le remercie d'avance. Je ne vous demande pas de me faire le programme, ce que je veux c'est comprendre. Merci d'avance

Mammouth du PHP | 2278 Messages

17 juil. 2011, 20:24

Du genre :
Pour passer une commande :
Script1.php
1) Dans la liste déroulante:choix d'une catégorie de produits
2) Affichage d'un tableau des produits correspondants (peu importe quoi) et une textbox quantité commandée et une checkbox je commande?
Script2.php
3) on passe la main à un autre script qui met à jour une bdd (tu sais le faire, je suppose) De ce script on peut revenir à Script1.php et il faudait que les produits cochés précédemment le soient encore...
Ai-je bien compris?
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 18 Messages

17 juil. 2011, 20:34

Oui c'est le meme principe sauf que moi je suis parti sur une collection de livres avec une variation sur le nombre d'exemplaire. mais sinon c'est la même chose

Eléphanteau du PHP | 18 Messages

18 juil. 2011, 12:45

J'apporte un petit modificatif,

Lorsque je mets à jour la base, il faut que cela mette toute la base à jour. L'utilisateur peut modifier plusieurs quantité d'une coup et en cliquant sur mettre à jour, tout est mis à jour ensemble.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 juil. 2011, 13:33

salut,

quel est le code utilisé actuellement ?

pour ce que souhaite faire on utilise généralement la notation tableau dans les noms de champs html (par exemple <input type="text" name="quantite[]" /> <input type="checkbox" name="amodifier[]" />).
Avec ça tu aura une case texte et une checkbox avec le même index (en php tu récupère $_POST['quantite'] et $_POST['amodifier'] avec des index identique). Par contre dans $_POST['amodifier'] tu n'aura que les checkbox qui sont cochées au moment de la validation.

Donc avec ça tu modifie la quantité, tu clique sur la cas a cocher a coté pour 'valider' la modification !

lors du traitement du formulaire tu parcours $_POST['amodifier'] avec un foreach et test si l'équivalent existe dans $_POST['quantité'] et tu fait une mise a jour.
avec PDO tu peux utiliser une requête préparée.

Pour cibler correctement le tuple a mettre a jour il te faut avoir la clef primaire de cette table, pour cela utilise un champ "hidden" a coté de quantitée qui contient la clef primaire.
une autre solution et de fixer l'index en utilisant la clef primaire (name="quantite[ index]", name="amodifier[index]").

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 18 Messages

18 juil. 2011, 14:24

Je te remercie pour ton aide. Mon problème actuellement est que c'est le bordel dans mon code. C'est pour cela que je demande a tous si quelqu'un pouvait prendre cinq minute pour me faire un exemple de code qui fonctionne pour voir où cela merde et comprendre où sont mes erreurs. J'ai déjà essayé plusieurs solutions mais sans aucun résultat. J'ai inclus pour chaque ligne une textbox de type hidden qui récupère l'id de chaque ligne et fais une boucle avec requête update sur un bouton mise à jour qui est censé vérifier chaque ligne de mon tableau pour voir si les quantités ont été modifiées mais sans aucun résultat. Mon code étant relativement désordonné, je n'arrive pas à voir où cela plante.

Donc pour résumer si quelqu'un pouvait me faire un bout de code qui fonctionne pour que je puisse le comparer au mien et comprendre où sont mes problèmes et erreurs, je l'en remercie d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 juil. 2011, 14:55

on ne fait pas de code tous cuit, au mieux du didactique.

ce que j'ai mis plus haut revient à
<form actin="" method="post">
truc <input type="hidden" name="key[]" value="412" /><input type="textbox" name="quantite[]" value="125" /><input type="checkbox" name="amodifier[]" /><br />
machin <input type="hidden" name="key[]" value="415" /><input type="textbox" name="quantite[]" value="125" /><input type="checkbox" name="amodifier[]" /><br />
chose <input type="hidden" name="key[]" value="45" /><input type="textbox" name="quantite[]" value="125" /><input type="checkbox" name="amodifier[]" /><br />
<input type="submit" value="modifier" />
</form>
la validation
<?php
// on vérifie si le formulaire a été validé
if ( isset($_POST['key']) && isset($_POST['quantite']) && isset($_POST['amodifier'])) {
// connexion PDO + prépation de la requete préparée a ta charge le tout dans une variable $requeteprepare
// la requete sera du type update table set quantite = :quantite where id= :id !
// foreach pour parcourir le plus petit des tableaux
foreach( $_POST['amodifier'] as $index => $val ) {
// on vérifie que les deux autres tableaux on bien les mêmes index (pour le cas ou ^^ )
if (isset($_POST['quantite'][ $val ]) && isset($_POST['$key'][ $val ]) {
// association des valeurs aux paramètres de la requête préparée
$requeteprepare -> bindValue(':quantite', $_POST['quantite'][ $val ] , PDO::PARAM_INT);
$requeteprepare -> bindValue(':id', $_POST['$key'][ $val ] , PDO::PARAM_INT);
$requeteprepare -> execute();
}
}
}
?>
voila comment tu peux réaliser ce que tu souhaite.
un peu de doc :
- sur PDO (n'hésite pas a regarder la doc officiel plus complète ;) )
- selfhtml.org pour tous ce qui est (x)html, html n'y pas représenté !

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 18 Messages

18 juil. 2011, 15:05

Merci pour tout, je vais regarder ca chez moi ce soir si j'ai le temps. Pour le PDO, je n'utilise pas ce principe, (il faudrait peut être que je regarde...). Moi je passe par une connection manuelle.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 juil. 2011, 15:48

tu peux faire une requete préparé avec l'extension "classique" mysql(i) de php, regarde dans les tutos ou contribution (je sais plus) Stealth35 à fait un article chiadé sur le sujet ;)


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 18 Messages

18 juil. 2011, 22:06

Bon, je viens de regarder mais mon problème reste entier alors je vais vous mettre mon code (ATTENTION!!! C'EST LE BORDEL!!!!).

Première page
<?php
#CONFIG
include 'config.php';

#DATAS
$oQuerySelect = $oBDD -> query('SELECT DISTINCT Nom_edition as name, id_edition as id FROM tbl_edition');
?>
<h3>liste des éditions</h3>
<form action="tableau de base.php" method="post">
  <p>
    <select name="nom">
<?php foreach( $oQuerySelect as $aRow )
  if( !empty($aRow['name']) )
    echo '    <option value="', $aRow['id'], '">', $aRow['name'], '</option>';
   ?>
    </select>
  </p>
  <input type="submit" value="Choisissez votre édition">
</form>
Deuxième page
<html>
<head>
<title>Catalogue de cartes magic</title>
</head>
<body>
<?php
$user="root";
$host="localhost";
$password="";
$database="db_magic";
$connexion = mysql_connect($host,$user,$password)
	or die ("Connexion au serveur impossible");
$db=mysql_select_db($database,$connexion)
	or die ("Connexion base impossible");
	foreach ($_POST as $valeur)
{
}

$rq = "SELECT * FROM tbl_cartes WHERE id_edition = '$valeur' ORDER BY numero";
$result = mysql_query($rq)
	or die ("problème sur le requête");
$rq1 = "SELECT Nom_edition FROM tbl_edition WHERE id_edition = '$valeur'";
$result1 = mysql_query($rq1)
	or die ("probleme sur la deuxieme requête");
while ($ligne1 = mysql_fetch_array($result1))
{extract ($ligne1);
echo "<h1>Edition $Nom_edition</h1>";
}
echo "<table cellspacing='5'>";
echo "<tr><td colspan='10'><hr></td></tr>";
while ($ligne = mysql_fetch_array($result))
{extract ($ligne);
echo "<tr>\n";
echo "<td>$numero</td>\n";

echo "<td>$Nom_carte</td>\n";
echo "<td>$diffusion</td>\n";
echo "<td>$couleur</td>\n";
echo "<td>$Type</td>\n";
echo "<td><input type='submit' value='-' name='-collection'></td>\n";
echo "<td style='text-align: center'><input type='text'
name='collecion' value='$collection' size='1'></td>\n";
echo "<td><input type='submit' value='+' name='+collection'></td>\n";
echo "<td><input type='submit' value='-' name='-jeu'></td>\n";
echo "<td style='text-align: center'><input type='text'
name='jeu' value='$jeu' size='1'></td>\n";
echo "<td><input type='submit' value='+' name='+jeu'></td>\n";
echo "<td><input type='checkbox'
name='foil' value='$_POST ['Foil']'></td>\n";
echo "</tr>\n";
echo "<tr><td colspan='10'><hr></td></tr>\n";
}
echo "</table>\n";
echo "<form action='newdepart.php' method='post'>";
Echo "<input type='submit' value='retour'>";
echo "<SCRIPT LANGUAGE='JavaScript'>";
echo "<input type='button' value='-' onclick='$('#button-1').val( $('#button-1').val()*1-1 );' />";
echo "<input type='text' name='' id='button-1' value='0' />";
echo "<input type='button' value='+' onclick='$('#button-1').val( $('#button-1').val()*1+1 );' />";
echo "</SCRIPT>" ;
?>
</body>
</html>
Bonne chance à ceux qui veulent y jeter un coup d'oeil. Et merci à tous

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 juil. 2011, 22:32

1ère chose : <form action="tableau de base.php" method="post"> oublie les noms de fichiers avec des espaces c'est source d'ennuis, au pire ajoute des _ à la place des espaces

foreach ($_POST as $valeur)
{
}

c'est pour faire quoi ça ?

tu ne peux être certain de ce que va contenir $valeur. utilise $_POST['nom'] !

quand au reste c'est trop le souk.

oublie extract c'est pas simple pour suivre

quand au reste effectivement c'est le brin ^^


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 18 Messages

19 juil. 2011, 12:04

C'est pour cela que je demande si quelqu'un pourrait me faire le code pour que je puisse reprendre depuis le debut et ainsi voir et comprendre quel démarche utiliser. Je ne veux pas que vous fassiez le programme à ma place mais cela me permettrait de comprendre la démarche logique du php car en vb on place les actions sur les objets directement (boutons, liste déroulante etc...), ce n'est pas du tout la même logique de prog.

Merci à tous pour le coup de main

Eléphanteau du PHP | 18 Messages

20 juil. 2011, 09:06

Juste pour savoir si quelqu'un est prêt à m'aider ou non.....

Merci à tous

Eléphanteau du PHP | 18 Messages

21 juil. 2011, 11:27

Bon et bien merci tout de meme a ceux qui ont répondu et tant pis pour moi

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 juil. 2011, 13:21

Franchement ton dernier commentaire ne me donne pas envie de t'aider.
Oui je suis perso mais je préfèrees vacances en pays malouin (j'attend ma galette sur une terrasse de la cité corsaire en plein soleil ;) )

Le code que je t'ai fournis n'est pas complet ? C'est normal le but n'est pas de faire l'encode complet.
Tu parle d'habitude de programmation, j'ai commencé par de l'assembleur ...

Essai avec l'exemple que j'ai mis, montre nous du code le comportant, a la limite vire le reste et test ca tous seul dans un fichier.

Ensuite debug, c'est comme ca que tu va g'en sortir tu ne buche pas le tuto !

@+
Il en faut peu pour être heureux ......