PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#51 Re : MySQL, PostgreSQL, etc... » Requete SQL avec JOIN sur serveur distant » 10-02-2011 12:12:39

xTG a écrit :

Si la base de donnée se trouve sur le même serveur tu peux y accéder de cette manière :

SELECT ...
FROM base1.table1 INNER JOIN base2.table2 ON ...

Si c'est sur une toute autre connexion par contre je ne sais pas...
Car les primitives de requêtes n'acceptent qu'une connexion, une solution pourrait être de faire le "join" en PHP.

Bonjour,

Je connais et "maîtrise" la méthode citée mais mon problème est différent, rajouter un INNER JOIN mais pour une base distante n'étant pas sur le même serveur ...

Dans l'attente de vos idée,

Anthony

#52 MySQL, PostgreSQL, etc... » Requete SQL avec JOIN sur serveur distant » 10-02-2011 12:12:39

Anthotill
Réponses : 3

Bonjour,

Je sais faire un INNER JOIN sur plusieurs tables dans la même base de donnée (MYSQL) mais j'aimerais savoir si il est possible de le faire en plus sur une base distante.

Faire une requête avec deux connexions en quelques sortes.

Merci à tous pour votre aide,

Anthony

#53 Re : Forum Général PHP » Inner join impossible » 02-12-2010 09:23:02

Bonjour,

Votre débat m'échappe, vous êtes des pros !

J'ai donc remplacé

 DateCreation LIKE '%$DATE%'
TO_DAYS(NOW()) - TO_DAYS(DateCreation) < 30

Ça à l'air de fonctionner même si la solution de Pierrot est également à retenir.

Merci beaucoup à tous, je pense que l'on peux dire que mon problème est résolu !

Vous êtes trop fort les gars, continuez comme ça ! Bravo et merci beaucoup

Antho

#54 Re : Forum Général PHP » Inner join impossible » 02-12-2010 09:23:02

Bonjour,

Dans ce cas, comment faire alors ? Peut être

WHERE DateCreation LIKE '$DATE-%'

Qu'en pensez vous ?

Antho

#55 Re : Forum Général PHP » Inner join impossible » 02-12-2010 09:23:02

Bonjour,

Il s'agit d'un datetime, dans ce cas précis comment faire ? Pourquoi cela n'est pas opérant ? peut être que le like ne fonctionne pas sur un champ datetime ?

Cela fonctionne parfaitement si la requête ne contient pas le INNER JOIN

Merci beaucoup
Antho

#56 Re : Forum Général PHP » Inner join impossible » 02-12-2010 09:23:02

Bonjour,

Dans l'exemple, je n'ai pas fait d'inner join mais en gros la requête deviendrait :

SELECT CodeBarre,NumeroSerie,Etat,NumeroLivraison,ReferenceConstructeur
FROM produits
INNER JOIN produits_config
ON produits.ReferenceConstructeur = produits_config.PartNumber
WHERE DateCreation LIKE '%$DATE%' AND Etat = 'ESTOCK' ORDER BY id

Merci pour ta réponse :-)

#57 Forum Général PHP » Inner join impossible » 02-12-2010 09:23:02

Anthotill
Réponses : 13

Bonjour,

J'ai un soucis avec un code qui génère des fichiers xls :

<?php

include('connexion.php');    
// Connexion MySQL

// la variable qui va contenir les données CSV
$outputCsv = '';

// Nom du fichier final
$fileName = 'produit_non_vendu.csv';

$month = $_POST['choix_mois'];

$DATE = date('Y-'.$month.'');

$requete = "SELECT CodeBarre,NumeroSerie,Etat,NumeroLivraison,ReferenceConstructeur FROM produits WHERE DateCreation LIKE '%$DATE%' AND Etat = 'ESTOCK' ORDER BY id";
$sql = mysql_query($requete);
if(mysql_num_rows($sql) > 0)
{
    $i = 0;

    while($Row = mysql_fetch_assoc($sql))
    {
        $i++;

        // Si c'est la 1er boucle, on affiche le nom des champs pour avoir un titre pour chaque colonne
        if($i == 1)
        {
            foreach($Row as $clef => $valeur)
                $outputCsv .= trim($clef).';';

            $outputCsv = rtrim($outputCsv, ';');
            $outputCsv .= "\n";
        }

        // On parcours $Row et on ajout chaque valeur à cette ligne
        foreach($Row as $clef => $valeur)
            $outputCsv .= trim($valeur).';';

        // Suppression du ; qui traine à la fin
        $outputCsv = rtrim($outputCsv, ';');

        // Saut de ligne
        $outputCsv .= "\n";

    }

}
else
// retour sur la page daccueil
exit('<meta http-equiv="refresh" content="0; url=../index.php?resultats=aucun" />');

// Entêtes (headers) PHP qui vont bien pour la création d'un fichier Excel CSV
header("Content-disposition: attachment; filename=".$fileName);
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: application/vnd.ms-excel\n");
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");

echo $outputCsv;

mysql_close($db);

exit();
?>

Avec une requête simple, j'obtiens mon résultat mais si je met un INNER JOIN, cela ne fonctionne pas. Quelqu'un pourrait m'en expliquer la raison ?

Merci beaucoup pour vos réponses,
Antho

#58 Re : MySQL, PostgreSQL, etc... » Jointures Mysql » 08-10-2010 18:03:25

Bonjour Maljuna et pardon pour le délais de réponse...

Voici le résultat du show demandé:

Sur table ancien stock:

CREATE TABLE `ancien_stock` (\n `id` int(16) NOT NULL auto_increment,\n `code_barre` int(15) NOT NULL default '0',\n `num_serie` varchar(255) NOT NULL default '0',\n `modele` varchar(150) NOT NULL default '',\n `pn_formex` varchar(100) NOT NULL default '',\n `numero_bl` varchar(150) NOT NULL default '',\n `date_reception` datetime NOT NULL default '0000-00-00 00:00:00',\n `date_creation` datetime NOT NULL default '0000-00-00 00:00:00',\n `id_fournisseur` int(16) NOT NULL default '0',\n `grade` char(1) NOT NULL default '',\n `etat` enum('ESTOCK','HSTOCK','REPAR') NOT NULL default 'ESTOCK',\n `contenu` varchar(200) NOT NULL default '',\n `remarque` mediumtext NOT NULL,\n `photo` varchar(150) NOT NULL default '',\n `PVHT` int(11) NOT NULL default '0',\n `typologie` enum('OCCAS','RECON','NEUF') NOT NULL default 'OCCAS',\n `diff_config` mediumtext NOT NULL,\n `date_expedition` datetime NOT NULL default '0000-00-00 00:00:00',\n `numero_be` varchar(150) NOT NULL default '',\n `id_fournisseur_expedition` int(10) NOT NULL default '0',\n UNIQUE KEY `num_serie` (`num_serie`),\n KEY `id` (`id`,`num_serie`,`numero_bl`,`id_fournisseur`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='TABLE DES ANCIENS PRODUITS'

Sur table nouveau_stock:

CREATE TABLE `laptopservice_inventaire` (\n  `id` int(16) NOT NULL auto_increment,\n  `id_produit` int(15) NOT NULL default '0',\n  `etat` char(1) NOT NULL default '1',\n  KEY `id` (`id`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='INVENTAIRE'

Merci pour ton aide
Antho

#59 MySQL, PostgreSQL, etc... » Jointures Mysql » 08-10-2010 18:03:25

Anthotill
Réponses : 4

Bonjour à tous,

Je découvre les jointures Mysql, un vrai bonheur !

En fait, pour le moment, je n'utilise que INNER JOIN mais j'ai un souci.

Je voudrais comparer des résultats d'inventaires, j'ai dans la table "ancien_stock" les produits qui étaient en stocks avant l'ouverture de l'inventaire et dans l'autre table "nouveau_stock", les produits qui ont été effectivement comptés et donc ajoutés à cette table "nouveau_stock".

Comment puis-je comparer ces deux tables à la fin de l'inventaire pour afficher les écarts d'inventaires ? (exemple : le produit 125 était présent dans l'ancien stock mais pas dans le nouveau, merci de vérifier)

Si j'utilise INNER JOIN, je n'aurais aucun résultat puisque 125 n'a pas été trouvé dans le nouveau stock ...

Pourriez vous m'aidez sur ce point s'il vous plaît ?

Merci à tous,
Antho

#60 Re : Forum Général PHP » Boucle for et while imbriqué » 30-06-2010 08:19:11

Bonjour

Ha oui exact je ne maîtrise pas trop les tableaux de ce type mais je vais essayer en tentant au maximum de réduire la requête parce qu'il risque d'y avoir plusieurs milliers de résultats si je la fait sans conditions bien précises.

Merci bien.

PS: Si quelqu'un a une autre idée ... :-)

Antho

#61 Re : Forum Général PHP » Boucle for et while imbriqué » 30-06-2010 08:19:11

Bonjour

Merci pour ta réponse.

Il s'agit d'un récapitulatif de panier pour passer une commande, enfin plutôt établir un devis, je suis donc obligé de tout mettre sur la même page.

Est ce que quelqu'un a une idée à ce sujet ?

Merci
Antho

#62 Forum Général PHP » Boucle for et while imbriqué » 30-06-2010 08:19:11

Anthotill
Réponses : 5

Bonjour

Je souhaiterais savoir si il était possible, correct de faire une boucle while dans une boucle for (j'ai peur de boucler à l'infinie et planter mysql) ...

Je parcours un tableau avec for de cette façon :


for($i=0;$i<getSize();$i++)
{
$ret.='<tr><td width="70%" align="left" class="text_form_contact"><a class="link_noir" href="#">'.getLabelByPosition($i).'</a></td><td width="20%" class="text_form_contact">'.getPriceByPosition($i).' </td><td>€</td><td><a href="javascript:deleteByRef(\''.getRefByPosition($i).'\')" onclick="window.location.replace(\'panier_consulter.php\');"><img src="images/retire_panier.png" alt="panier" width="32" height="32" border="0"></a></td>';
}
 

mais je voudrais aller chercher dans ma base les informations de getLabelByPosition($i) qui est en fait l'ID du produit, un peu de cette façon :


for($i=0;$i<getSize();$i++)
{
$SQL_PRECISIONS = "SELECT modele FROM $TABLE_RECEP WHERE id = '".getLabelByPosition($i)."'";
$REQ_PRECISIONS = mysql_query($SQL_PRECISIONS) or die('Erreur SQL !<br SELECT>'.$SQL_PRECISIONS.'<br>'.mysql_error());
while($PRECISIONS = mysql_fetch_assoc($REQ_PRECISIONS))
{
$ret.='<tr><td width="70%" align="left" class="text_form_contact"><a class="link_noir" href="#">'.getLabelByPosition($i).' ('.$PRECISIONS['modele'].')</a></td><td width="20%" class="text_form_contact">'.getPriceByPosition($i).' </td><td>€</td><td><a href="javascript:deleteByRef(\''.getRefByPosition($i).'\')" onclick="window.location.replace(\'panier_consulter.php\');"><img src="images/retire_panier.png" alt="panier" width="32" height="32" border="0"></a></td>';
} // fin while
} // fin for
 

est ce que cela est raisonnable, y a t-il une autre solution pour ne pas charger mysql (j'avoue ne même pas avoir essayé par peur) ?

Merci à tous
Antho

#63 Re : Forum Général PHP » [Résolu] Import de Fichier. » 03-05-2010 08:24:32

Bonjour

Voila, en ajoutant

<?php
if(move_uploaded_file($_FILES['fichier']['tmp_name'], $fichier))
?>

Cela fonctionne (avec r pour lire le fichier wink)

Merci à tous

#64 Re : Forum Général PHP » [Résolu] Import de Fichier. » 03-05-2010 08:24:32

ManicoW a écrit :

Bonjour,

Désolé Alnoss et Jc, mais sur ce coup là, vous êtes bien a coté du problème smile

Mais le pense que Anthotill aussi un peu smile

Donc en résumé, le but c'est d'importer un csv dans une bdd. Donc en effet, on écris dans la bdd, pas dans un fichier.

Anthotill, tu dois comprendre que pour faire cet import, le fichier doit être sur le serveur qui execute le php.

Cela veut dire que soit tu as php sur ta propre machine, et dans ce cas la partie qui utilise les controles d'upload d'un fichier sont inutiles, il faut juste faire une lecture du fichier, soit tu fait un upload du fichier sur le serveur qui execute php (via un formulaire je suppose), et dans ce cas, il faut que tu finalise l'upload avant de pouvoir le lire (sur un serveur normalement configuré, tu ne peux pas lire le fichier temporaire directement).

Une fois le fichier uploadé correctement, tu pourra le lire, l'importer en bdd comme ton script veut le faire, et le supprimer si tu veux.

Alnoss, je ne sais pas comment tu fais un upload, mais si c'est a coup de fopen, heuuuu, je vais te demander de relire la doc php aussi smile

Et pour la doc des droits d'accès des groupes, heuuu, wai, on peut faire un upload sans la lire smile

@+

Merci beaucoup c'est toi qui a compris.

Je pensais que l'on pouvait le faire sans uploader le fichier, je vais donc uploader le fichier avant de le traiter.

Merci

#65 Re : Forum Général PHP » [Résolu] Import de Fichier. » 03-05-2010 08:24:32

Bonjour

Je ne veux pas uploader, je veux lire et insérer le fichier sans le déposer sur le FTP, est ce que cela te paraît plus clair ? Mon idée c'est de ne pas télécharger le fichier sur le serveur mais juste de le lire depuis le poste client est de l'enregistrer dans la base directement.

Donc si j'ai bien compris ton explication, j'ai besoin de lire le contenu du fichier local (A) et insérer directement les valeurs dans la base sans passé par le fameux fichier distant.

Merci beaucoup pour tes explications.

Antho

#66 Re : Forum Général PHP » [Résolu] Import de Fichier. » 03-05-2010 08:24:32

Alnoss a écrit :

as-tu lu la documentation ???

Si le fichier existe, et que tu veux écrire dedans, alors c'est R+ (et pas R)

Si le fichier existe, et que tu veux le vider avant d'écrire dedans, alors c'est W+

VAS LIRE LA DOC !!!

Ma demande n'a rien avoir avec écrire dans un fichier mais importer un fichier dans le but de l'insérer dans une BDD (donc uniquement le lire). Le problème est que lorsque j'importe via mon formulaire le fichier le script répond que le fichier est introuvable.

/* On ouvre le fichier à importer en lecture seulement */
 if (file_exists($fichier))
     $fp = fopen('$fichier', 'r');
 else
     { /* le fichier n'existe pas */
       echo "Fichier introuvable !<br>Importation stoppée.";
       exit();
     }

#67 Re : Forum Général PHP » [Résolu] Import de Fichier. » 03-05-2010 08:24:32

ManicoW a écrit :

Bonjour,

Première phrase des mesures de régulation...

Un nouveau message ne disant pas bonjour, ou insultant, dont le titre est tout en majuscules, pourra être supprimé sans justification (raisons non limitatives).

Premier et dernier avertissement.

@+

Désolé je ne peux pas le modifier. [NdM] Titre modifié

Alnoss a écrit :

Salut,

Ton fopen est en paramètre " R " alors qu'il devrait être en " x "+ --> documentation

Cela ne fonctionne pas, le paramètre R est pour ouvrir le fichier en lecture, même avec le X cela ne fonctionne pas désolé, avez vous une autre idée ?

Cordialement

#68 Forum Général PHP » [Résolu] Import de Fichier. » 03-05-2010 08:24:32

Anthotill
Réponses : 16

Bonjour

J'ai un soucis pour lequel je me tire les cheveux ! j'essaye d'uploader puis importer sous sql un fichier csv mais mon script me répond que le fichier n'existe pas, voici mon code :

if(isset($_POST['action']))
{
$fichier = basename($_FILES['fichier']['name']);
$taille_maxi = 2048000;
$taille = filesize($_FILES['fichier']['tmp_name']);
$extensions = array('.csv');
$extension = strrchr($_FILES['fichier']['name'], '.');

//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type csv...';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop volumineux pour être traité en une seule fois (2048Mo maximum) ...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier,
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
 /* On ouvre le fichier à importer en lecture seulement */
 if (file_exists($fichier))
     $fp = fopen('$fichier', 'r');
 else
     { /* le fichier n'existe pas */
       echo "Fichier introuvable !<br>Importation stoppée.";
       exit();
     }
     
    while (!feof($fp)) /* Et Hop on importe */
    { /* Tant qu'on n'atteint pas la fin du fichier */
       $ligne = fgets($fp,4096); /* On lit une ligne */  

       /* On récupére les champs séparés par ; dans liste*/
       $liste = explode( ";",$ligne);  
   
       /* On assigne les variables */
       $cat = $liste[0];
       $pn = $liste[1];
       $marque = $liste[2];
       $modele = $liste[3];
       $processeur = $liste[4];
       $config_memoire = $liste[5];
       $config_disquedur = $liste[6];
       $config_lecteur = $liste[7];
       $carte_graphique = $liste[8];
       $taille_ecran = $liste[9];
       $systeme = $liste[10];
       $pvuht = $liste[11];
       $date_ajout = $liste[12];
       /* Ajouter un nouvel enregistrement dans la table */
       $query = "INSERT IGNORE INTO z_partnumber_config (id,cat,pn,marque,modele,processeur,config_memoire,config_disquedur,config_lecteur,carte_graphique,taille_ecran,systeme,pvuht,date_ajout)
     VALUES('','$cat','$pn','$marque','$modele','$processeur','$config_memoire','$config_disquedur','$config_lecteur','$carte_graphique','$taille_ecran','$systeme','$pvuht',NOW())"
;
       $result= mysql_query($query);
 
       if(mysql_error())
        { /* Erreur dans la base de donnees */
           echo 'Erreur dans la base de données : '.mysql_error().'';
           echo '<br>Importation stoppée';
           exit();
        }

Est ce que quelqu'un peut m'éclairer sur la question, pourquoi le fichier est inexistant alors que je l'importe bien (j'ai essayé de changer le nom du fichier, le chmod des dossiers du script mais rien n'y fait) j'ai pourtant déjà utilisez ce script avant mais la il ne fonctionne plus :'(

Merci à vous, bonne journée

#69 Re : MySQL, PostgreSQL, etc... » Gestion d'erreur d'insertion » 17-04-2010 08:33:34

xTG a écrit :

Je ne sais pas ce que tu traites comme données donc je suis parti sur le principe que tu insérais plusieurs enregistrements.
Si une erreur survient lors du 5eme les suivants ne seront pas fait, mais les 4 premiers seront dans la bdd.

Ok je comprend, il faut donc que j'utilise REPLACE ou IGNORE suivant les cas d'après la doc sql. Merci pour votre aide mon problème est résolu

#70 Re : MySQL, PostgreSQL, etc... » Gestion d'erreur d'insertion » 17-04-2010 08:33:34

xTG a écrit :

Il y a des fonctions pour retourner les codes d'erreur. mysql_error() par exemple, mais il y en a aussi une pour le numéro de l'erreur.
Tu peux donc personnaliser les messages suivant leur numéro.
Cependant lors d'une erreur le traitement mysql s'arrête mais il n'efface pas ce qui a déjà été fait.

Bonjour

Je ne comprend pas trop ce que tu veux dire en disant "Cependant lors d'une erreur le traitement mysql s'arrête mais il n'efface pas ce qui a déjà été fait." ? A partir du moment ou mon champ est en unique, si mysql a rempli ce qu'il avait à remplir ce n'est pas grave (j'ai peut être mal compris) ?

Merci

#71 Re : MySQL, PostgreSQL, etc... » Gestion d'erreur d'insertion » 17-04-2010 08:33:34

Bonjour

J'aimerais que l'utilisateur ai un message comme quoi l'insertion s'est bien déroulée ou quelque chose qui remplace le message de base de mysql DUPLICATE ENTREY etc ...

Merci pour ta réponse
Antho

#72 MySQL, PostgreSQL, etc... » Gestion d'erreur d'insertion » 17-04-2010 08:33:34

Anthotill
Réponses : 6

Bonjour à tous

Je souhaiterais savoir si il est possible de gérer les erreurs d'insertion de donnée dans une BDD MYSQL, je m'explique:

J'ai un script qui envoi des fichier CSV (;) dans mysql, j'ai un champ qui en unique donc si l'on essaye d'importer deux fois la même valeur ce n'est pas possible mysql renvoi cette erreur : Duplicate entry 'ma valeur' for key 1 normal

Est ce qu'il est possible de dire en php quelque chose du genre if($mysql_error == 'Duplicate entry') { echo 'Vous ne pouvez pas envoyer deux fois la même valeur'; } else { echo mysql_error(); }

Merci pour vos réponses

Antho

#73 Re : Forum Général PHP » INSERTION DE PLUSIEURS CHAMPS HTML DANS UNE BDD » 21-03-2010 12:10:21

SAAD207 a écrit :

VOIR LE MESSAGE POSTE PAR MOI MEME SAAD207 IL YA LE FORMULAIRE LE SCRIPT POUR INSERER

Je ne vois pas ou ?

#74 Re : Forum Général PHP » INSERTION DE PLUSIEURS CHAMPS HTML DANS UNE BDD » 21-03-2010 12:10:21

xTG a écrit :

Il te faut faire trois requêtes update. ^^

Oui mais comment récupérer les 3 ID pour faire trois requête à la suite ?

Pied de page des forums

Propulsé par FluxBB