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 :

Mes début avec sqli : requête dans le while d'une autre requête ne fonctionne pas [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 430
    Points
    430
    Par défaut Mes début avec sqli : requête dans le while d'une autre requête ne fonctionne pas
    Bonsoir à tous,

    Je dois passer à sqli pour mon hébergement car les requête commencent à donner des erreurs à la version suivante php 5.5 (standard actuel php 5.4 en fin de vie - conseillé php 5.6).

    J'arrive à le faire pour une requête, mais ici j'ai besoin d'une requête durant le while de la première.
    J'ai vérifié les noms des tables et des champs (même un copier coller depuis la BDD ).

    Voici le bout de code qui me pose problème : $sql2 en particulier

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php
    include ('../connect_sqli.php');
     
    // --------------- Listing des chiens : les classes des chiens
    $sql="SELECT id_chien, id_prop, p_nom, p_prenom, c_nom, c_classe, c_prop 
    	FROM m_chien chien 
    		INNER JOIN m_prop prop ON chien.c_prop=prop.id_prop 
    	ORDER BY id_chien";
    $requete=mysqli_query($conn, $sql);	
     
    while ($in = mysqli_fetch_array($requete)){
    	$prop_nom=$in[p_nom];
    	$prop_prenom=$in[p_prenom];
    	$chien_nom=$in[c_nom];
    	$chien_classe=$in[c_classe];
    	$chien_id=$in[id_chien];
    	$color='blue';
     
    	// ---------- Les classes
    	if ($chien_classe!='') {
    		$chien_classe_explode=explode (';',$chien_classe);
    		$chien_classe_nbr=count ($chien_classe_explode);
     
    		for ($i=0; $i<$chien_classe_nbr; $i++) {
    			$classe_chien=$chien_classe_explode[$i];
     
    			if ($classe_chien=='') { $color='red'; }
    				else { $color='black'; }
     
    			print "* $classe_chien - "; // ----- test de valeur : OK
     
    			if ($classe_chien!='0') { // ----- cela bloque si 0 au lieu de '0' ???? pourtant c'est le chiffre
    				print " $classe_chien *"; // ----- test de passage : OK avec '0'
     
    				// ----- Lecture des classes et section : conversion
    				$sql2="SELECT cours_classe_section_id, cours_section_id, cours_classe_nom, cours_classe_id, cours_section 
    					FROM d_cours_classe classe
    						INNER JOIN d_cours_section section ON classe.cours_classe_section_id=section.cours_section_id
    					WHERE classe.cours_classe_nom='$classe_chien'";
    				$requete2=musqli_query($conn, $sql2);
     
    				while ($in2 = mysqli_fetch_array($requete2)){
    					$classe_id=$in2[cours_classe_id];
    					$classe_section=$in2[cours_section];
     
    				}
     
    				if ($i==0) { $classe_new='1. '.$classe_section.':'.$classe_id; }
    				else { $classe_new=$classe_new.'; 2. '.$classe_section.':'.$classe_id; }
    			}
    			print "<br />";
    		}
    	}
    	else { $chien_classe_nbr=0; $classe_new='4B:5'; }
     
     
    	print "- $prop_prenom $prop_nom : [$chien_id] $chien_nom <br />&nbsp;&nbsp;&nbsp; ---> <font color=\"$color\">[$chien_classe_nbr] $chien_classe </font> => $classe_new<br />";
    	unset ($classe_new, $color);
    }
     
    mysqli_close($conn); // Déconnexion de MySQL
    ?>
    Une fois le code fonctionnel, je rectifie les erreurs de l'interface chaise-clavier et ensuite j'écris les nouvelles valeurs dans la BDD (les couleur pour identifier des erreurs).

    Je suis preneur pour toute solution.

    NB : en sql je suis certains de faire fonctionner, mais j'ai l'obligation de commencer en sqli.

    @+
    DDAWEB

  2. #2
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 430
    Points
    430
    Par défaut
    Voilà comme prévu, avec sql, cela fonctionne très bien :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    <?php
    include ('../connect_sql.php');
     
    // --------------- Listing des chiens : les classes des chiens
    $requete=mysql_query("SELECT id_chien, id_prop, p_nom, p_prenom, c_nom, c_classe, c_prop 
    	FROM m_chien chien 
    		INNER JOIN m_prop prop ON chien.c_prop=prop.id_prop 
    	ORDER BY id_chien") or die(mysql_error());
     
    while ($in = mysql_fetch_array($requete)){
    	$prop_nom=$in[p_nom];
    	$prop_prenom=$in[p_prenom];
    	$chien_nom=$in[c_nom];
    	$chien_classe=$in[c_classe];
    	$chien_id=$in[id_chien];
    	$color='blue';
     
    	// ---------- Les classes
    	if ($chien_classe!='') {
    		$chien_classe_explode=explode (';',$chien_classe);
    		$chien_classe_nbr=count ($chien_classe_explode);
     
    		for ($i=0; $i<$chien_classe_nbr; $i++) {
    			$classe_chien=$chien_classe_explode[$i];
     
    			if ($classe_chien=='') { $color='red'; }
    				else { $color='black'; }
     
    			print "* $classe_chien - "; // ----- test de valeur : OK
     
    			if ($classe_chien!='0') { // ----- cela bloque si 0 au lieu de '0' ???? pourtant c'est le chiffre
    				print " $classe_chien *"; // ----- test de passage : OK avec '0'
     
    				// ----- Lecture des classes et section : conversion
    				$sql2=mysql_query("SELECT cours_classe_section_id, cours_section_id, cours_classe_nom, cours_classe_id, cours_section 
    					FROM d_cours_classe classe
    						INNER JOIN d_cours_section section ON classe.cours_classe_section_id=section.cours_section_id
    					WHERE classe.cours_classe_nom='$classe_chien'") or die(mysql_error());
     
    				while ($in2 = mysql_fetch_array($sql2)){
    					$classe_id=$in2[cours_classe_id];
    					$classe_section=$in2[cours_section];
     
    				}
     
    				if ($i==0) { $classe_new='1. '.$classe_section.':'.$classe_id; }
    				else { $classe_new=$classe_new.'; 2. '.$classe_section.':'.$classe_id; }
    			}
    			print "<br />";
    		}
    	}
    	else { $chien_classe_nbr=0; $classe_new='4B:5'; }
     
     
    	print "- $prop_prenom $prop_nom : [$chien_id] $chien_nom <br />&nbsp;&nbsp;&nbsp; ---> <font color=\"$color\">[$chien_classe_nbr] $chien_classe </font> => $classe_new<br />";
    	unset ($classe_new, $color);
    }
     
    mysql_close; // Déconnexion de MySQL
    ?>
    J'avoue ne rien comprendre, les requêtes sont identiques

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    et c'est quoi l'erreur ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Points : 144
    Points
    144
    Par défaut
    Bonjour,
    C'est normal le "musqli_query" ligne 41 ?

  5. #5
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 430
    Points
    430
    Par défaut
    En fait il n'y a pas d'erreur, mais tout le script s'arrête après la 1ère ligne des valeurs de la BDD de la première requête, dès qu'elle commence la 2me requête en ligne 41.
    Cette 2me requête va chercher les informations qui seront par la suite mise à jour : but de l'opération, mise à jour des champs texte par des id d'une table et rectifier toutes les erreurs de l'utilisateur.

    Je n'ai le problème que lors de l'utilisation de mysqli (1er POST) ... avec les requêtes mysql tout fonctionne bien (2me POST).
    Je cherche à évoluer dans le mysqli car je vais devoir y passer tôt ou tard.

    Voici des résultats par mysql, en mode visuel pour l'instant :
    ---> [3] A;Debutant;0 => 4B:5;4C:9
    ---> [3] A;Initiation;0 => 4B:5;4C:8
    ---> [3] C;Expo;0 => 4B:7;5A:14

    Au total j'ai 1556 enregistrements à mettre à jour.

    Edit : je modifie le mode de connexion et le contrôle me dit que la connexion est réussie en mysqli ... confirmation par l'affichage d'une ligne sur les 1556

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Points : 144
    Points
    144
    Par défaut
    As tu corrigé la ligne 41 ?

  7. #7
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 430
    Points
    430
    Par défaut
    Citation Envoyé par Yellu Voir le message
    As tu corrigé la ligne 41 ?
    Haaaaa zut alors , je suis passé pendant des heures au dessus de cette faute de frappe.
    J'avoue ne pas avoir tilté à ta première remarque.

    En effet cela fonctionne beaucoup mieux maintenant

    Merci Yellu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Requête filtrée sur résultat d'une autre requête ?
    Par junty dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/12/2012, 14h09
  2. Réponses: 0
    Dernier message: 19/10/2012, 10h29
  3. Réponses: 3
    Dernier message: 05/11/2009, 12h09
  4. Réponses: 0
    Dernier message: 02/01/2009, 15h40

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