PHP Fonction Split()

Résolu
Bonjour,
je souhaiterai savoir s'il est possible de faire ceci :

je voudrais, pour des raisons diverses, recuperer les infos de formulaires de ma base sql a l'aide d'une interface ou l'utilisateur entre par exemple l'id :

EX: Devis n° : 29,25,16,34

Submit

Ces données sont separées par des virgules et je souhaiterai savoir quelle genre de requete je devrai faire .
Merci !

Dois-je utiliser la fonction explode ou split ?
De plus je ne sais pas comment les utiliser ... et oui je suis nul :)

Merci de votre aide qui me sera tres precieuse
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  1. Modérateur
    Avec explode oui. Tu récupères ensuite un tableau.
    un exemple :
    <?php
    $numero="12,23,34,45";
    $array=explode(",",$numero);
    echo $array[0]; //affiche 12
    echo $array[1]; //affiche 23
    echo $array[2]; //affiche 34
    echo $array[3]; //affiche 45
    ?>
    


    Plus d'infos sur explode : http://www.manuelphp.com/php/function.explode.php
    6
    1. alors voici :
      dans index2.php:
      <?
      session_start();
      include('bdd.php');
      
      echo '<form action="liste2.php" method="post">';
      
      echo '<tr>'; 
      echo '<td>'; 
      echo '<font color="#FFFFFF" size="3" face="Century Gothic">'; 
      echo '<td bgcolor="#3366ff"><b><u><font color="#FFFFFF">Numeros</font></u></b></td>'; 
      echo '<input name="saisie"  style="width:203; font-weight:700; height:22" size="25"></font>'; 
      echo '</td>'; 
      echo '</tr>'."\n"; 
      
      $decoupe = explode(",",$saisie);
      
      echo "<input type='submit' value='afficher devis' /></form>"; 
      
      ?>
      


      dans liste2.php:
      <?php
      session_start();
      include('bdd.php');
      $tre = $_POST['saisie'];
      echo "$tre";
      
      $sql = "SELECT clic FROM devis_table  WHERE id IN ('$tre') "; 
      $result = mysql_query( $sql) or die( "Erreur : " . mysql_error() ); 
      		
      	if($result) { 
       echo '<table>'; 
      
      echo '<tr>'; 
      echo '<td width="80" bgcolor="#3366ff"><b><u><font color="#FFFFFF">Devis n° :</font></u></b></td>'; 
      echo '</tr>'."\n"; 
      // lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne. 
      
      while($row = mysql_fetch_array($result)) 
      { 	
      				echo '<tr>'; 
      				echo '<td width="80" bgcolor="#e8e2e2">'.$row[clic].'</td>'; 
      echo '</tr>'; 				
      } 
      
      } 
      else 
      {
      echo 'Pas d\'enregistrements dans cette table...'; 
      }
       echo '</table>'; 
      ?>


      Voici, il m'affiche 12,25 si je tape 12,25 mais la requete ne fonctionne pas
      0
      1. Il ne faut pas mettre de guillemet à $tre.

        Chez moi, le SQL me renvoie bien 3 enregistrements :

        SELECT fjs_ticket_id, fjs_categoryticket_libelle, fjs_state_libelle, fjs_ticket_date_created, fjs_inus_prenom, fjs_inus_nom, fjs_ticket_userid, fjs_ticket_comment, fjs_ticket_contournement, fjs_ticket_soluce
        FROM tjs_ticket, tjs_state, tjs_category_ticket, tjs_internal_user
        WHERE fjs_ticket_userid = fjs_inus_id
        AND fjs_ticket_stateid = fjs_state_id
        AND fjs_ticket_categorid = fjs_categoryticket_id
        AND fjs_ticket_id IN ( 2, 3, 5 ) 


        Pour info : https://www.w3schools.com/sql/sql_in.asp

        @ +
        0
    2. JB_A, tu me dis de recuperer les numeros mais ceux ci sont séparés par des virgules ... si je met where ID = ($list) cela va me poser une probleme si je veux recuperer 4 devis avec les id separés par les virgules .. ?
      0
      1. Cela va te faire WHERE ID IN (Numéro1,Numéro2,Numéro3...)

        Ce sont les virgules qui vont faire séparateur.

        @+
        0
    3. Modérateur
      C'est difficile de voir comment marche le bin's avec un unique bout de script. Mais je comprends pas vraiment :
      L'utilisateur rentre dans un formulaire les numéros des devis à afficher par exemple 12,45,78,65 c'est ça ? (voir https://www.commentcamarche.net/contents/493-formulaires-html-cours-et-exemples pour ce faire)
      Et ensuite, ce qu'on souhaite c'est les afficher ?
      Dans ce cas, récupère les numéros de chaque devis à afficher avec une variable par numéro (comme ci-dessus, mais avec une boucle for() ou while() pour que ça marche quel que soit le nombre de devis à afficher), et ensuite connecte-toi à la base pour demander les devis en question. Pour cela il faut que tu comprennes exactement ce qu'effectue liste.php sinon ce n'est même pas pensable. Il faut savoir à quoi correspondent $a, $b, $k ...
      0
      1. je ne pense pas avoir eté clair ou alors c'est moi qui suis débile ...
        mes devis rentrent d'eux meme dans la base et vont du devis n°1 a 800 par exemple aujourdui
        je souhaiterai afficher le 18,24,32 pour les consulter.et demain le 34 et 56!
        aparament ici :
        $numero="12,23,34,45";
        
        est fixe !!

        je te passe un bout de mon code :
        dans admin.phpje souhaiterai avoir la zone de texte qui me permet de rentrer les devis
        et voici liste.php qui me les affiche.

        Merci
        <?php
        session_start();
        include('bdd.php');
        	
        	$b = $_POST['thematique_projet'];	
        	$_SESSION['b'] = $b;
        	$k = $_SESSION['k'];
        	
        		 
        if ( ($a == 'null'))
        {
        	if ($b == 'null')
        	{
        	 $sql = "SELECT * FROM devis_table  WHERE sous_categorie = '" . $k . "' ORDER BY '" . $a ."' "; 
        	$result = mysql_query( $sql) or die( "Erreur : " . mysql_error() );
        	
        	}
        	else
        	$sql = "SELECT * FROM devis_table  WHERE thematique_projet = '" . $b . "' ORDER BY '" . $a ."' "; 
        	$result = mysql_query( $sql) or die( "Erreur : " . mysql_error() ); 
        }
        else
        {
        $sql = "SELECT * FROM devis_table  WHERE departement = '" . $a . "' AND thematique_projet = '" . $b . "' ORDER BY '" . $a ."' "; 
        $result = mysql_query( $sql) or die( "Erreur : " . mysql_error() ); 
        }
        	
        	
        if ( $thematique_projet == 'null')
        
        {		
        echo"<b><center>Votre Recherche porte sur <br> $k / Toutes les Thematiques <br><br><br></center></b>\n";
        }
        else
        {		
        echo"<b><center>Votre Recherche porte sur <br> $k / $thematique_projet <br><br><br></center></b>\n";
        }
        
        
        if($result) { 
        // debut du tableau 
        echo '<form action="confirmation.php" method="post">';
         echo '<font size="2" face="Arial" >';
         
        echo '<table bgcolor="#FFFFFF" border="0" align="center">'."\n"; 
        // première ligne on affiche les titres dans 4 colonnes 
        echo '<tr>'; 
        echo '<td width="80" bgcolor="#3366ff"><b><u><font color="#FFFFFF">Devis n° :</font></u></b></td>'; 
        echo '<td bgcolor="#3366ff"><b><u><font color="#FFFFFF">Département </font></u></b></td>­'; 
        echo '<td bgcolor="#3366ff"><b><u><font color="#FFFFFF">Commentaires</font></u></b></td>'; 
        echo '<td bgcolor="#3366ff"><b><u><font color="#FFFFFF">Clics Restants</font></u></b></td>'; 
        echo '<td bgcolor="#3366ff"><b><u></u></b></td>'; 
        echo '</tr>'."\n"; 
        // lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne. 
        
        $i=0; 
        $timeout = 604800;
        $heure = time();
        
        while($row = mysql_fetch_array($result)) 
        { 
        	if ( ( $heure < ($row['time'] + $timeout )) || ( $row['time'] == "0" ))
        		
        		
        		if ( $row['clic'] != "0" )
        		
        			
        			{
        
        				{
        				echo '<tr>'; 
        				echo '<td width="80" bgcolor="#e8e2e2">'.$row[id].'</td>'; 
        				echo '<td bgcolor="#e8e2e2">'.$row[departement].'</td>'; 
        				echo '<td bgcolor="#e8e2e2">'.$row[commentaires].'</td>'; 
        				echo '<td bgcolor="#e8e2e2">'.$row[clic].'</td>';			
        				echo '<td><input type="checkbox" name="option'.$i.'" value="'.$row[id].'">acheter</td>';
        				echo '</tr>'; 
        				$i = $i+1; 
        								
        				echo '<tr>';
        				echo '<td></td>';
        				echo '<td bgcolor="#e8e2e2"><h5><i>Ajouté le :<br> </h5></i></td>';
        				echo '<td bgcolor="#e8e2e2"><h5><i>'.$row[Date].'</h5></i></td>';
        	echo '<td bgcolor="#e8e2e2"><h5><i>'.$row[objet_message2].'</h5></i></td>';
        				echo '<td></td>';
        				echo '</tr>';	
        				
        				echo '<input type="hidden" name="variable" value="'.$i.'">'; 
        				
        			
        	
        				}	
        			}
        			
        		
        } 
        
        echo '</table>'."\n"; 
        
        echo "<input type='submit' value='Commander Devis' /></form>"; 
        
         echo '</font>';
        // fin du tableau. 
        } 
        else 
        {
        echo 'Pas d\'enregistrements dans cette table...'; 
        }
        
        ?>
        
        


        Pour le moment mes requetes font un affchage en fonction de deux parametres.je les changerai par la suite pour mettre en fonction de l'id saisi par l'utilisateur voyez vous ?
        0
        1. Salut,

          Pourquoi tu ne fais pas

          $list='$numeros';

          et dans ta clause where tu ajoutes

          Where nomcolonne IN ('$list')

          @ +
          0
      2. Modérateur
        Bah c'est ton numéro de devis. Je suppose qu'il est attribué automatiquement par le reste du script php.
        Si tu veux que l'on reprenne exactement ton exemple ça donne : $numero="29,25,16,34";
        1
        1. Merci beaucoup
          je ne comprends pas tout : a quoi correspond cette ligne ?
          $numero="12,23,34,45";
          

          je souhaiterai que ce soit des nombres aléatoires que l'utilisateur a envi de rentrer ... le 48 ou le 22 si cela lui fait plaisir

          Merci
          1