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 éclairé
    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
    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 éclairé
    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
    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
    Membre Expert 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
    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
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    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
    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
    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é.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éclairé
    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
    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 éclairé
    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
    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
    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'];
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre éclairé
    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
    Par défaut
    ah oui effectivement !

    Ca marche maintenant.

    Merci pour cette précision

  11. #11
    Membre éclairé
    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
    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 éclairé
    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
    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