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 :

Optimisation du script


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Octobre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Octobre 2013
    Messages : 31
    Par défaut Optimisation du script
    Bonjour,

    Je me suis lancé dans un script mais je dois reconnaître que je n'ai pas le niveau.
    Alors je serais reconnaissant à une bonne âme de me dire comment m'en sortir.
    J'ai déjà eu des réponse me renvoyant vers des exemples mais j'avoue que malgré mes efforts, je n'ai pas réussi à les adapter à mon travail.

    Vous allez rire.
    Je ne trouve pas de modèle à adapter à mon script tout simple qui consiste à insérer une fiche dans la base de données et ensuite l'afficher dans une page existante à partir d'une recherche par nom et une autre par compétence.
    J'insère et j'affiche sans problèmes.
    Par contre:
    - Je n'arrive pas à empêcher les doublons à l'insert.(je dois pouvoir enregistrer 2 personnes du même nom mais avec des prénoms différents.)
    - Dans l'affichage des résultats de la recherche, je n'affiche rien en cas de recherche sur un nom qui n'existe pas. j'obtiens une page blanche en cas d’échec ou l'affichage de la fiche en cas de succès.
    - Si par exemple, il n'y a pas d'adresse_3, je voudrais que l'affichage ne laisse pas un ligne vide mais passe à la suivant directement.

    J'ai fait des tas d'essais en fonction des recherches que j'ai pu faire mais je n'ai fait que m'embrouiller et finalement. Je n'ai plus le temps de m'astreindre à l'autoformation. (on verra ça plus tard)
    Si quelqu'un peut me débloquer sans m'envoyer vers des tutos avant que je ne sois obligé d'aller demander un devis sur codeur.com

    merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 240
    Par défaut
    Bonjour, un aperçu de ce que tu as déjà fait et de table nous aiderait .

    bah voilà ce que je te propose:
    1 - Je n'arrive pas à empêcher les doublons à l'insert.
    Je suppose que ta fiche comporte les propriétés de ta table dans le BDD. Tu n'a qu'a fait une vérification sur le nom et le prenom
    2- Dans l'affichage des résultats de la recherche, je n'affiche rien en cas de recherche sur un nom qui n'existe pas. j'obtiens une page blanche en cas d’échec ou l'affichage de la fiche en cas de succès.

    il te suffit de mettre des conditions avant l'affichage
    si la requête a échoué tu affiche vide, bon ça ne sert à rien il faut mettre un message pour informer le user
    si nom n'existe pas on exécute le script
    sinon on affiche les info.

  3. #3
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Le concept d'auto-formation, quand on voit ce type de forum, il n'y a plus grand-chose d'auto ? si ? J'appellerais plutôt ça de la formation collaborative.
    Ceci dit, ça ne veut pas dire qu'on va coder à ta place, pour ça, effectivement, ton devis chez codeurs.com (ça existe au fait ?);
    Tu es débutant, tu ne sais pas par quel bout le prendre, mais tu veux apprendre et comprendre ? Tu es au bon endroit.
    Quant au fait d'être pressé, faut pas rêver, on ne peut pas apprendre et être pressés. "Salut, je connais 3 mots de suédois, vous pouvez m'aider à écrire une rédaction pour mardi en suédois ?" ben non...

    Evite de faire un nouveau fil à chaque question. Restons sur celui là.

    1) Oublie le code pour l'instant.

    Montre nous ta base de données, enfin sa structure, ses index tout ça quoi. Une base de données saine, c'est primordial avant de faire une ligne de code.
    On va donc bosser d'abord exclusivement sur ton phpmyadmin.

    Tu stockes des avocats apparemment ?
    Peux-tu nous montrer la structure de tes tables ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Octobre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Octobre 2013
    Messages : 31
    Par défaut
    Bonsoir et désolé

    pour le temps de réaction, j'étais pas là...
    Pour la syntaxe, J'ai essayé avec pdo mais j'ai systématiquement la même erreur (quel que soit le script) même quand je n'y modifie rien... un peu comme si ça venait d'ovh.
    Mais c'est autre chose...

    En préambule et pour répondre à vos interrogations légitimes, je ne suis pas pressé de rendre le script mais surtout ne pas me planter quand je vais donner la réponse au Bâtonnier. Si je dis que je peux faire, je dois faire et bien le faire.
    Sinon, je le compte dans le devis et je passe par https://emploi.developpez.com

    Ensuite, je prends le temps qu'il faut pour le fabriquer ou attendre qu'un pro me le fabrique. Or ça fait 10 jours que j'essaye des tas de scripts et que je commence à fatiguer. D'où mes larmes quand j'écris.

    La bdd
    Code sql : 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
    --
    -- Structure de la table `avocats`
    --
     
    CREATE TABLE IF NOT EXISTS `avocats` (
      `id` int(11) NOT NULL,
      `nom` char(30) NOT NULL,
      `prenom` char(30) NOT NULL,
      `competence` varchar(250) NOT NULL,
      `adresse_1` varchar(250) NOT NULL,
      `adresse_2` varchar(250) NOT NULL,
      `adresse_3` varchar(250) NOT NULL,
      `code` varchar(10) NOT NULL,
      `ville` varchar(70) NOT NULL,
      `tel` varchar(20) NOT NULL,
      `fax` varchar(20) NOT NULL,
      `email` varchar(70) NOT NULL,
      `web` varchar(250) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
     
    --

    Le script d'insertion
    Code php : 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
    <?php
    // connexion base
    $base = mysql_connect ('.....', 'xxxxx', 'wwwwww');
    mysql_select_db ('quel con je fais ', $base) ;
    ?>
     
    <?php
    //  variables  déclarées
    $nom = ($_GET['nom']);
    $prenom = ($_GET['prenom']);
    $competence = ($_GET['competence']) ;
    $adresse_1 = ($_GET['adresse_1']);
    $adresse_2 = ($_GET['adresse_2']);
    $adresse_3 = ($_GET['adresse_3']);
    $tel = ($_GET['tel']);
    $fax = ($_GET['fax']);
    $ville = ($_GET['ville']);
    $code = ($_GET['code']);
    $email = ($_GET['email']);
    $web = ($_GET['web']);
     
    // ok
     
    $req = "INSERT INTO avocats (id,nom,prenom,competence,adresse_1,adresse_2,adresse_3,tel,fax,code,ville,email,web) VALUES('','$nom','$prenom','$competence','$adresse_1','$adresse_2','$adresse_3','$teL','$fax','$code','$ville','$email','$web')";
     
    mysql_query($req) or die ('Erreur '.mysql_errno().' : ' . mysql_error()); 
     
     
    ?>


    Le script affichage
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ///$sql =("SELECT * FROM avocats WHERE nom =    '". $_GET['nom']."'");<?php 
    $nom = $_GET['nom'];
    $sql =("SELECT * FROM avocats WHERE nom LIKE  '%$nom%' ");
     
     
    //  la requête 
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    // on va scanner tous les tuples un par un
    while ($data = mysql_fetch_array($req))
    {
    // affichage  résultats
    include ("affichage.php");
    }

  5. #5
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    edit :
    Quels sont les indexes sur ta table ? Notamment, comment définis-tu un doublon ?
    Le plus logique, ça serait de mettre une clé primaire sur ton id (peut-être avec un auto-increment), mais surtout, un index d'unicité sur 3 champs : nom + prenom + mail par exemple.
    En effet, c'est ce qui va définir ce qu'est un doublon pour toi. Attention, cette unicité impliquerait que chaque avocat ait un mail obligatoire. Il me semble que si tu te cantonnes à nom et prénom, tu auras un vrai problème un jour avec 2 Michel Dupond. L'idéal, c'est nom + prénom + date de naissance. Un truc que tout le monde a de façon unique.
    Ensuite, il te faut indexer (index simple) nom, ville, et tout ce qui peut servir dans une recherche... Ca, c'est pour les performances.

    Quand tu vas faire une insertion, il va maintenant détecter un doublon, et l'interdire; Mais si tu ne souhaites pas qu'il plante en cas de doublon, il te faudra ajouter ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //pour l'instant, je ne t'embête pas avec les risques d'injection sql, ou ta façon de te connecter, on verra ça après, même si c'est important
    $req = 'INSERT IGNORE INTO avocats (id,nom,prenom) VALUES("","'.$_POST['nom'].'","'.$_POST['prenom'].'"';


    Peut-être la suite est-elle hors-sujet, je n'ai pas bien compris comment tu alimentes ta base :


    Maintenant, il te faut un formulaire, pour saisir les données.
    Appelons la page form.html s'il n'y a pas de PHP dedans.
    Mets tout ça dans une architecture de page HTML.
    Faut que tu bosses un peu ça, on trouve ça partout sur le net...
    Voilà déjà le cadre minimum à un formulaire :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <form method="post" action="traitement.php">
    <!-- pas de méthode get, tu ne vas pas passer toutes ces choses par l'url !-->
    <!-- traitement.php, c'est le fichier qui va recevoir et traiter les données reçues-->
       NOM <input type="text" name="nom" />
       <!--Pour tous les trous, tu te débrouilles -->
     
     
       <input type="submit" name="valider" value="OK" /><br/>
    </form>
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  6. #6
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Octobre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Octobre 2013
    Messages : 31
    Par défaut
    J'avais mis id en auto-increment mais j'ai dû faire la modif au moment ou je tâtonnais pour mettre un index sur nom/prenom. Comme ça couillait, j'ai supprimé le double index et j'ai oublié de rétablir l'auto-increment.

    Je veux pouvoir enregistrer des avocats ayant le même nom avec des prénoms différents (mari et femme avec les 3 gosses par exemple

    Je comprends la possibilité de doublonner avec 2 avocats de mêmes noms et prénoms mais rassure-toi, il doit y en avoir environ 110 sur la Corse-du Sud et je ne pense que cela soit possible.

    Pour alimenter la base, j'ai un formulaire, je n'ai pas voulu le mettre pour ne pas charger le post:
    le voici quand-même. Je le mets sous forme de liste pour pouvoir ensuite lui appliquer des css et ne pas m'emm.. avec les problèmes de flux
    Je ne fais plus de tableaux depuis longtemps non plus. Get c'était pour surveiller si tous les champs partaient correctement, je le vire après.

    (Je ne me suis pas encore occupé du contrôle avant insertion tant le sujet semble vaste: champs vide, adresse correctement formatée... )

    Code html : 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
    <form name="inscription" method="get" action="insertion.php">
        <ul>Entrez votre nom :
            <li><label>Nom:</label><input type="text" name="nom"/></li>
            <li><label>Prénom:</label><input type="text" name="prenom"/></li>
            <li><label>Compétence </label><input type="text" name="competence"/></li>
            <li><label>Adresse: </label><input type="text" name="adresse_1"/></li>
            <li><label>Adresse 2 </label><input type="text" name="adresse_2"/></li>
            <li><label>Adresse 3 </label><input type="text" name="adresse_3"/></li>
            <li><label>Tél: </label><input type="text" name="tel"/></li>
            <li><label>Fax: </label><input type="text" name="fax"/></li>
            <li><label>Code postal: </label><input type="text" name="code"/></li>
            <li><label>Ville: </label><input type="text" name="ville"/></li>
            <li><label>Email: </label><input type="text" name="email"/></li>
            <li><label>Site internet: </label><input type="text" name="web"/></li>
            <li><input type="submit" name="valider" value="OK"></li>
            <li><input type="reset" value="effacer"/></li>
    </form>

    le fichier afichage.php avec des essais pour les adresses pas trop concluants (à parfaire)

    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
    <?php
    $data['adresse_1'] = UCWORDS (strtolower ($data['adresse_1'])) ;
    $data['adresse_2'] = UCWORDS (strtolower($data['adresse_2'])) ;
    $data['adresse_3'] = UCWORDS (strtolower($data['adresse_3'])) ;
    ?>
    <link href="../style_affichage.css" rel="stylesheet" type="text/css" />
    <ul>
    <!-- Nom et Prenom -->
    <li class="nom">
    <?php echo UCWORDS($data['nom']); ?> &nbsp;<?php echo UCWORDS($data['prenom']); ?></li>
    <!-- Compétences -->
    	<li class="competence"><?php echo  UCWORDS($data['competence']); ?></li>
    <p class="adresse">Adresse:</p>
    <!-- adresses  --> 
    <li class="telFax">
    <?php  $adresses = ($data['adresse_1'] ."<br>". $data['adresse_2']);  echo UCWORDS($adresses); ?> </li>
    <!-- code - ville  --> 
    <li ><?php  $localisation = ($data['code'] ."  ". $data['ville']); echo UCWORDS($localisation); ?> </li>
    <li ><?php echo   $data['adresse_3']; ?> </li
    ><!-- Tel et Fax -->    
     <li class="telfax">Tél: &nbsp;<?php echo FormatTel($data['tel']); ?> &nbsp;- &nbsp;Fax: &nbsp;<?php echo FormatTel($data['fax']); ?></li>
    <!-- mail  --> 
    <li class="mail"><a href="mailto: <?php ($data['email']); ?>" class="liens"> <?php echo $data['email']; ?></a></li>
    <!-- web  --> 
    <li class="web"><a href="http://<?php echo ($data['web']); ?>"> <?php echo ($data['web']); ?></a></li>
    </ul>
    Alors c'est un peu normal qu'en partant de zéro, je commence à sortir les avirons pour aller plus loin. Sans compter les autres boulots en cours et les chartes graphiques etc... (je me régale quand même...)

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Supprime immédiatement ton nom d'utilisateur et ton mot de passe du code que tu viens de poster, et modifie-les immédiatement sur ton serveur. Il ne faut jamais poster ce genre de choses en public, surtout quand tu mets plus haut que ton site est sur OVH, et que tu donne ensuite le nom du serveur de BDD!

    Et si jamais tu utilises cette même combinaison de login et de mot de passe ailleurs, il faut changer les mots de passe immédiatement!!

    Si un modérateur pouvait éditer le code et supprimer les informations de la BDD, ce serait bien aussi.

  8. #8
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Octobre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Octobre 2013
    Messages : 31
    Par défaut
    c'est bon j'ai modifié le passe sur OVH
    je vieillis, c'est la première fois que j'oublie...

    merci pour ton alerte!

  9. #9
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bon, ben maintenant, peux-tu appliquer tous les conseils que je préconise et me dire si ça va mieux ?
    post, pas get, index d'unicité sur double colonne - puisque tu ne veux pas triple, insert IGNORE (pour pas que ça plante quand tu tentes une insertion de doublon, pour autant ça n'insèrera pas de doublon)...
    Avec ça, aucune chance que tu aies un doublon !
    Teste et reviens vers nous quand c'est nickel.
    Le contrôle de saisie, l'accès aux bases (qui règlera par la même occasion la prévention contre les injections sql) on verra en dernier, quand tout le reste fonctionnera comme tu veux.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  10. #10
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Octobre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Octobre 2013
    Messages : 31
    Par défaut
    Merci, je m'y mets et je poste avec les url pour vérif en ligne contrôle en ligne .

    Parallèlement à tout ça (mais aucune urgence), je ne parviens pas à m'expliquer l'erreur suivante quand je teste des scripts avec pdo.
    j'ai posté un peu partout sans réponse.
    j'ai collé le script d'une fonction pour un flux rss sans y modifier quoi que ce soit et voilà ce que j'obtiens:
    (J'ai bien sûr essayé en renseignant les identifiants et ça ne dépasse jamais le stade de l'erreur de syntaxe).
    Je l'ai déjà rencontrée lorsque je testait des scripts provenant de tutos avec connexion du même genre (Dieu sait combien..)

    Parse error: syntax error, unexpected '{' in /homez.136/barreauaz/www/mettre_a_jour_rss.php on line 14
    La fonction sans aucune modif

    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
    <?php
     function update_fluxRSS() {
    	$xml = '<?xml version="1.0" encoding="UTF-8"?>';
    	$xml .= '<rss version="2.0">';
    	$xml.= '<channel>';
    	$xml .='<title>Maintenances et Incidents</title>';
    	$xml .='<link>http://127.0.0.1:8080/my%20portable%20files/FEEDZF.xml</link>';
    	$xml .='<description>Ceci est un flux de test.</description>';
     
    $index_selection = 0;
    $limitation = 25;
     
    try {
    	$bdd = new PDO('mysql:host=localhost;dbname=flux_rss', 'root', '');
    }
    catch(Exception $e) {die('Erreur : '.$e->getMessage());}
    $reponse = $bdd->prepare('SELECT * FROM flux_rss ORDER BY pubDate DESC LIMIT :index_selection, :limitation') or die(print_r($bdd->errorInfo()));
    $reponse->bindParam('index_selection', $index_selection, PDO::PARAM_INT);
    $reponse->bindParam('limitation', $limitation, PDO::PARAM_INT);
    $reponse->execute();
     
    while ($donnees = $reponse->fetch()){
    	$xml .= '<item>';
    	$xml .= '<title>'.stripcslashes($donnees['TITLE']).'</title>';
    	$xml .='<link>'.$donnees['LINK'].'</link>';
    	$xml .='<pubDate>'.(date("D, d M Y H:i:s O", strtotime($donnees['PUBDATE']))).'</pubDate>';
    	$xml .= '<description>'.stripcslashes($donnees['DESCRIPTION']).'</description>';
    	$xml .= '</item>';
    }
     
    $reponse->closeCursor();
     
    $xml .= '</channel>';
    $xml .= '</rss>';
     
    $fp = fopen("FEEDZF.xml", 'w+');
     
    fputs($fp, $xml);
     
    fclose($fp);
     
    }
    ?>

  11. #11
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Et le code modifié ça donne quoi ?

    Le script que tu montres ici est correct syntaxiquement.

  12. #12
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Octobre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Octobre 2013
    Messages : 31
    Par défaut la suite
    Avant tout la capture de la bdd, si c'est pas bon ici...

    Nom : bdd.JPG
Affichages : 89
Taille : 22,5 Ko

    Bonjour, entre-temps, j'ai avancé un peu:

    La BDD:
    Code sql : 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
     
    CREATE TABLE IF NOT EXISTS `avocats` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nom` char(30) NOT NULL,
      `prenom` char(30) NOT NULL,
      `competence` varchar(250) NOT NULL,
      `adresse_1` varchar(250) NOT NULL,
      `adresse_2` varchar(250) NOT NULL,
      `adresse_3` varchar(250) NOT NULL,
      `code` varchar(10) NOT NULL,
      `ville` varchar(70) NOT NULL,
      `tel` varchar(20) NOT NULL,
      `fax` varchar(20) NOT NULL,
      `email` varchar(70) NOT NULL,
      `web` varchar(250) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `nom_index` (`nom`,`prenom`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

    Le script d'insert par contre... je ne sais plus si c'est IGNORE ou l'INDEX qui empêche de saisir 2 fois nom-prénom mais ça fonctionne (pas de message mais ça n'insère pas).
    J'aimerais, tant qu'à faire, formater les chaînes avant insertion plutôt qu'à l'affichage, mais ça ne semble pas fonctionner... peut-être que je ne le place pas où il faudrait?

    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
     
    <?php
    // on teste si les variables du formulaire sont bien déclarées
    if (isset($_GET) && isset($_GET['nom']) && isset($_GET['prenom']) && isset($_GET['competence']) && isset($_GET['adresse_1']) && isset($_GET['adresse_2']) && isset($_GET['adresse_3']) && isset($_GET['tel']) && isset($_GET['fax']) && isset($_GET['ville']) && isset($_GET['code']) && isset($_GET['email']) && isset($_GET['web']))
    {
    $_GET['nom']= UCWORDS($_GET['nom']);
    $_GET['prenom']= UCWORDS($_GET['prenom']);
    $_GET['competence']= UCWORDS($_GET['competence']);
    $_GET['adresse_1']= ucfirst($_GET['adresse_1']);
    $_GET['adresse_2']= ucfirst($_GET['adresse_2']);
    $_GET['adresse_3']= ucfirst($_GET['adresse_3']);
    $_GET['ville']= ucfirst($_GET['ville']);
    $_GET['web']= strtolower($_GET['web']);
    $_GET['email']= strtolower($_GET['email']);
     
    $req = 'INSERT IGNORE INTO avocats (id,nom,prenom,competence,adresse_1,adresse_2,adresse_3,tel,fax,code,ville,email,web) VALUES("",  "'.$_GET['nom'].'", "'.$_GET['prenom'].'" , "'.$_GET['competence'].'" , "'.$_GET['adresse_1'].'" , "'.$_GET['adresse_2'].'" , "'.$_GET['adresse_3'].'" , "'.$_GET['tel'].'" , "'.$_GET['fax'].'" , "'.$_GET['code'].'" ,"'.$_GET['ville'].'" , "'.$_GET['email'].'" ,"'.$_GET['web'].'") ';
     
    mysql_query($req) or die ('Erreur '.mysql_errno().' : ' . mysql_error()); 	
    }
     
    ?>

  13. #13
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Octobre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Octobre 2013
    Messages : 31
    Par défaut
    Bon ben tant pis, merci quand même

  14. #14
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    C'est bien un INDEX qui t'assure de l'unicité des tes données et c'est IGNORE qui évite de se manger une erreur.
    J'ai repris ton code en sécurisant les données avant enregistrement en base de données :
    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
    <?php
     
    // on teste si les variables du formulaire sont bien déclarées
    if (isset($_GET['nom'], $_GET['prenom'], $_GET['competence'], $_GET['adresse_1'], $_GET['adresse_2'], $_GET['adresse_3'], $_GET['tel'], $_GET['fax'], $_GET['ville'], $_GET['code'], $_GET['email'], $_GET['web']))
    {
        $data   = array();
        $format =
            function($key, $func = '') use (&$data)
            {
                $v      = ($func) ? $func($_GET[$key]) : $_GET[$key];
                $data[] = "'".mysql_real_escape_string($v)."'";
            };
     
        $format('nom', 'ucwords');
        $format('prenom', 'ucwords');
        $format('competence', 'ucwords');
        $format('adresse_1', 'ucfirst');
        $format('adresse_2', 'ucfirst');
        $format('adresse_3', 'ucfirst');
        $format('tel');
        $format('fax');
        $format('code');
        $format('ville', 'ucfirst');
        $format('web', 'strtolower');
        $format('email', 'strtolower');
     
        $sql = 'INSERT IGNORE INTO avocats (nom, prenom, competence, adresse_1, adresse_2, adresse_3, tel, fax, code, ville, email, web) VALUES ('.implode(', ', $data).') ';
        mysql_query($sql) or die ('Erreur '.mysql_errno().' : ' . mysql_error());     
    }
    Quelques remarques :
    - On utilise quasiment jamais la méthode GET pour la soumission d'un formulaire, on lui préfère la méthode POST (le GET est plutôt réservé à la gestion de l'URL)
    - les fonctions mysql_xxx sont obsolètes et vont disparaître de PHP très prochainement : passe à PDO dès maintenant ou aux fonctions mysqli_xxx
    - n'oublie pas de ne jamais mais alors jamais faire confiance aux données reçues d'un utilisateur, tu dois toujours t'assurer que ce qui est envoyé correspond à ce qui est attendu et dans tous les cas toujours tout échapper

  15. #15
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Octobre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Octobre 2013
    Messages : 31
    Par défaut
    Bonjour et merci pour ta réponse

    je ne reconnais plus le script! il va falloir que je my mette.

    Pour get, j'ai pris l'habitude de le laisser pour vérifier si tout passe dans l'url et je l'enlève ensuite.

    J'ai essayé pdo mais j'avais des problèmes sur ovh, il parait qu'il faut modifier php.ini.
    Ca me faisait trop de complications concentrées sur une petite durée.
    Je verrais tout ça à tête reposée

    encore merci!

Discussions similaires

  1. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 18h59
  2. Optimiser vos scripts
    Par djibril dans le forum Langage
    Réponses: 33
    Dernier message: 11/06/2009, 16h10
  3. [Oracle] Optimisation de script
    Par johnkro dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 12/07/2006, 10h33
  4. [Débutant] Accélérer et optimiser ses scripts PHP
    Par Metallic-84s dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2006, 12h37
  5. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/08/2004, 08h33

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