message en cas de requête ne retournant rien

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : message en cas de requête ne retournant rien

Re: message en cas de requête ne retournant rien

par kayorn » 18 mars 2014, 11:31

Je suis d'accord avec toi, sauf que perso, je dois gérer la charte graphique, adapter le html en fonction.
Créer les css, intégrer des sliders (modifier les javascripts et leur charte graphique...) rendre le script SEO friendly... je dois tester sur tous les navigateurs (y compris cette m.... d'IE7); et, parallèlement, proposer une recherche par nom et compétence qui tienne la route et qui à terme devra être gérée par le client. (update, drop etc).

J'ai réussi à faire l'insertion correctement formatée des fiches dans la base, le formulaire de recherche , les pages d''affichage par nom, par compétence..
Mais au fur et à mesure, les pb surgissent les uns après les autres:
- bien contrôler les champs avant insertion
- comment éviter les doublons à l'insert.
- afficher des messages d'erreurs en cas de saisie foireuse...
- formater les affichages... j'en passe sa,s parler de la sécurité...

Au total, des heures et des heures de boulot en plus, des attentes de réponses dans les forums avec des solutions complètements différentes de mes scripts ("tu devrais passer par PDo, c'est l'avenir, autant t'y mettre de suite... Et allez, repart avec PDo..
J'arrête là, tu vois ce que je veux dire.

En gros c'est comme si je voulais en une seule fois, créer un site en strict avec un sans faute sur le validator, avec une charte graphique entièrement gérée par CSS, tout ça en étant débutant.

Bon, je vais quand même essayer ton développement parce que j'aime progresser.

merci à toi

Re: message en cas de requête ne retournant rien

par moogli » 18 mars 2014, 10:21

il y a pas mal d'info dans beaucoup de site et la plupart donne le même type d'exemple
<?php
$sql = 'select * from matable';
$ret = mysql_query($sql);
if ($ret === false) {
    echo 'Erreur SQL : <br />' . mysql_error() . '<br />Avec la requête SQL : ' . $sql;
}
else {
    // traitement des données
    // mysql_fetch_assoc_, fetch_row etc etc
    while ($data = mysql_fetch_assoc($ret)) {
        // affichage ou autre
    }
}
ensuite la documentation de php est très fournit en exemple (et en français la plupart du temps). Elle est la premièer source d'info (regarde une doc java c'est pas pareil ;))

Pour décrire mon code
- on crée une variable avec la requête dedans (pour l'utiliser aussi dans le message d'erreur au cas où)
- on effectue la requête avec mysql_query. cette fonction retourne false lorsqu'il y a une erreur
- je regarde s'il y a une erreur ou pas. en cas d'erreur j'affiche le message (c'est une gestion basique qui n'est pas top pour utiliser "en production", on peu faire autrement mais ce n'est pas le but ici)
- Si la requête c'est bien passée il faut que je traite tous mes résultats.
Pour cela il y a les fonctions mysql_fetch_* qui vont (comme l'indique la doc) retournée une ligne de résultat ET faire avancer le pointeur de résultat.
pointeur de résultat : késako ? c'est l'index "interne" du mécanisme qui te fournit les lignes "résultats" de la requête. Il est incrémenté à chaque appel d'une des fonction fectch.
Lorsqu'il n'y a pas plus de résultat a lire ces fonction retourne "false"
c'est pour cela que l'on utilise la boucle while (tant que).
while ($data = mysql_fetch_assoc($ret))
la première chose qui est faite c'est l'utilisation de la fonction mysql_fetch_assoc dont le résultat et mis dans $data.
Ensuite php évalue la condition du while, en clair est ce que $data vaut false ou pas (je t'invite a regarder dans la doc les différences ente les type et ce qui est considéré comme faux).
pour info un test clair et non ambigue serait
while (($data = mysql_fetch_assoc($ret)) !== false) mais bon php le fait de lui même et cela devient redondant mais au moins c'est clair quand tu le lis.
a partir de la $data est un tableau php indexé avec les nom des colonnes (si tu as une colonne toto la valeur sera dans $data['toto']).

Dans mon exemple de code, avec la requête count, tu est certain de n'avoir qu'une seule ligne de résultat du coup tu te passe du while et execute directement $data = mysql_fetch_assoc($ret);
avec le jeux des alias sql tu aura un $data['nb'] qui contient le nombre de ligne qui satisfont ta requête.

dernière chose : oui développeur c'est un métier, mais comme beaucoup il y a des choses que l'on peux faire soit même.
Perso j'ai commencé comme toi en tant qu'amateur avec des site comme http://www.lephpfacile.com et http://www.phpdebutant.org, dont les tutos n'ont pas beaucoup évolué, c'est en lisant et testant que j'y suis arrivé.
Il y a des embûches, plus que d'autre si tu n'as pas forcément d'affinité avec le dev, mais les forums sont la pour t'aider.

Si tu fouille sur le forum tu verra que des sujets sur "comment faire une requete sql avec php" il y en a des myriades et pourtant on répond encore ave, la plupart du temps, des exemple perso adapté.

si tu veux arriver a tes fin cela ve te demander du temps et des efforts, tous comme quand je joue les mécanicien sur ma voiture et que met trois fois plus de temps qu'un "vrai mécano" (sans parler des outils que je me fou dans la tronche et autre joyeuseté). Mais au final j'y arrive et j'apprend a chaque fois (me faut moins d'une heure pour a vidange il m'a fallut 2h la première fois).

bref je pense que tu as compris le principe, je ne vais pas te dissuader de faire appelle à un "confrère" mais tu cherche à aller vite fait le (comme pour l'appel à un garagiste je ne dit pas que cela sera ien fait je dit que cela devrait aller vite ;) ).

@+

Re: message en cas de requête ne retournant rien

par kayorn » 18 mars 2014, 09:04

Il est curieux de constater à quel point les sites proposant des tutos aux débutants sont loin d'évaluer les carences de ceux qui essayent de les suivre.
Leurs scripts sont incompréhensibles pour qui voudrait accéder par étapes. Je ne parle pas des scripts qui plantent parce que les variables ne sont pas déclarées...

Il est quasiment impossible pour un débutant, d'éviter le copier/coller pour mettre en pratique dans le cadre d'un projet personnel, d'où les erreurs d'interprétation, les mélanges de scripts piqués par- ci par là, pour finalement laisser tomber, à bout de force et de patience... oui , c'est un métier!
Quand on poste pour se débloquer, on nous donne un lien vers la solution mais, par exemple en ce qui me concerne c'est tout bête : même si je comprends en quoi consiste mysql num rowc, à quel endroit l'insérer dans mon script ? ça parait simple... pour qui a de la pratique. Pas impossible bien sûr, mais long et décourageant.

Bref, je pense que je vais demander les services d'un pro pour me terminer l'annuaire. Je dois le proposer au client en étant sûr d'offrir un boulot sans défaut. Je n'ai pas trop le temps de m'éterniser sur l'apprentissage.

Merci pour vos réponses et le boulot que vous faites.

Re: message en cas de requête ne retournant rien

par xTG » 17 mars 2014, 21:52

Malheureusement ce serait toujours la même catégorie qui serait utilisée.
Alors on a décidé de faire plusieurs catégorie pour que les posteurs jouent à pile ou face sur où poster. =P~

Re: message en cas de requête ne retournant rien

par kayorn » 17 mars 2014, 21:22

Vous devriez créer sous-forum : PHP neuneu, juste en haut de la liste ;)

Ok je ferais comme vous dites... dès demain!

merci et bonsoir!

Re: message en cas de requête ne retournant rien

par moogli » 17 mars 2014, 20:12

salut,

nou avons un adminqui a une signature fort à propo
Quand tout le reste a échoué, lisez le mode d'emploi...
http://fr2.php.net/mysql_num_rows


:mrgreen: :mrgreen: :mrgreen:

sinon je suis plus adepte du select count(1) FROM avocats WHERE nom LIKE '%nom%' qui va te retourner le nombre de tuples qui satisfont le prédicat et donc si supérieurs a zéro tu fait ton select normal.

Pour info ton code est ouvert au injection SQL.
utilise mysql_real_escape_string pour éviter cela.

dernière chose, l'extension mysql est vouée a disparaitre tu peux la remplacer par mysqli (plus d'infos dans la doc).

@+

message en cas de requête ne retournant rien

par kayorn » 17 mars 2014, 19:47

Bonjour,
J'ai un script minimaliste que j'aimerais achever. (J'ai essayé un milliard de scripts qui foirent tous. en général les tutos sont faits pour ceux qui n'en ont pas besoin :D

Si le nom n'existe pas, je veux avertir le visiteurs.

Le script suivant ne fonctionne que s'il y a quelqu'un au bout..

Code : Tout sélectionner

$nom = $_GET['nom']; $sql =("SELECT * FROM avocats WHERE nom LIKE '%".$nom."%' "); // la requête (mysql_query) $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); while ($data = mysql_fetch_array($req)) { //affichage include ("affichage.php"); }
J'ai essayé mais je cale...