explode & foreach : j'ai un problème

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : explode & foreach : j'ai un problème

Re: explode & foreach : j'ai un problème

par Mazarini » 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;

Re: explode & foreach : j'ai un problème

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

Re: explode & foreach : j'ai un problème

par zulfurion » 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 ?

Re: explode & foreach : j'ai un problème

par Mazarini » 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.

Re: explode & foreach : j'ai un problème

par sirakawa » 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".

Re: explode & foreach : j'ai un problème

par zulfurion » 05 juil. 2012, 23:44

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

par xTG » 05 juil. 2012, 17:21

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

Re: explode & foreach : j'ai un problème

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

Re: explode & foreach : j'ai un problème

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

Re: explode & foreach : j'ai un problème

par xTG » 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.

Re: explode & foreach : j'ai un problème

par zulfurion » 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.

Re: explode & foreach : j'ai un problème

par xTG » 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 ;)

Re: explode & foreach : j'ai un problème

par zulfurion » 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.

Re: explode & foreach : j'ai un problème

par Mazarini » 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.

explode & foreach : j'ai un problème

par zulfurion » 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.