Il faut accéder au champ noSerieDoc de la même manière que tu l'as fait pour le champ nom.
Il faut accéder au champ noSerieDoc de la même manière que tu l'as fait pour le champ nom.
Oui bien sûr !
Alors, ça avance, mais c tjs pas ça :
me dit "Undefined index: nombre in ... "
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 <?php $req = "(SELECT nomDoc_fr AS nom, noSerieDoc AS numero, idSerieDoc FROM documentaire WHERE idSerieDoc IS NULL) UNION (SELECT nomSerieDoc_fr AS nom, nbDocsSerie AS nombre, idSerieDoc FROM serieDoc) ORDER BY nom ASC ;"; $result = mysql_query($req); if ( $result === FALSE ) { echo 'DEBUG : ', $req, ' // ', mysql_error( ) ; // Arrêter traitement, rediriger, etc. } while($rows = mysql_fetch_assoc($result)){ $numero = $rows['numero']; $nombre = $rows['nombre']; if ($numero != 0){ echo '<p>'.$rows['nom'].'série de 1 à '.$rows['nombre'].'</p>'; //print_r ($rows); } else { } } ?>
ça ne m'étonne qu'à moitié vu que le print_r n'affichait pas nbDocsSerie...
UNION va nommer les champs selon la 1re requête, peu importe la suite.
Il faut imaginer un tableau dont les titres des colonnes sont fixés et qu'on ne peut plus toucher par la suite.
Avec ceci :
Le champ nombre ne sera jamais défini car la colonne n° 2 s'appellera numero (par contre tu peux accéder aux valeurs via numero).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (SELECT nomDoc_fr AS nom, noSerieDoc AS numero, idSerieDoc FROM documentaire WHERE idSerieDoc IS NULL) UNION (SELECT nomSerieDoc_fr AS nom, nbDocsSerie AS nombre, idSerieDoc FROM serieDoc)
Pour dissocier aux mieux les enregistrements documents/séries tu peux faire :
Ainsi tu auras dans tous les enregistrements des champs noSerieDoc et nbDocsSerie, l'astuce étant que le champ impertinent de l'enregistrement vaudra NULL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (SELECT noSerieDoc, NULL AS nbDocsSerie FROM ...) UNION (SELECT NULL, nbDocsSerie FROM ...)
Je m'étais compliqué la vie ...
ça a l'air de marcher
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 <?php $req = "(SELECT nomDoc_fr AS nom, noSerieDoc AS numero, idSerieDoc FROM documentaire WHERE idSerieDoc IS NULL) UNION (SELECT nomSerieDoc_fr AS nom, nbDocsSerie AS nombre, idSerieDoc FROM serieDoc) ORDER BY nom ASC ;"; $result = mysql_query($req); if ( $result === FALSE ) { echo 'DEBUG : ', $req, ' // ', mysql_error( ) ; // Arrêter traitement, rediriger, etc. } while($rows = mysql_fetch_assoc($result)){ $numero = $rows['numero']; if ($numero != 0){ echo '<p>'.$rows['nom'].' (série de 1 à '.$rows['numero'].')</p>'; } else { echo '<p>'.$rows['nom'].'</p>'; } } ?>
Je revérifierai demain matin avec la tête plus claire.
Et puis la suite, réussir à mettre des liens vers les pages de présentation des films et séries, pages que je ne sais pas encore créer à la volée depuis ma BDD
En tous cas, un super merci pour tout et peut-être à demain !
Bonne fin de soirée
Ta réponse est arrivée entre-temps
Je la regarde avec + d'attention demain.
Encore merci
Salut Seb
Bon, j'ai beau relire ce que tu as écrit hier soir, je comprends pas tout .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (SELECT noSerieDoc, NULL AS nbDocsSerie FROM ...) UNION (SELECT NULL, nbDocsSerie FROM ...)
Nickel pour le début, l'explication parfaitement claire sur UNION, mais dans la 1ère ligne de code, comment on peut avoir nbDocsSerie puisqu'il ne fait pas partie de la table documentaire ?
Justement, dans la 1re requête du UNION on crée un champ nbDocsSerie qui vaudra toujours NULL pour la 1re requête uniquement. Cela permet d'avoir dans le jeu final de résultats 1 champ pour noSerieDoc et un autre pour nbDocsSerie, les valeurs ne sont pas mélangées.mais dans la 1ère ligne de code, comment on peut avoir nbDocsSerie puisqu'il ne fait pas partie de la table documentaire ?
C'est un peu comme si on faisait simplement :
Malgré qu'il n'y ait pas de table et de FROM cette petite requête est valide, elle retourne un et un seul enregistrement, $row['nomDeChampQuelconque'] vaut toujours "bonjour".
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT 'bonjour' AS nomDeChampQuelconque ;
Colle les requêtes dans phpMyAdmin et tu comprendras mieux.
Bon, après un petit détour sympa et obligatoire par les scripts photoshop et le traitement d'images par lots (enfin un truc que je maîtrise ), me revoilà.
Ça marche nickel en effet, merciiiii !!!
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 <?php $req = "( SELECT nomDoc_fr AS nom, noSerieDoc, NULL AS nbDocsSerie, idDoc FROM documentaire WHERE idSerieDoc IS NULL ) UNION ( SELECT nomSerieDoc_fr, NULL , nbDocsSerie, idSerieDoc FROM serieDoc ) ORDER BY `nom` ASC; "; $result = mysql_query($req); if ( $result === FALSE ) { echo 'DEBUG : ', $req, ' // ', mysql_error( ) ; // Arrêter traitement, rediriger, etc. } while($rows = mysql_fetch_assoc($result)){ $nbDocsSerie = $rows['nbDocsSerie']; if ($nbDocsSerie != 0){ echo '<p>'.strtoupper($rows['nom']).' (série de 1 à '.$rows['nbDocsSerie'].')</p>'; } else { echo '<p>'.fullUpper($rows['nom']).'</p>'; //fullUpper : fonction qui permet d'avoir des maj accentuées avec strtoupper et utf-8 } } ?>
Par contre, va me falloir certainement du tps pour intégrer ça vraiment je crois, malgré toutes tes explications et les nombreux tests sur phpMyAdmin, ça ne m'est pas encore naturel !
Et bien maintenant, j'ai bien ma liste de titres, parfaitement ordonnés... mais ce n'était qu'un début car il faut à présent que je parvienne à mettre des liens sur tous ces titres pour accéder à la page (non faite) où il y aura toutes les infos sur le film, ou, en cas de série : la série + ts les films dont elle est composée.
Aucun idée de par où prendre ça... Je ne sais même pas trop comment s'appelle ce que je veux faire. Aurais-tu une idée d'où je pourrai trouver des infos à ce sujet ou un tuto ?
Alors attention à la question piège de l'examinateur, perso si je voyais ça je m'y engouffrerais (niark niark)Par contre, va me falloir certainement du tps pour intégrer ça vraiment je crois, malgré toutes tes explications et les nombreux tests sur phpMyAdmin, ça ne m'est pas encore naturel !
Points à retenir :
1. Un UNION nomme les champs du jeu de résultats final selon les noms fournis dans la 1re requête
2. Tu peux fixer une valeur de ton choix dans le SELECT (ex. SELECT 'bonjour' ; ou SELECT NULL ;)
=> En découle la requête obtenue qui sépare pertinemment les données des 2 tables dans leurs champs respectifs (mélanger des titres de docs et de séries ça passe, un nombre de docs et un identifiant de série non)
C'est le plus facile !Et bien maintenant, j'ai bien ma liste de titres, parfaitement ordonnés... mais ce n'était qu'un début car il faut à présent que je parvienne à mettre des liens sur tous ces titres pour accéder à la page (non faite) où il y aura toutes les infos sur le film, ou, en cas de série : la série + ts les films dont elle est composée.
Doit bien y avoir des tutos mais je n'en connaîs pas.Aucun idée de par où prendre ça... Je ne sais même pas trop comment s'appelle ce que je veux faire. Aurais-tu une idée d'où je pourrai trouver des infos à ce sujet ou un tuto ?
Si j'étais toi je ferais 2 pages :
documentaire.php : présente le doc dont l'identifiant est passé en paramètre dans le lien, exemple mesdocs.com/documentaire.php?id=1234
serie.php : présente la série dont l'identifiant est passé en paramètre, exemple mesdocs.com/serie.php?id=12
Dans les 2 cas tu récupères l'ID avec la variable $_GET['id'], ensuite il ne reste qu'à requêter MySQL et présenter les infos.
Merci encore pour le cours sur UNION !!!
Ecrit comme ça, ça dédramatise bien car, même pour moi, ça semble accessible. Je m'y mets tout de suite car ça risque de me prendre pas mal de tps vu le nombre d'infos qu'il y a dans un film et ma lenteur habituelleSi j'étais toi je ferais 2 pages :
documentaire.php : présente le doc dont l'identifiant est passé en paramètre dans le lien, exemple mesdocs.com/documentaire.php?id=1234
serie.php : présente la série dont l'identifiant est passé en paramètre, exemple mesdocs.com/serie.php?id=12
Dans les 2 cas tu récupères l'ID avec la variable $_GET['id'], ensuite il ne reste qu'à requêter MySQL et présenter les infos.
Je te tiens au courant
Bonjour Seb
Je n'y arrive pas
Après un break de début de we, je m'y suis remise et, si j'arrive bien à afficher les données simples (nomDoc_fr, nomRea...), rien à faire pour l'image qui doit pourtant figurer en tout premier sur la page doc_fr.php...
Alors, j'ai stocké :
- le nom des images en BDD dans la table imgDocSerie dans une colonne nommée img1.
- les images elles-mêmes dans un répertoire nommé $repImg = 'images/3-docEtSerie/';
Le code qui ne passe pas :
Le message d'erreur : Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /home/lieurac/public_html/doc_fr.php on line 62
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 <?php $req = "SELECT idDoc, img1 FROM documentaire INNER JOIN imgDocSerie ON documentaire.idImg = imgDocSerie.idImg WHERE idDoc=1;"; $result = mysql_query($req); if ( $result === FALSE ) { echo 'DEBUG : ', $req, ' // ', mysql_error( ) ; // Arrêter traitement, rediriger, etc. } while ($val = mysql_fetch_assoc($result)) { if ($val['img1'] != "") { echo '<img alt="" scr = "<php?$repImg.$val['img1']?>"/>'; } } ?>
La line 62, c'est celle de l'echo dans laquelle j'ai essayé de rajouter un ; après la fermeture de la balise php mais c'est pas ni (ni les dizaine d'autres choses que j'ai essayé ).
Qu'est-ce que j'ai mal fait à ton avis ?
C'est pas plutôt ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo 'DEBUG : '.$req.'//'.mysql_error( );
Non, KstorTroy, ce ne sont pas les lignes permettant d'afficher en clair des erreurs de syntaxe SQL qui provoquent le bug.
En l’occurrence, ma requête est bonne, je l'avais d'ailleurs testée dans phpMyAdmin.
C'est bien l'affichage de l'image, l'echo, qui pose problème.
Gros problème ici :
Réécris l'instruction en partant de rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo '<img alt="" scr = "<php?$repImg.$val['img1']?>"/>';
Il va falloir m'éclairer sur 2 choses moi aussi alors ! ^^
Si cette syntaxe est bonne :
--> je viens d'apprendre que je pouvais mettre des ',' au lieu de '.' pour les chaines de caract
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo 'DEBUG : ', $req, ' // ', mysql_error( ) ;
Cette ligne là me pose problème aussi :
Pourquoi dans un code php insérer '<php?' et '?>'
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo '<img alt="" scr = "<php?$repImg.$val['img1']?>"/>';
cela signifie que l'echo va renvoyer au navigateur:'<img alt="" scr = "<php?$repImg.$val['img1']?>'
et donc '<php?$repImg.$val['img1']?>' ne sera pas interprêté par le serveur.
En vérifiant ton code html, tu vas trouver du php dedans.
J'aurais écrit:
et avec ce que je viens d'apprendre aujourd'hui, j'aurais meme pu écrire ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo '<img alt="" scr = ".$repImg.$val['img1'].'"/>';
mais je ne l'aurais pas fait car je réserve les virgules pour les paramètres de fonction ou au req sql. Si je mets des virgules partout, je vais pas m'en sortir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo '<img alt="" scr = ",$repImg.$val['img1'],'"/>';
echo accepte plusieurs arguments, ici la virgule est un séparateur d'arguments. Tu affiches les chaînes les unes après les autres, sans concaténation.--> je viens d'apprendre que je pouvais mettre des ',' au lieu de '.' pour les chaines de caract
KstorTroy, ce que tu proposes donne exactement la même erreur que ce que j'avais écrit.
Seb, j'ai fait plusieurs essais infructueux, mais je ne peux pas continuer car je me suis bloqué le dos cet aprèm (sans doute que je stresse pas assez ) et je dois donc retourner m'allonger en espérant que ça ira mieux demain.
Merci pour vos conseils à tous les deux
Ah !!! Pardon de pourrir ton post Steph ! ^^
Ce sont des arguments, ils ont donc une utilité différente.
Mais l'effet produit est le même dans ce cas-ci.
Y'a pas de "concatiniquination", je cherchais le mot tout à l'heure ! ^^
Y'as pas de concaténation quand on fait un écho.
La différence est un peu vague dans mon esprit.
Je m'en vais me renseingner...
Merci !
EDIT: Je viens de tilter.
--> il va le con-ca-ti-ni-ser avant de l'envoyer et envoyer 1 seul morceau au lieu d'en envoyer plusieurs morceaux.
Si j'en place 10.000 des comme ça. Lequel sera le plus rapide ?
C'est un bon plan d'optimisation si c'est vraiment plus rapide.
Mais qui affiche 10k lignes sans pagination ?
C'est bon à savoir quand meme !
J'avais oublié un '
Celui-ci marche chez moi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $repImg = '11'; $val['img1'] ='12'; echo '<img alt="" scr = "'.$repImg.$val['img1'].'"/>';
Bonjour Seb
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo '<img alt="" scr = "'.$repImg.$val['img1'].'"/>';
1) Si la syntaxe de KstorTroy permet de ne plus avoir d'erreur php, elle ne permet malheureusement pas d'afficher l'image
Pourtant, la requête est bonne, avec l'idDoc1, sur mySql, je vois :
idDoc :1
img1 : 1-lucinda.jpg
et l'image 1-lucinda.jpg est bien dans mon répertoire windows ($repImg) 'images/3-docEtSerie/'.
Que manque t'il pour que l'image s'affiche ?
2) Alors, si j'arrive bien à afficher toutes les infos sur mon film documentaire en écrivant en utilisant comme ci-dessous WHERE idDoc=x, je n'arrive pas à utiliser la méthode $_GET['id']
J'ai essayé plusieurs choses, voici la dernière ci-dessous :
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 <?php $req = "SELECT idDoc, nomProd, nomParticip, txtDoc_fr FROM documentaire WHERE idDoc=37;"; $result = mysql_query($req); if ( $result === FALSE ) { echo 'DEBUG : ', $req, ' // ', mysql_error( ) ; // Arrêter traitement, rediriger, etc. } while($rows = mysql_fetch_assoc($result)){ $nomProd = $rows['nomProd']; $nomParticip = $rows['nomParticip']; $txtDoc_fr = $rows['txtDoc_fr']; echo 'PRODUCTION : '.$rows['nomProd'].'</br> PARTICIPATION : '.$rows['nomParticip'].'<br/><p> '.$rows['txtDoc_fr'].'<p/>'; } ?>
Et ça donne une erreur SQL sur la ligne du WHERE : unexpected T_CONSTANT_ENCAPSED_STRING in /home/lieurac/public_html/doc_fr.php on line 204
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <?php if (isset($_GET['idDoc'])) { $idDoc = intval($GET['idDoc']); $req = "SELECT idDoc, nomDoc_fr, datCopyright, nomRea, nomAut, nomChore FROM documentaire WHERE idDoc="'.$idDoc.'";" ?>
J'imagine que ça doit encore être une histoire de ' ou de "...
Assure-toi que le SRC du IMG est correctement construit.Que manque t'il pour que l'image s'affiche ?
Pour cela tu peux afficher la source HTML de la page.
La chaîne de caractères commence avec " juste avant le SELECT
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $req = "SELECT idDoc, nomDoc_fr, datCopyright, nomRea, nomAut, nomChore FROM documentaire WHERE idDoc="'.$idDoc.'";"
Finit avec " juste après le =
Ensuite le ' rouvre une nouvelle chaîne, ce qui est incorrect car 2 chaînes ne peuvent pas se suivre ainsi sans concaténation (opérateur .)
Tu peux faire :
Ou :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $req = "SELECT idDoc, nomDoc_fr, datCopyright, nomRea, nomAut, nomChore FROM documentaire WHERE idDoc=$idDoc" ;
Doc sur les chaînes de caractères à lire http://fr2.php.net/manual/fr/language.types.string.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $req = 'SELECT idDoc, nomDoc_fr, datCopyright, nomRea, nomAut, nomChore FROM documentaire WHERE idDoc=' . $idDoc ;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager