explode & foreach : j'ai un problème

Petit nouveau ! | 6 Messages

04 juil. 2012, 11:36

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.

ViPHP
ViPHP | 2577 Messages

04 juil. 2012, 11:50

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.

Petit nouveau ! | 6 Messages

04 juil. 2012, 12:04

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.

ViPHP
xTG
ViPHP | 7331 Messages

04 juil. 2012, 12:53

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 ;)

Petit nouveau ! | 6 Messages

04 juil. 2012, 13:19

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.

ViPHP
xTG
ViPHP | 7331 Messages

04 juil. 2012, 13:21

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.

ViPHP
ViPHP | 2577 Messages

04 juil. 2012, 13:34

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 />";
   }
}
?>

Petit nouveau ! | 6 Messages

05 juil. 2012, 16:58

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 />";
		}
	}
}
?>

ViPHP
xTG
ViPHP | 7331 Messages

05 juil. 2012, 17:21

Tu es sûr que $win est déclarée ?

Petit nouveau ! | 6 Messages

05 juil. 2012, 23:44

Tu es sûr que $win est déclarée ?
oui oui j'ai mis un $win = $_POST(etc...);

Mammouth du PHP | 2278 Messages

06 juil. 2012, 07:43

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".
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
ViPHP | 2577 Messages

06 juil. 2012, 08:36

<?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.

Petit nouveau ! | 6 Messages

06 juil. 2012, 09:47

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 ?

ViPHP
xTG
ViPHP | 7331 Messages

06 juil. 2012, 10:18

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.";')");

ViPHP
ViPHP | 2577 Messages

06 juil. 2012, 10:25

<?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;