IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Coché un checkbox suivant le resultat d'une requete


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut Coché un checkbox suivant le resultat d'une requete
    Bonjour a tous.

    - J'ai une table Reports avec le nom de mes reports
    - J'ai une table Contact avec les coordonnées de mes contact
    - J'ai une table Report_contact qui contient les 2 clée primaire Id_reports et id_contact pour stocké les report intéressée par le contact.

    Donc je voudrais lister tout les report mais coché uniquement ceux que le contat a choisi.

    Voic ce que j'ai déjà fais :

    j'ai une liste de checkbox qui se crée dynamiquement ( liste tous les report ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <table id="separation">
    					<?php 
     
    					$reponse = mysql_query("SELECT * FROM reports WHERE Listing=1 ORDER BY Name "); // Requête SQL 
    					$nb_entrees = mysql_num_rows($reponse);
    					// Puis on fait une boucle pour tout afficher. 
     
    					while($donnees = mysql_fetch_array($reponse))
    					{ 
     
    	   				echo '<tr>
    							<td class="col3"><input type="checkbox" name="cb[]" value="'.$donnees['Id_reports'].'" '; echo'>  
              					<td class="col4">' . $donnees['Name'] . '</td>';
              					$date= substr_replace($donnees['Date'], '', 7, 3);
              					echo '<td class="col5">' . $date . '</td>
            	 			 </tr>';
    					}
    					?>	          
    					</table>
    Ensuite j'ai voulu mettre une condition pour coché mes checkbox si il retrouve le meme id_report que dans ma table de liaison mais je n'arrive pas...

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <table id="separation">
    					<?php 
     
    					$reponse = mysql_query("SELECT * FROM reports WHERE Listing=1 ORDER BY Name "); // Requête SQL 
    					$nb_entrees = mysql_num_rows($reponse);
    					// Puis on fait une boucle pour tout afficher. 
     
    					while($donnees = mysql_fetch_array($reponse))
    					{ 
    					$rep = mysql_query("SELECT Id_reports FROM reports_contacts WHERE Id_contacts=".$donnees['Id_reports']."");
    					$check = mysql_fetch_array($rep);
     
    	   				echo '<tr>
    							<td class="col3"><input type="checkbox" name="cb[]" value="'.$donnees['Id_reports'].'"';if ($donnees['Id_reports']==$check['Id_reports']){echo "CHECKED";}; echo'>  
              					<td class="col4">' . $donnees['Name'] . '</td>';
              					$date= substr_replace($donnees['Date'], '', 7, 3);
              					echo '<td class="col5">' . $date . '</td>
            	 			 </tr>';
    					}
    					?>	          
    					</table>
    j'ai surement un problème dans ma condition IF car aucune n'est cochée pourtant j'ai un contact qui est intéresse par 2 reports.

    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    j'ai essayé de mettre cette condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td class="col3"><input type="checkbox" name="cb[]" value="'.$donnees['Id_reports'].'"'; if (in_array($donnees['Id_reports'], $check)){ echo 'checked="checked"';} echo'>
    mais j'ai cette erreur :
    Warning: in_array() [function.in-array]: Wrong datatype for second argument in C:\Program Files\EasyPHP 2.0b1\www\SellMate\Contacts\updatecontacts.php on line 520
    >

  3. #3
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 379
    Points
    5 379
    Par défaut
    Salut,

    Je ne vois pas trop le souci. Mais as-tu regardé le code html généré, il y a peut-être une erreur de syntaxe dans la balise générée.
    Peux-tu donc nous afficher le code html d'un input ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Id_contacts=".$donnees['Id_reports']
    Pourquoi l'id du "contact" serait egale à l'id d'un "report"
    Moi je tenterais un truc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM t_report LEFT JOIN tl_report_contact USING (Id_report) WHERE tl_report_contact.Id_contact = ' . $id_du_contact . ' OR Id_contact IS NULL
    tu recoltes donc tous les reports avec soit id_contact soit un null s'il n'est pas dans la table.

    Mais as-tu regardé le code html généré, il y a peut-être une erreur de syntaxe dans la balise générée.
    Une mauvaise syntaxe html ne provoque pas une erreur PHP.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    effectivement j'avais fais un copier coller de trop.

    Maintenant je n'ai plus d'erreur mais par contre toutes mes checkbox sont cochées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $reponse = mysql_query("SELECT * FROM reports WHERE Listing=1 ORDER BY Name "); // Requête SQL 
    					$nb_entrees = mysql_num_rows($reponse);
    					// Puis on fait une boucle pour tout afficher. 
     
    					while($donnees = mysql_fetch_array($reponse))
    					{ 
    					$rep = mysql_query("SELECT Id_reports FROM reports_contacts WHERE Id_reports=".$donnees['Id_reports']."");
    					$check = mysql_fetch_array($rep);
     
    	   				echo '<tr>
    							<td class="col3"><input type="checkbox" name="cb[]" value="'.$donnees['Id_reports'].'"'; if (in_array($donnees['Id_reports'], $check)){echo 'checked="checked"';} echo'>

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    in_array($donnees['Id_reports'], $check)
    Ce n'est pas id_report que tu cherches, c'est l'id du contact connecté.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    euh non je pense pas...

    pour l'instant j'en suis arrivé a ce resultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <table id="separation">
    					<?php 
     
    					$reponse = mysql_query("SELECT * FROM reports WHERE Listing=1 ORDER BY Name "); // Requête SQL 
     
    					$rep = mysql_query("SELECT Id_reports FROM reports_contacts WHERE Id_contacts =".$idcon."");
    					$check = mysql_fetch_array($rep);
    					// Puis on fait une boucle pour tout afficher. 
     
    					while($donnees = mysql_fetch_array($reponse))
    					{ 
     
    	   				echo '<tr>
    							<td class="col3"><input type="checkbox" name="cb[]" value="'.$donnees['Id_reports'].'"'; if (in_array($donnees['Id_reports'], $check)){echo 'checked="checked"';} echo'>  
              					<td class="col4">' . $donnees['Name'] . '</td>';
              					$date= substr_replace($donnees['Date'], '', 7, 3);
              					echo '<td class="col5">' . $date . '</td>
            	 			 </tr>';
    					}
    					?>	          
    					</table>
    Il m'affiche bien ma liste de tout mes report mais me coche toujours le dernier report.

    par contre si mon contact n'a aucun rapport il m'affiche cette erreur :

    Warning: in_array() [function.in-array]: Wrong datatype for second argument in C:\Program Files\EasyPHP 2.0b1\www\SellMate\Contacts\updatecontacts.php on line 520
    >
    Donc en fait j'ai voulu faire ceci :

    1°) Je fais une requête pour avoir tous les reports qui sont en listing=1

    2°) je fais une requête pour recuperer tous les reports que mon contact est interessé.

    3°) je stock le resultat dans un tableau apellé check.

    4°) je boucle : while($donnees = mysql_fetch_array($reponse)) sur les resultat de ma 1ere requete.

    5°) je test : if (in_array($donnees['Id_reports'], $check)){echo 'checked="checked"';}

    si la valeur de mon Id_reports se trouve dans mon tableau alors je fais echo checked..

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    Donc pour resumé je voudrais faire cette requete :

    si la valeur $donnees['Id_reports'] se trouve dans ma requete : $rep = mysql_query("SELECT Id_reports FROM reports_contacts WHERE Id_contacts =".$idcon."");

    alors je fais un echo ...

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Sur ton point 3 tu ne recuperes actuellement que le premier enregistrement.
    De plus tu recuperes quelque chose qui ressemble à ca $checked[0]['Id_reports'] => 1324
    donc le in_array ne fonctionne pas.

    Tu peux construire ta liste $check :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $rep = mysql_query("SELECT Id_reports FROM reports_contacts WHERE Id_contacts =".$idcon."");
    while ($row = mysql_fetch_array($rep)) {
    $check[] = $row['Id_reports'];
    }

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    ah oui effectivement !

    Ca marche maintenant.

    Merci pour cette précision

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    Je voulais avoir encore une petite précision :

    j'aurais voulu avoir un bouton radio Oui/non pour chaque ligne.

    Donc comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $reponse = mysql_query("SELECT * FROM reports WHERE Listing=1 ORDER BY Name "); // Requête SQL 
    					$nb_entrees = mysql_num_rows($reponse);
    					// Puis on fait une boucle pour tout afficher. 
     
    					while($donnees = mysql_fetch_array($reponse))
    					{ 
    					echo '<tr>';
    					echo '<td class="col1"><input type="checkbox" name="cb[]" value="'.$donnees['Id_reports'].'" '; if(isset($_POST['cb']) && in_array($donnees['Id_reports'],$_POST['cb'])) echo 'checked="checked"'; echo'></td>';  
              			echo '<td class="col2"><input class="radio" type="radio" name="radio.'.$donnees['Id_reports'].'" value="1"><label class="green">Yes</label>
    										   <input class="radio" type="radio" name="radio.'.$donnees['Id_reports'].'" value="0"><label class="red">No</label>';
    					echo '<td class="col3">' . $donnees['Name'] . '</td>';
              			$date= substr_replace($donnees['Date'], '', 7, 3);
              			echo '<td class="col4">' . $date . '</td>
            	 			 </tr>';
    					}
    Vu que je récupéré mes données comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(isset($_POST['cb']))
    	{
        $rapports = $_POST['cb'];		
        }
    	else
    	{
    	$rapports =0;
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($rapports as $rapport)
    					{
    					$sql2=mysql_query("INSERT INTO `reports_contacts`(Id_contacts, Id_reports, Send) VALUES('$maxid','$rapport', '0')");
    					}
    la bouton Oui/non sera pris en compte uniquement si ma case est cochée.

    Es-ce possible d'intégrer dans le tableau $rapports la valeur du bouton radio?

    si oui comment faire ? si non quel choix est plus judicieux ?

    merci

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    alors j'ai essayé ceci pour récupérer mes valeurs de mes radio:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php 
     
    					$reponse = mysql_query("SELECT * FROM reports WHERE Listing=1 ORDER BY Name "); // Requête SQL 
    					$nb_entrees = mysql_num_rows($reponse);
    					// Puis on fait une boucle pour tout afficher. 
     
    					while($donnees = mysql_fetch_array($reponse))
    					{ 
    					echo '<tr>';
    					echo '<td class="col1"><input type="checkbox" name="cb[]" value="'.$donnees['Id_reports'].'" '; if(isset($_POST['cb']) && in_array($donnees['Id_reports'],$_POST['cb'])) echo 'checked="checked"'; echo'></td>';  
              			echo '<td class="col2"><input class="radio" type="radio" name="ra['.$donnees['Id_reports'].']" value="1"><label class="green">Yes</label>
    										   <input class="radio" type="radio" name="ra['.$donnees['Id_reports'].']" value="0"><label class="red">No</label>';
    					echo '<td class="col3">' . $donnees['Name'] . '</td>';
              			$date= substr_replace($donnees['Date'], '', 7, 3);
              			echo '<td class="col4">' . $date . '</td>
            	 			 </tr>';
    					}
    					?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(isset($_POST['cb']))
    	{
        $rapports = $_POST['cb'];
    		foreach($rapports as $rapport)
    		{ 
    		$send = $_POST['ra['.$rapport.']']; 
    		}
        }
    Donc j'ai voulu reprendre la valeur 1 ou 0 du tableau ra[ id report ] mais j'ai ceci comme erreur :

    Notice: Undefined index: ra[9] in C:\Program Files\EasyPHP 2.0b1\www\SellMate\Contacts\addcontacts.php on line 606

    Notice: Undefined index: ra[1] in C:\Program Files\EasyPHP 2.0b1\www\SellMate\Contacts\addcontacts.php on line 606
    pourtant je pense qu'il sont bien défini car mon code généré est bien name="ra[9]" par exemple.

Discussions similaires

  1. [AC-2007] Mise en forme conditionnelle suivant le resultat d'une requete
    Par Danceg dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/05/2012, 06h07
  2. Réponses: 7
    Dernier message: 04/10/2007, 10h10
  3. Réponses: 2
    Dernier message: 29/11/2004, 12h13
  4. Syntaxe pour avoir un seul resultat dans une requete
    Par Pompil dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/09/2003, 15h51
  5. [VB6] [Excel] Résultat d'une requete ds une feuille
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/01/2003, 17h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo