Page 1 sur 1
explode & foreach : j'ai un problème
Posté : 04 juil. 2012, 11:36
par zulfurion
Bonjour,
je viens vers vous car je reprend php/mysql pour le taff, mais ça fait très longtemps que j'ai pas touché à php.
J'ai fais un formulaire avec un implode dans un champ.
Maintenant je voudrais exploiter la bdd, et j'essaye donc avec explode.
Je souhaite faire une page qui affiche les résultats en fonction de certains paramètres choisis.
J'ai donc le code :
$winid = mysql_query("SELECT * FROM `support_post`");
$view = explode(';',$winid['win_id']);
foreach ($view as $selectview) {
$result = mysql_query("SELECT * FROM `support_post` WHERE `win_id`='$win'");
echo "$result->post_titre <br />";
}
sachant que $win est une variable qui ressort d'un menu déroulant.
Mais rien ne s'affiche.
Une petite aide serait la bien venue ^^
Merci d'avance.
Re: explode & foreach : j'ai un problème
Posté : 04 juil. 2012, 11:50
par Mazarini
Regarde la fonction mysql_fetch_assoc() dans la doc :
http://php.net/manual/fr/function.mysql-fetch-assoc.php
Tu exécutes la requete mais tu ne lit pas les résultats.
Autrement je ne comprend pas ce que tu veux faire et quelle est liens entre ce que tu "explode" et la variable $win.
Re: explode & foreach : j'ai un problème
Posté : 04 juil. 2012, 12:04
par zulfurion
J'ai pas été très explicite effectivement. *mea culpa*
Je créé un système de base de données d'aide&support pour ma boite.
J'ai créé un formulaire qui permet d'enregistrer un post/topic où la personne choisi dans une sélection multiple à quel produit ce post est lié et pareil pour la version windows.
Donc vu qu'il peut y avoir plusieurs produits et type de windows dans les champs de ma table, j'ai donc tout réuni avec un implode.
Ma table support_post à donc un champ win_id et model_id qui ont des valeurs "implodées".
Maintenant j'ai créé un formulaire qui permet d'afficher tous les post en fonction de la sélection par modèle de produit et par type de windows.
Le $win est la variable qui ressort du formulaire avec la valeur de la sélection.
Re: explode & foreach : j'ai un problème
Posté : 04 juil. 2012, 12:53
par xTG
Le commentaire de
Mazarini reste tout de même d'actualité, regardes les exemples de la doc pour comprendre ce qu'il te manque pour accéder à la valeur de win_id

Re: explode & foreach : j'ai un problème
Posté : 04 juil. 2012, 13:19
par zulfurion
j'avais également fait avec un mysql_fetch_object()
$winid = mysql_query("SELECT * FROM `support_post`");
$view = explode(';',$winid['win_id']);
foreach ($view as $selectview) {
$result = mysql_query("SELECT * FROM `support_post` WHERE `win_id`='$win'");
while ($send = mysql_fetch_object($result)) {
echo "$send->post_titre <br />";
}
}
ma table : <support_post> avec, entre autres, le champs win_id.
Je pense que le problème doit venir de ma logique, je dois m'embrouiller avec foreach et le while.
Re: explode & foreach : j'ai un problème
Posté : 04 juil. 2012, 13:21
par xTG
Le problème vient de ton explode, tu exploites non pas le résultat de la requête (une de ses colonnes) mais la ressource elle même.
Tu dois avoir un joli warning t'indiquant que tu tentes d'utiliser une ressource comme un array à cet endroit.
Re: explode & foreach : j'ai un problème
Posté : 04 juil. 2012, 13:34
par Mazarini
Le problème est dans la manière de rechercher. Je ne vois pas comment faire.
D'un coté tu as val1;val2;val3 choisi par l'utilisateur et de l'autre dans la base tu as val1;val3 ou val4;val1 ou...
comment tu fais le lien entre les 2 ?
Eventuellement, tu peux essayer : where win_id like '%val1%' and win_id like '%val2%' and win_id like '%val3%'
<?PHP
$winid = mysql_query("SELECT * FROM `support_post`"); // je ne vois pas à quoi ca sert
$view = explode(';',$winid['win_id']); // manque la lecture
foreach ($view as $selectview) { // $selectview pas utilsé dans la boucle
$result = mysql_query("SELECT * FROM `support_post` WHERE `win_id`='$win'");
while ($send = mysql_fetch_object($result)) {
echo "$send->post_titre <br />";
}
}
?>
Re: explode & foreach : j'ai un problème
Posté : 05 juil. 2012, 16:58
par zulfurion
Bon j'ai un peu tout modifié, mais j'ai toujours rien en retour.
Je reprends, j'ai une table <
support_post> avec comme champs :
-
post_id
- post_titre
- post_symptome
- post_cause
- post_resolution
- model_id
- win_id -> (valeurs qui ont été implodées par des ";")
je veux donc que le résultat m'affiche la liste des post_titre qui ont pour win_id la valeur de $win qui sort d'une sélection d'un menu déroulant.
Donc en gros si l'utilisateur choisi $win = 4 -> je veux avoir la liste des post_titre qui ont le win_id = 4.
J'ai donc fais ce code :
<?php
//connexion mysql établie
$winid = mysql_query("SELECT * FROM `support_post`");
while($ligne = mysql_fetch_assoc($winid)) {
$explodeligne = explode(';',$ligne['win_id']);
foreach($explodeligne as $eachligne) {
if ($win == $eachligne['win_id']) {
$result = mysql_query("SELECT * FROM `support_post` WHERE `win_id`='$win'");
$send = mysql_fetch_object($result);
echo "$send->post_titre <br />";
}
}
}
?>
Re: explode & foreach : j'ai un problème
Posté : 05 juil. 2012, 17:21
par xTG
Tu es sûr que $win est déclarée ?
Re: explode & foreach : j'ai un problème
Posté : 05 juil. 2012, 23:44
par zulfurion
Tu es sûr que $win est déclarée ?
oui oui j'ai mis un $win = $_POST(etc...);
Re: explode & foreach : j'ai un problème
Posté : 06 juil. 2012, 07:43
par sirakawa
Mais si win_id (dans la bdd) contient des valeurs qui ont subi un implode par ;, on ne risque pas d'y trouver grand chose par une requête select avec un win_id = "$win".
Re: explode & foreach : j'ai un problème
Posté : 06 juil. 2012, 08:36
par Mazarini
<?php
//connexion mysql établie
$winid = mysql_query("SELECT * FROM `support_post`");
while($ligne = mysql_fetch_assoc($winid)) {
$explodeligne = explode(';',$ligne['win_id']);
foreach($explodeligne as $eachligne) {
if ($win == $eachligne) {
echo $ligne['post_titre'],'<br />';
}
}
}
?>
En supposant que $win contient 4 mais pas 4;5
A priori je préfère :
<?php
//connexion mysql établie
$winid = mysql_query("SELECT * FROM `support_post` where win_id = $win or win_id like '$win;%' or win_id like '%;$win;%' or win_id like ';$win'");
while($ligne = mysql_fetch_assoc($winid)) {
echo $ligne['post_titre'],'<br />';
}
?>
tu peux simplifier en ajoutant systématiquement ; en début et fin de win_id pour rechercher ;4; sans tenir compte du premier, milieu, dernier ou seul.
Re: explode & foreach : j'ai un problème
Posté : 06 juil. 2012, 09:47
par zulfurion
tu peux simplifier en ajoutant systématiquement ; en début et fin de win_id pour rechercher ;4; sans tenir compte du premier, milieu, dernier ou seul.
Oki merci,
mais je m'embrouille avec les ' " dans ma requete pour ajouter les ; au début et en fin.
Voila ma requete de base :
mysql_query ("INSERT INTO `support_post` (`post_titre`,`post_symptome`,`post_cause`,`post_resolution`,`model_id`,`win_id`) VALUES ('".$_POST['sujet']."','".$_POST['symptome']."','".$_POST['cause']."','".$_POST['resolution']."','".$_POST['case']."','".$win."')");
si je veux placer
; devant et en bout de $win je dois faire comment au niveau de la syntaxe ?
Re: explode & foreach : j'ai un problème
Posté : 06 juil. 2012, 10:18
par xTG
mysql_query ("INSERT INTO `support_post` (`post_titre`,`post_symptome`,`post_cause`,`post_resolution`,`model_id`,`win_id`) VALUES ('".$_POST['sujet']."','".$_POST['symptome']."','".$_POST['cause']."','".$_POST['resolution']."','".$_POST['case']."',';".$win.";')");
Re: explode & foreach : j'ai un problème
Posté : 06 juil. 2012, 10:25
par Mazarini
<?php
//connexion mysql établie
$winid = mysql_query("SELECT * FROM `support_post` where win_id = like '%;$win;%'");
while($ligne = mysql_fetch_assoc($winid)) {
echo $ligne['post_titre'],'<br />';
}
?>
Si $win = 4, tu vas trouver ;1
;4;5; ou ;3
;4;