• imprimer
  • aide

Forum de discussions « PHP - SQL »

Retrouvez les publications relatives à ces discussions dans nos rubriques PHP, SQL.

Base de donnée sql avec une page php

liste des forums liste des discussions Participer à la discussion

Photo de keitaro59 Message publié le mardi 24 janvier 2012 - 15h54 par keitaro59.
Bonjour,

Tous d'abord, je suis totalement novice en php j'ai commencer cet après-midi :-/, donc désoler à l'avance pour le code si il y a beaucoup d’erreurs.

J'ai une page info_client.php qui est destiné à afficher les informations des clients.

Ce client est sélectionné grâce à une liste déroulante.

Cette liste déroulante viens chercher les données de la colonne 'nom' dans ma table à l'aide du code php suivant :

<?php
include('connexion.php');

$sql = " SELECT nom FROM client;";
$result = mysql_query($sql) or die("requête fail !");

echo "<form action='info_client.php' method='POST'>
<table><tr><td>
<select name='nom_client'>";
while ($row=mysql_fetch_array($result))
{
echo"<option>$row[0]</option>";
}
echo"</select></td></tr>
</table>
</form>";
?>

Et en dessous, je voudrai afficher, en fonction de la sélection faite sur la liste, les informations relatifs au client sélectionner.

Donc, j'ai juste une cellule de tableau avec "nom", et dans la cellule suivante, faire apparaître dans une sorte de label, la valeur 'nom'

J'avais essayé quelques chose comme sa :

// if ($nom_client != ""){
// $sql = " SELECT nom FROM client where nom='$nom_client';";
// $result = mysql_query($sql) or die("Requete pas comprise");
// echo $result;
// }

dans la cellule pour le nom mais sa fail.

D'avance merci pour les éventuels réponses.
Photo de jules Message publié le mardi 24 janvier 2012 - 19h50 par jules. modérateur
Bonsoir keitaro59,

Tout le monde a débuté, ce n'est pas un problème ici.

En fait, il faut bien comprendre les mécanismes derrières les formulaires : ils servent à envoyer des variables à une page.
Le processus est donc :
CHOIX DANS LE FORMULAIRE -> VALIDATION DU FORMULAIRE -> RÉCUPÉRATION DES DONNÉES -> TRAITEMENT DES DONNÉES.

Pour que ton formulaire se valide automatiquement à la sélection de la liste déroulante il faudrait que tu remplaces la partie "<select name='nom_client'>" par "<select name='nom_client' onchange='submit();'>" ou encore mieux ajouter un bouton de validation avant la fin du formulaire : <input type='submit' name='validation' value='valider' /></form>".
La solution avec le bouton est meilleure pour des questions d'accessibilité.

Concernant l'autre partie de ton code je te conseille d'utiliser les variables $_POST pour récupérer les valeurs et de revoir la récupération des valeurs d'une requête : tu dois utiliser une des fonctions mysql_fetch_array ou mysql_fetch_assoc.

if (! empty($_POST['nom_client'])) { $sql = "SELECT nom FROM client where nom='" . $_POST['nom_client'] . "';"; $result = mysql_query($sql) or die("Requete pas comprise"); $row = mysql_fetch_assoc($result); echo $row['nom']; var_dump($row); // Pour le débugage }

Si tu veux récupérer d'autres informations que le nom, il faut que tu fasses un "SELECT *" dans ta requête et non un "SELECT nom".

Si tu as toujours des problèmes en PHP, pense à supprimer le code du genre "die(…)" car ça masque l'erreur PHP et donc tu n'as pas d'indication précise sur le problème.
Photo de keitaro59 Message publié le mardi 24 janvier 2012 - 21h08 par keitaro59.
Bonsoir jules,

Merci beaucoup d'avoir pris de ton temps pour me répondre.

J'essayerai demain matin au taff. Encore merci !

Bonne soirée
Photo de keitaro59 Message publié le mercredi 25 janvier 2012 - 09h31 par keitaro59.
Grâce à ton code jules, j'arrive à afficher, avec l'aide d'un bouton, le nom/prénom/ etc de la cible en sélection, mais le problème est qu'il me ressort un peu trop d'info. Peut-on filtrer la sortie ?

Dans ma cellule j'obtiens ça:

testarray(1) { ["nom"]=> string(4) "test" }

et je voudrai qu'il me sorte juste le nom "test"

Sinon la requête fonctionne bien, il récupère bien la sélection en tout cas merci.
Photo de keitaro59 Message publié le mercredi 25 janvier 2012 - 09h54 par keitaro59.
Pour ceux qui tomberai sur ce topic (debutant php), sa fonctionne avec le code suivant:

while($row = mysql_fetch_row($result)){
$nom = $row[0];
echo $nom;
Photo de jules Message publié le mercredi 25 janvier 2012 - 10h04 par jules. modérateur
Dans mon code, il fallait supprimer
var_dump($row); // Pour le débugage ... c'est ce qui provoquait l'affichage du contenu du tableau de données et donc juste pour le débugage.
Photo de keitaro59 Message publié le mercredi 25 janvier 2012 - 10h13 par keitaro59.
quand je tester, cette ligne était en commentaire xD
Photo de keitaro59 Message publié le mercredi 25 janvier 2012 - 11h44 par keitaro59.
hum j'ai un autre problème :-/

Dans ma page d'info, j'ai donc ma liste déroulante, avec en dessous les différents champs qui compose la table.
Ces champs récupère bien les infos grâce au bouton d'affichage.

Je doit faire donc cette page "information client" mais aussi une page "suppression client". Ce qui fait que j'ai récupérer le code de "information client" et j'ai voulus rajouter un bouton en bas de page "Supprimer" mais il y a bien sure un conflit avec le <form> précédent ce qui fait qu'il appel pas la bonne page php.

J'ai essayer de le sortir du form mais ce n'est pas une bonne idée puisque je ne pourrai pas récupérer le $_POST.

A chaque fois, je récupère l'info : $_POST['nom_client']

Dans la page "del_client.php" je traite mon affichage comme pour celui d'information_client, donc pour ces appels internes, je récupère facilement cet variable, mais lorsque je refait un bouton en bas de page dans un <form> qui lui fait appel "suppression_client.php", il n'arrive pas à récupérer la valeur de la variable. Ce qui fait que la requête s'effectue peut être mais dans le vent.

"suppression_client.php" :

<?php
include('connexion.php');

if (! empty($_POST['nom_client'])) {
$sql = "DELETE FROM client WHERE nom='" . $_POST['nom_client'] . "';";
$result = mysql_query($sql) or die("Requete pas comprise");
}
mysql_close();
header('Location: client.html');
?>
Photo de jules Message publié le mercredi 25 janvier 2012 - 12h55 par jules. modérateur
Il existe plusieurs solutions à ce problème.
La plus simple pour toi, est de faire un second formulaire dans la même page.

Tu peux utiliser un formulaire du genre :
<form action="suppression_client.php" method="post"> <div> <input type="hidden" name="nom_client" value="<?echo $_POST['nom_client']" /> <input type="submit" name="suppression" value="supprimer" /> </div> </form>
Ainsi, en cliquant sur le bouton supprimer tu valides un nouveau formulaire qui redirige bien sur le traitement de suppression et qui passe une valeur cachée : le nom_client.

Attention, tu ne dois pas imbriquer les deux formulaires.
Photo de keitaro59 Message publié le mercredi 25 janvier 2012 - 13h45 par keitaro59.
cette ligne fait planter ma page :-/ je sais pas pourquoi, sa doit être cet partie qu'il n'aime pas :<?echo $_POST['nom_client']

<input type="hidden" name="nom_client" value="<?echo $_POST['nom_client']" />

:S
Photo de jules Message publié le mercredi 25 janvier 2012 - 18h25 par jules. modérateur
Il faut tester l'existance des variables avant leur affichage.

Par exemple, dans ton cas, on ne vas afficher le formulaire de suppression que si un client a été choisi dans ta liste :


<?php if (! empty($_POST['nom_client'])) { ?>
<form action="suppression_client.php" method="post">
<div>
<input type="hidden" name="nom_client" value="<?php echo $_POST['nom_client']" />
<input type="submit" name="suppression" value="supprimer" />
</div>
</form>
<?php } ?>
Photo de keitaro59 Message publié le mercredi 25 janvier 2012 - 21h10 par keitaro59.
D'accord, merci beaucoup pour tes explications c'est vraiment sympa !

La pour le moment, grâce à toi, j'ai réussi à faire les page de création/information et suppression de données.

Maintenant je lutte un peu car je me suis attaqué à la page de login. Je voudrai commencer par quelque chose de simple, et le sécurisé par la suite.

Mais j'ai un problème un peu bête, le if/else du code suivant, pause problème, la commande passe dans le if mais pas dans mon else

Dans mon cas c'est un test pour savoir si l'utilisateur existe ou pas dans la base de donnée donc un if (exite) else "existe pas" . basique.


le code: traitement_login.php

<?php
include('connexion.php');

if (! empty($_POST['login']) ) {
$sql = "SELECT login FROM log where login='" . $_POST['login'] . "';";
$result = mysql_query($sql) or die("Requete pas comprise");


while ($row = mysql_fetch_row($result)){
$nom = $row[0];
//if ($row == "") $row = "vide";
//echo $nom;

if ($nom == $_POST['login'])
{
echo "l'identifiant $nom existe !";
}
else
{
echo "l'identifiant $nom n'existe pas !";
}
} // fin du while
} // fin du if
?>

dans ma table : il y a
1) root , root
2) user pass

Et quand je test avec les deux logins root, user, il me renvoie bien "l'identifiant $nom existe " mais lorsque j'inscris "bidon" il m'affiche une page blanche.

Je pense que c'est parce que quand il lance la requête, et qu'elle retourne rien, la variable $row est vide donc elle ne rentre pas dans le while. Enfin je ne suis pas sure.
Photo de jules Message publié le mercredi 25 janvier 2012 - 21h40 par jules. modérateur
Tu as trouvé la raison, c'est bien que ça ne passe pas dans le while.

Ce n'est pas exactement comment ça qu'on fait une page d'authentification… car comme tu es parti ça ne sera pas du tout sécurisé.

Je ne peux pas tout expliquer dans un forum, tu devrais étudier des tutoriels et des scripts déjà fait comme ceux de PHP débutant : http://www.phpdebutant.org/article47.php
Photo de keitaro59 Message publié le jeudi 26 janvier 2012 - 07h21 par keitaro59.
D'accord, oui même si c'est la première fois autant coder quelques chose correctement :)

Merci beaucoup pour le lien, c'est parfait, j'vais regarder sa ce matin. Encore merci pour tous tes conseils !

Bonne journée
Photo de keitaro59 Message publié le vendredi 27 janvier 2012 - 16h21 par keitaro59.
Peut-on imbriquer deux <form> ?

Parce que j'ai quelque chose qui ressemble à sa:

<form action="enregistrement_pecm.php" name="save" method="post">

---


<form name='nom_client' action='prise_en_charge_materiel.php' method='post'>
----

<input name='nom_client' type='submit' value='Selectionner' style='width:200'>
</form>

---

<input type='submit' name="save" value='Enregistrer' style='width:200' />
</form>

Depuis que j'ai rajouter le form avec le bouton enregistrer, sa plante. une sorte de conflit de formulaire.

Lorsque je clique sur le bouton "Enregistrer", sa ne me lance plus rien,
et quand je clique sur Selectrionner sa me lance enregistrement_pecm.php

Je me suis rendu compte de ce problème en mettant le début de mon form (enregistrer) de bas en haut, pour voir quel partie de mon code fesait planter et c'est la partie du form au milieu.

Le code du form (selectionner) :

<?php
include('connexion.php');

$sql = "SELECT nom FROM client;";
$result = mysql_query($sql) or die("Requete pas comprise");

echo "<form name='nom_client' action='prise_en_charge_materiel.php' method='POST'>
<select name='nom_client' style='width:200'>";

echo "<option value='' selected></option>"; // ligne d'option vide

while ($row=mysql_fetch_array($result))
{
echo"<option>$row[0]</option>";
}
echo"</select>
<input name='nom_client' type='submit' value='Selectionner' style='width:200'>
</form>";
?>
Photo de jules Message publié le samedi 28 janvier 2012 - 13h16 par jules. modérateur
Non, comme je l'indiquais dans un message précédent, l'imbrication de formulaire n'est pas possible.

En revanche, tu peux avoir plusieurs boutons de validation pour un même formulaire et détecter lequel a été cliqué dans ton script de traitement grâce à l'attribut "name" du bouton.

<form action="script.php" method="post"> <p><input type="submit" name="save" value="Enregistrer" /></p> <p><input type="submit" name="prise_en_charge" value="Prise en charge" /></p> </form>

et dans ton script.php, :

<?php if (isset($_POST['save'])) { echo 'le bouton save a été cliqué'; } if (isset($_POST['prise_en_charge'])) { echo 'le bouton prise en charge a été cliqué'; } ?>

Tu pourras peut être t'en sortir avec ce genre de solution.
Photo de keitaro59 Message publié le samedi 28 janvier 2012 - 22h50 par keitaro59.
oui autant pour moi, j'viens de comprendre le principe, logique en effet.

J'y pense, ce principe la me permet donc d'utiliser un seul formulaire et y mettre deux boutons d'actions différents qui sont traités par un seul et même fichier de script.

Ce fichier de script peut-il gérer aussi l'action de bouton provenant d'autre page ? Histoire de rassembler des scriptes structuré dans un seul et même fichier et cibler les parties du script aux parties correspondant à une condition avec les names.

Est-ce possible ?

Je ne pense pas, car l'action du/des boutons dépendent du formulaire qui dépend lui même de la page. A moins que l'ont puisse récupérer les POST d'autres pages ?
Photo de keitaro59 Message publié le dimanche 29 janvier 2012 - 00h19 par keitaro59.
Je viens de tester la méthode avec un fichier de script qui gère deux boutons.

Sa fonctionne mais c'est pas exactement ce que je voudrai obtenir. Je me suis sûrement mal expliqué.

J'ai une page "prise_en_charge.php".

Dans cet page j'ai en haut, une partie client, une liste déroulante lié à une table sql ou ont peu sélectionner un client.

Une fois le client choisi j'aimerai avoir un bouton "Sélectionner", pour que sa me renvois sur la même page, "prise_en_charge.php", les données : tel,fax,port,email du client dans les champs correspondant juste en dessous de la liste. (cela fonctionnais quand je mettait dans le 1er form la page courante, "prise_en_charge.php", sa me renvoyer sur la même page avec les données dans les INPUT)

Ensuite en dessous j'ai d'autres champs divers sur la prise en charge de l'intervention. observation, intervenant date ville etc.

Et pour finir, un bouton Enregistrer en bas pour envoyés ces données client+champs divers dans une table sql. (cette page est destinée à être imprimer et archivé d'où la table sql)

Alors le problème principale est que je peu faire en sorte que les deux boutons fonctionnes, mais chaque résultat est affiché sur la page de script.php.

Je voudrais, si possible, que le bouton "Sélectionner" me renvoie sur ma page courante "prise_en_charge.php" les données nécessaires à la moitié du formulaire (données client), ensuite terminer de le remplir puis sauvegarder le tout. (pour l'enregistrement dans la table sql je sais faire mais j'ai vraiment beaucoup de mal à gérer la syntaxe intérieure de mes pages... Étant donné que ce développement intranet est destinées à remplacer les fonctionnalités d'un programme interne java :-/ , je ne sais pas si je peu avoir des actualisations de données sur l'interface comme dans leurs programme ... :-/ )


ps: Désoler de t'embêter encore avec mes questions de débutant mais sache que tu m'as était, jusqu’à présent, d'une aide très précieuse et je t'en remercie sincèrement. tu me dira "Normal, les forums sont fait pour sa", mais rare sont les gens qui prennent de leurs temps pour ce pencher sur le problème des autres et d'y répondre sincèrement et sérieusement. :-)

liste des forums liste des discussions Participer à la discussion

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.

Les 5 dernières discussions