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 :

Problème de requêtes SQL dans un script


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Points : 6
    Points
    6
    Par défaut Problème de requêtes SQL dans un script
    Bonjour,

    sur une page, j'ai un formulaire et quand on clique sur soumettre, cela "lance" un script PHP (qui se trouve en fait sur la même page, avant le formulaire).

    voilà le 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    // si on a cliqué sur Soumettre
    	if (isset($_POST['submit']))
    	{ 
     
    	// on créé et exécute la requête de ajout du lien
        $sql_ajout = "INSERT INTO NFT_Articles (id_art, nom_mag, num_mag, jour_art, mois_art, annee_art, titre_art, texte_art, nom_envoyeur, id_SA, 
    				nb_scan, visible) VALUES ('','".$_POST['nom_mag']."','".$_POST['num_mag']."','".$_POST['jour_art']."',
    				'".$_POST['mois_art']."','".$_POST['annee_art']."','".$_POST['titre_art']."','".$_POST['texte_art']."',
    	             '".$_POST['nom_envoyeur']."','".$_POST['id_SA']."','".$_POST['nb_scan']."','".$_POST['visible']."')";
        mysql_query($sql_ajout,$connect)  or die ('Erreur de requête ligne 33.<br>Erreur : '.mysql_error());
     
     
    	   // création de la requête
    	    $sql = "SELECT id_art, nom_mag FROM NFT_Articles WHERE id_art='SELECT max(id_art) FROM NFT_Articles'";
    	    // on exécute la requête
    	    $req = mysql_query($sql,$connect) or die('Erreur SQL  ligne 39!<br>'.$sql.'<br>'.mysql_error());
     
    		$val = mysql_fetch_assoc($req);
     
    	// création des répertoires
    	$nom_rep = "".$val['id_art']."_".$val['nom_mag'].""; // nom du futur répertoire
    	mkdir($_SERVER['DOCUMENT_ROOT'].'/NCIS-fr/Arts/'.$nom_rep);
    	mkdir($_SERVER['DOCUMENT_ROOT'].'/NCIS-fr/Arts/'.$nom_rep.'/images'); // création dossier images associé au répertoire
    	$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/NCIS-fr/Arts/'.$nom_rep.'/article.php', 'wb');
    	$source = $_POST['texte_art'];
    	copy ($source, ($_SERVER['DOCUMENT_ROOT'].'/NCIS-fr/Arts/'.$nom_rep.'/article.php')); // on copie le contenu du fichier source ds article.php
    	$chem_art = $_SERVER['DOCUMENT_ROOT'].'/NCIS-fr/Arts/'.$nom_rep.'/article.php'; // chemin de l'article
    	// insertion du chemin menant vers l'article
    	$sql_ajout2 = "UPDATE NFT_Articles SET texte_art='".$chem_art."' WHERE id_art='SELECT max(id_art) FROM NFT_Articles'";
        mysql_query($sql_ajout2,$connect)  or die ('Erreur de requête ligne 54.<br>Erreur : '.mysql_error());
     
    	}
    apparement, le script ne comprend pas la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = "SELECT id_art, nom_mag FROM NFT_Articles WHERE id_art='SELECT max(id_art) FROM NFT_Articles'";
    également, il y a un problème avec la variable 'texte_art' qui n'est pas reconnue dans la tout premiere requete, cela affiche l'erreur

    "Notice: Undefined index: texte_art" pour la variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_POST['texte_art']
    (dans le formulaire, le champ 'texte_art' est de type file, on clique sur parcourir pour rechercher le fichier).

    et dans le formulaire, on peut normalement selectionner dans une liste multiple plusieurs "nom_SA", mais apparement, cela ne veut pas prendre plusieurs noms.

    sauriez vous d'où peuvent venir les problèmes ?

    merci pour votre aide

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 55
    Points : 54
    Points
    54
    Par défaut
    Bonjour,

    Pour le premier problème, fais 2 requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $sql = "SELECT max(id_art) FROM NFT_Articles'";
     
    $res = mysql_query($sql) or die("pas bo");
     
    $id_art = mysql_fetch_array ($res);
     
    $sql = "SELECT id_art, nom_mag FROM NFT_Articles WHERE id_art='".$id_art["id_art"]."'";
     
    mysql_query ....
    a+

  3. #3
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    salut,
    pour simplifier ton code, fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql_ajout = "INSERT INTO NFT_Articles (id_art, nom_mag, num_mag, jour_art, mois_art, annee_art, titre_art, texte_art, nom_envoyeur, id_SA, nb_scan, visible)
    VALUES ('','{$_POST['nom_mag']}','{$_POST['num_mag']}','{$_POST['jour_art']}',
    '{$_POST['mois_art']}','{$_POST['annee_art']}','{$_POST['titre_art']}','{$_POST['texte_art']}',
    '{$_POST['nom_envoyeur']}','{$_POST['id_SA']}','{$_POST['nb_scan']}','{$_POST['visible']}')";
        mysql_query($sql_ajout,$connect)  or die ('Erreur de requête ligne 33.<br>Erreur : '.mysql_error());
    et pourquoi mettre le numéro de ligne en dur ? si tu modifies ton script, ça va changer le numéro de ligne. tu me diras, un coup de recherche dans le fichier... je mettrai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    die ('Erreur de requête ligne '.__LINE__.'<br>Erreur : '.mysql_error());
    pour être sûr

    pour la notice, es-tu sûr d'avoir mis le même nom dans ton formulaire ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Points : 6
    Points
    6
    Par défaut
    j'ai fait les modifications que vous m'avez conseillé.

    voilà les erreurs que j'ai

    Notice: Undefined index: texte_art in e:\jaghm\ncis-fr\adro\admin_ajout_art.php on line 30

    Notice: Undefined index: id_art in e:\jaghm\ncis-fr\adro\admin_ajout_art.php on line 39

    Warning: mkdir(e:/jaghm/NCIS-fr/Arts/_): File exists in e:\jaghm\ncis-fr\adro\admin_ajout_art.php on line 46

    Warning: mkdir(e:/jaghm/NCIS-fr/Arts/_/images): File exists in e:\jaghm\ncis-fr\adro\admin_ajout_art.php on line 47

    Notice: Undefined index: texte_art in e:\jaghm\ncis-fr\adro\admin_ajout_art.php on line 49

    Notice: Undefined index: id_art in e:\jaghm\ncis-fr\adro\admin_ajout_art.php on line 53

    la ligne 30 correspond à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '{$_POST['mois_art']}','{$_POST['annee_art']}','{$_POST['titre_art']}','{$_POST['texte_art']}',
    ligne 39 à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT id_art, nom_mag FROM NFT_Articles WHERE id_art='".$id_art["id_art"]."'";
    ligne 46 et 47 ça indique que le dossier "_" existe déjà, c'est à dire qu'il ne prend pas en compte l'id_art et le nom_mag

    ligne 49 à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $source = $_POST['texte_art'];
    ligne 53 à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_ajout2 = "UPDATE NFT_Articles SET texte_art='".$chem_art."' WHERE id_art='".$id_art["id_art"]."'";

    je sais pas si j'ai bien compris ta question Le_coyote pour le numéro de ligne en dur... en fait, la première requête s'exécute et si je ne donne pas le numéro de ligne attribué à cette première requête pour les suivantes, cela me crée une nouvelle table avec juste la donnée du chemin vers l'article, les autres champs sont vides (NULL)

    dans mon formulaire, j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <td>Texte de l'article </td>
              <td><input type="file" name="texte_art" size="40" maxlength="255"></td>

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut Re: Problème de requêtes SQL dans un script
    Citation Envoyé par Nefret
    Bonjour,
    également, il y a un problème avec la variable 'texte_art' qui n'est pas reconnue dans la tout premiere requete, cela affiche l'erreur

    "Notice: Undefined index: texte_art" pour la variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_POST['texte_art']
    ...
    normal le fichier n'est pas dans $_POST[] mais dans $_FILES[]

    A+JYT

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Points : 6
    Points
    6
    Par défaut
    le but du script est de pouvoir poster un article paru dans la presse récente (ou datant d'il y a qques années) avec des renseignements dessus (date de parution, titre de l'article, sujet(s) concerné(s), etc...)
    un répertoire doit être créé pour chaque article (et j'ai pensé mettre comme nom de répertoire l'identifiant de l'article - pour éviter les doublons - et le nom du magazine) et dans ce répertoire, un dossier images doit être créé pour pouvoir mettre des scans d'articles s'il y en a.
    s'il y a des images dans le répertoire de l'article, des miniatures doivent être créées, cela permettra lorsque le visiteur lira l'article de cliquer sur les miniatures pour voir les scans en grands.
    je pense que c'est un système qui devrait pas mal ressembler à ceux utilisé sur http://www.clubic.com/ ou http://www.pcinpact.com/ pour les actualités (sauf que la date n'est pas automatique, on doit pouvoir la rentrer)

  7. #7
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut Re: Problème de requêtes SQL dans un script
    Citation Envoyé par Nefret
    Bonjour,

    apparement, le script ne comprend pas la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = "SELECT id_art, nom_mag FROM NFT_Articles WHERE id_art='SELECT max(id_art) FROM NFT_Articles'";
    ...
    dans ta requête tu cherche les ligne dont l'id contient 'SELECT max(id_art) FROM NFT_Articles' je ne pense pas que id_art contient cette chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM profil
    WHERE pro_id = (SELECT MAX(pro_id) FROM profil);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM profil
    JOIN (SELECT MAX(pro_id) FROM profil) USING (pro_id);
    attention cela n'existe dans mysql que depuis la 4.1

    A+

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Points : 6
    Points
    6
    Par défaut
    sekaijin, apparement le premier code ne fonctionne pas et pour le deuxième où j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM NFT_Articles JOIN (SELECT MAX(id_art) FROM NFT_Articles) USING(id_art)";
    j'ai cette erreur

    Erreur de requête ligne 41
    Erreur : Every derived table must have its own alias


    et comme valeur de champ à texte_art j'ai : "array"

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 22
    Points : 6
    Points
    6
    Par défaut
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    // si on a cliqué sur créer un répertoire
    	if (isset($_POST['select']) and isset($_POST['creat_rep']))
    	{
    	 // création de la requête
    	 $sql = "SELECT id_art, nom_mag FROM NFT_Articles WHERE id_art='".$_POST['select']."'";
    	 // on exécute la requête
    	 $req = mysql_query($sql,$connect) or die ('Erreur de requête ligne '.__LINE__.'<br>Erreur : '.mysql_error());
    	 $val = mysql_fetch_assoc($req);
     
    	// création des répertoires
    	$nom_rep = "".$val['id_art']."_".$val['nom_mag'].""; // nom du futur répertoire
    	mkdir($_SERVER['DOCUMENT_ROOT'].'/NCIS-fr/Arts/'.$nom_rep);
    	mkdir($_SERVER['DOCUMENT_ROOT'].'/NCIS-fr/Arts/'.$nom_rep.'/images'); // création dossier images associé au répertoire
    	$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/NCIS-fr/Arts/'.$nom_rep.'/article.php', 'wb');
    	$source = $_FILES['texte_art'];
    	copy ($source, ($_SERVER['DOCUMENT_ROOT'].'/NCIS-fr/Arts/'.$nom_rep.'/article.php')); // on copie le contenu du fichier source ds article.php
    	$chem_art = $_SERVER['DOCUMENT_ROOT'].'/NCIS-fr/Arts/'.$nom_rep.'/article.php'; // chemin de l'article
    	// insertion du chemin menant vers l'article
    	$sql_ajout2 = "UPDATE NFT_Articles SET texte_art='".$chem_art."' WHERE id_art='".$_POST['select']."'";
        mysql_query($sql_ajout2,$connect)  or die ('Erreur de requête ligne '.__LINE__.'<br>Erreur : '.mysql_error());
    	}
     
     
    	// si on a cliqué sur Soumettre
    	if (isset($_POST['submit']))
    	{ 
     
    	// on créé et exécute la requête de ajout du lien
        $sql_ajout = "INSERT INTO NFT_Articles (id_art, nom_mag, num_mag, jour_art, mois_art, annee_art, titre_art, texte_art, nom_envoyeur, id_SA, nb_scan, visible)
    				VALUES ('','{$_POST['nom_mag']}','{$_POST['num_mag']}','{$_POST['jour_art']}',
    				'{$_POST['mois_art']}','{$_POST['annee_art']}','{$_POST['titre_art']}','{$_FILES['texte_art']}',
    				'{$_POST['nom_envoyeur']}','{$_POST['id_SA']}','{$_POST['nb_scan']}','{$_POST['visible']}')";
        mysql_query($sql_ajout,$connect)  or die ('Erreur de requête ligne 33.<br>Erreur : '.mysql_error());
     
     
    	}
     
    	// création de la requête d'affichage
    	$sql = "SELECT id_art, nom_mag, num_mag, jour_art, mois_art, annee_art, titre_art, texte_art, nom_envoyeur, NFT_Articles.id_SA, nb_scan, visible
    	FROM NFT_Articles, NFT_Sujet_Art WHERE NFT_Articles.id_SA=NFT_Sujet_Art.id_SA";
    	// on exécute la requête
    	$req = mysql_query($sql,$connect) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    	// on compte le nombre total des news
    	$res = mysql_num_rows($req);
     
    	// on crée la condition et la boucle d'affichage des news
    	if ($res == 0)
    	{
    	echo "Aucun article";
    	}
    	else
    	{
    		while ($val = mysql_fetch_assoc($req))
    		{
    		echo $val['id_art']."<br>".$val['nom_mag']."<br>".$val['num_mag']."<br>".$val['jour_art']."/"
    		    .$val['mois_art']."/".$val['annee_art']."<br>".$val['nom_envoyeur']."<br>".$val['nb_scan']."
    			<br> visible : ".$val['visible']."<br>";
    			// création de la requête
    	    	$sql2 = "SELECT id_SA, nom_SA FROM NFT_Sujet_Art";
    	    	// on exécute la requête
    	    	$req2 = mysql_query($sql2,$connect) or die('Erreur SQL  ligne 79!<br>'.$sql.'<br>'.mysql_error());
     
    			echo "Sujet : ";
    			while ($val2 = mysql_fetch_assoc($req2))
     
    			{
    			echo $val2['id_SA']."->".$val2['nom_SA'].", ";                
    			}
     
    			echo "<br>".$val['titre_art']."<br>";
    			echo $val['texte_art']."<br>";
    			$chemin_art = $val['texte_art'];
    			include ($chemin_art);
     
     
     
    				 echo "<form method='post' action='admin_ajout_art2.php'>
                       <td colspan='2' align='center' class='texte'>
    				   <input type='hidden' name='select' value=".$val['id_art'].">
    				   <input type='submit' value='Créer les répertoires' name='creat_rep'>
    				   <input type='submit' value='Supprimer' name='delete'></td></form>";
    		}
    	}


    avec le code ci-dessus, on remplie le formulaire et on clique sur soumettre.
    ->à l'affichage, cela donne (pour la fin)


    Array

    Warning: main(Array): failed to open stream: No such file or directory in e:\jaghm\ncis-fr\adro\admin_ajout_art2.php on line 100

    Warning: main(): Failed opening 'Array' for inclusion (include_path='.;C:/Program Files/EasyPHP1-8\php\pear\') in e:\jaghm\ncis-fr\adro\admin_ajout_art2.php on line 100

    ->si je clique sur "créer les répertoires", à la fin de l'affichage, cela donne

    e:/jaghm/NCIS-fr/Arts/16_Episode/article.php

    ->et comme erreur j'ai

    Notice: Undefined index: texte_art in e:\jaghm\ncis-fr\adro\admin_ajout_art2.php on line 38

    qui correspond au code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $source = $_FILES['texte_art'];
    [/code]


    aussi, le fichier indiqué dans le formulaire (texte_art) n'est toujours pas copié dans "article.php"

Discussions similaires

  1. [SQL] PB requête SQL dans un script php et sous phpmyadmin
    Par badboys46 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 22/06/2007, 11h36
  2. [MySQL] Requête sql dans un script php
    Par ceaser dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/05/2007, 14h01
  3. [AJAX] requète sql dans js
    Par cheers94wow dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/05/2006, 13h24
  4. [SQL] Traitement de plusieurs requêtes .SQL dans un script PHP?
    Par M4x dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/03/2006, 19h59
  5. Problème de requète SQL dans un Requery
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/10/2004, 14h58

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