Vous n'êtes pas identifié(e).
Bonsoir,
Excuse moi, mais à mon sens la difficulté en php était dans le preg qui est un poil différent de celui en java, je t'ai donc donné la solution sur la partie difficile en PHP avec le point de départ en javascript. Concernant le DOM j'ai donné la méthodologie mais pas la réponse. Le plus simple et le plus rapide étant le preg via js et comme je l'ai montré ca ne prends que trois lignes. Pour le preg_match en php j'ai oublié un argument, désolé mais il était un peu tard quand j'ai post^^.
$x corresponds à la chaîne retournée par l'iframe et récupérée avec le innerHTML donné dans le code javascript:
var x=document.getElementById("resultat").innerHTML;
Merci, je vais essayer cela. Jc.
En passant, je cherche un moyen de retenir les 140 premiers caractères dans une phrase dont le mot qui arrive au 140e soit remplacé par trois petits points.
je cherche dans : http://ca3.php.net/manual/fr/function.strcspn.php et je ne trouve pas.
Il y a une différence entre DOM qui est en relation avec Javascript et le PHP...
Jc t'a donné une solution javascript et non PHP.
J'aurais souhaiter une solution PHP plutôt que javascript. Je suis à l'aise avec PHP mais pas javascript.
Merci quand même.
C'est apprécié d'avoir eu une réponse.
Merci pour vos effort JC.
J'ai tenté quelque chose comme cela :
<?php
$x = preg_match('(?:\d+\s?[./-]?)*personnes'm);
echo $x;
?>
Je comprends pas.
Je suis familier avec le CSS mais pas avec le DOM, c'est possible d'avoir un exemple qui peut s'appliquer à ce cas?
stp merci.
Bonjour,
Le nombre que vous cherchez à récupérer est passé en paramètre (cpop)? ou il est calculé via le script?
j'en sais rien.
c'est un script de :
http://www.populationmondiale.com/inserer.html
pour afficher ceci:
6 862 019 129 personnes dimanche 9 mai 2010 à 5 h 49 min et 42 s
(une idée comme ça: une fonction PHP qui permettrait d'aller chercher dans la source d'un site web une chaine de caractère... car le chiffre 6 862 019 129 est dans la source et via la fonction, il irait chercher comme un preg_match.
soit que la page serait mis en tampon et ainsi aller chercher la portion qui m'intéresse. cette page n'a que cette ligne en source.)
Bonjour à tous et à toutes!
J'ai ce URL qui donne la population mondiale :
<script src="http://www.populationmondiale.com/population/clockjs.php?aff=1&lang=fr&cpop=FFFFFF&size=14&cclock=C0C0C0" type="text/javascript"></script>
J'aimerais isoler seulement le nombre issu de ce URL par une expression régulière ou autre moyen.
ce petit script affiche ceci :
6 862 019 129 personnes dimanche 9 mai 2010 à 5 h 49 min et 42 s
J'aimerais afficher que ceci :
6 862 019 129
c'est possible et comment le faire?
Merci.
Mysql PDO
Bonjour à tous et à toutes!
Je viens de faire des lectures sur Programme Orienté Objet PDO
Le PDO ne fonctionne pas sur aucun des serveurs avec lesquels je fais affaires.
Peut-ton utiliser les requêtes préparées sans PDO?
EX:
<?php
$req = $bdd->prepare('SELECT nom, prix FROM jeux_video WHERE possesseur = :possesseur AND prix <= :prixmax');
$req->execute(array('possesseur' => $_GET['possesseur'], 'prixmax' => $_GET['prix_max']));
?>
Et comment je peux adapter les requettes?
Bonjour,
Peut être quelques restrictions dans php. La directive allow_url_fopen est t'elle a on ? Si non, en effet, ca bloque complétement cela.
Peut être aussi le fait que la cible soit une redirection. Il faut utiliser un fichier existant sans redirection pour valider ce genre de test.
Accessoirement, vu le nombre de piratage que je traite par semaine pour un include sans vérification de ce qui est inclus, je pense qu'il est dangereux d'estimer qu'on est en sécurité sans test.
De plus, le test n'est pas complet, puisqu'il ne vérifie pas la possibilité d'inclusion de fichiers internes (au hasard, un formulaire d'upload un peu mal sécurisé qui laisse uploader du texte avec n'importe quelle extension (meme jpg par exemple), un include pas trop regardant sur le paramètre, et un bon ptit include du .jpg, qui finalement contient du code php, qui sera executé. Sisi, ca fonctionne).
Bref, pour le bien des boites mails et des données en général (parce que la première chose que fait un pirate, c'est de balancer du spam, bien souvent, ou de contaminer d'autres postes), il faut sécuriser ses sites.
@+
Merci pour ton post.
On a la possibilité de sécuriser nos affaires, alors, aussi bien de le faire de toute manière.
Bonjour à vous tous et toutes,
Pour le fun, j'ai fait un test sur 3 serveurs avec configurations différentes, voici le résultat obtenu :
http://.../dest.php?page=http://www.google.fr/index.html
PHP4 sur Linux : Warning: main(http://www.google.fr/index.html) [function.main]: failed to open stream: no suitable wrapper could be found in ..
Sur Windows PHP5 : Même chose
Sur Linux PHP5 : Même chose
D'après mon observation, ça cherche un fichier qui s'appelle http://google.fr/index.html sur le serveur sur lequel je suis et non un lien externe. Peut-être une démo serait intéressante.
simplement avec ceci :
dest.php :
<?php
if($_GET[page]){
include($_GET['page']);
}
?>
Peut-etre que la fonction include est plus sécuritaire qu'on le pense. Je sais pas, c'est un questionnement suite à mes trois tests. Pour ma part, je vais quand même sécuriser puisqu'il est possible de le faire et c'est une bonne pratique.
Bien à vous!
Mon but n'est pas réèlement de placer une protection mais plutôt d'obliger un passage obligé à la page formulaire.
avec ceci :
echo '<tr>
<td>'.$affiche_commentaire["id"].'</td>
<td>'.$affiche_commentaire["pseudo"].'</td>
<td><a href="modifier.php?id='.$affiche_commentaire["id"].'&validonclick=J4k3kk4h3K3k4j">Modifier</a></td>
<td><a href="supprimer.php?id='.$affiche_commentaire["id"].'&validonclick=J4k3kk4h3K3k4j" onclick ="if(!confirm(\'Voulez-vous Supprimer\')) return false;">Supprimer</a></td>
</tr>';
}
J'ai pensé changer les deux liens pour deux FORM afin de pouvoir avoir une variable à tester dans la page destination.
Merci.
La façon que j'ai trouvé et qui fonctionne :
dans formulaire.php :
<td><a href="traitement.php?id='.$affiche_commentaire["id"].'&validonclick=J4k3kk4h3s3k4j">Modifier</a></td>
Et dans traitement.php :
if($_GET['validonclick'] != "J4k3kk4h3s3k4j") { die('access interdit!'); } else { }
C'est pour éviter les messages d'erreurs et de changer ou supprimer une donnée par accident si la personne va directement dans traitement.php.
Mais je dois utiliser $_GET, j'aurais aimé plutôt utiliser $_POST de façon à ne pas passer la variable par le url.
Vu que je ne passe pas par un FORM et un bouton, mais plutôt un lien; comment je peux envoyer une variable via un lien?
J'ai essayé avec <a name="validonclick" href="....">....</a> ceci ne fonctionne pas. Surement que quelqu'un a une idée.
oui
a+
Je précise :
Admettons que ce ne soit pas un formulaire FORM avec SUBMIT mais plutôt un lien Hyper-Text comme ceci dans le fichier formulaire.php :
formulaire.php :
<a name="proceder" href="traitement.php">rediriger vers</a>
traitement.php :
if (!isset($_POST['proceder'])) { die('Acces directe interdit!'); } else { echo '...'; }
Peut-être faire une function avec une variable globale?
Sans utiliser de session ni de cookie ni de balise input.
Bonjour à vous tous et toutes!
Peut-ton bloquer l'accès au fichier de traitement si la personne n'a pas passé par le fichier qui contient le formulaire ?
formulaire.php
traitement.php
Comme j'ai dit en réplique, je revois tout mon code et j'expérimente pour mieux assimiler et apprendre.
>>Faire un order by sur un champ qui n'est pas dans select 1)aucun interet 2)suis pas sur que ca fontionne.
>>aucun interet
disons que tu n'en vois pas, mais dans bien des cas, c'est utiles>>suis pas sur que ca fonctionne.
oui, cela fonctionne
@++
Oui, ça fonctionne!
Saluton,
Comme je l'ai déjà indiqué, notamment à dan4, la syntaxe du GROUP BY de MySQL est, pour le moins, laxiste.
Donc elle accepte de faire des regroupements qui n'ont pas grande signification du point de vue strict de l'algèbre relationnelle.
Comme de nombreux débutants ne sont pas trop regardant sur la conception et la normalisation de leurs bases de données, il ne sont guère plus cohérents quant à la syntaxe de leur requêtes, et l'on voit donc fleurir des SELECT * et des GROUP BY à en veux-tu en voilà, jusqu'au jour où.....
L'informatique permet aujourd'hui de faire à peu près n'importe quoi, ça se vérifie, hélas, au quotidien:
beaucoup d'à peu près, et autant de n'importe quoi.
Merci, je fais des tutoriaux tout en allant sur le site php.net pour les définitions et les exemples de ce site.
Une erreur que j'avais pas vu sur ton code initial:
$reqq = ("SELECT nocat, COUNT(nocat) AS nombre FROM produits GROUP BY nocat ORDER BY noart ASC");
Faire un order by sur un champ qui n'est pas dans select 1)aucun interet 2)suis pas sur que ca fontionne.
Concernant la protection de tes champs contre des injections sql c'est bien, mais j'en vois pas l'interêt si ton code n'est pas solide à la base (voir les conseils épinglés par alnoss). Sur un code solide, normalement pas la peine d'echapper tes variables si tu t'assures de leurs valeurs dans tes fonctions avant de faire un insert et de même sur un select. Par contre, si l'echappement est la seule précaution que tu prends, c'est sur qu'il vaut mieux le faire (même si parfois ca peut être inutile et meme sur un login/password !!) Enfin là n'est pas le sujet, pour revenir à ton code, si le champ NOM par exemple est enregistré échappé comme suit O\\\'Reilly si tu fait un like avec la valeur non echappée O'Reilly ta requête ne matchera pas, ou pas à tous les coups. Par exemple %Reilly% matchera et %'Reil% non. Etc...
Merci pour votre intervention, je vais étudier ça plus en profondeur. J'ai commencé d'ailleurs. Je fais quelques tutoriaux afin d'approfondir le sujet pour des pratiques.
Tiens, tiens, nous y voilà.
Ce n'est pas faute d'avoir mis en garde l'ami dan4 contre l'approximation lors d'un précédent topic.
Les bases de données et SQL, ne font pas bon ménage avec le laxisme et l'inconséquence.
Hors d'une modélisation robuste, qui requiert un investissement intellectuel a minima, point de salut.
Mais fasse à quelqu'un qui s'entête.....
Mr, j'ai admis et fait mes excuses.. alors, je ne souhaite pas m'étendre sur le sujet s.v.p. J'apprends et je souhaite continuer. Merci.
Avant de parler de requete, la définition de ta table n'est pas cohérente du tout : prix varchar(12) doit être défini par ex: prix decimal(8,2) :sinon traitements du champ impossible niveau ultérieure de tes données, etc...
Ensuite ta requete, bien que j'en comprenne le but recherché et qu'elle soit cohérente de ce point de vue, ne l'est pas du tout 1) pour les mêmes raisons que precedemment 2) syntaxe qui fonctionne (pas le temps de vérifier la tienne désolé) OR var like '%$myVar%' OR var2 like '%$myVar2%' etc... ou encore OR var like '%$myVar%' OR var2 like '%$myVar%'De plus si tu mets que des nombres dans une variable texte (ici varchar) et que tu fais une recherche avec like avec un nombre tu auras une erreur de générée dans le cas ou tu utilises %
Merci, je vais regarder ces points.
Pour l'affichage des données d'un champ, est-ce de cette façon qu'on doit faire?
Q1:
stripslashes(htmlspecialchars($data['xx'])) c'est seulement pour l'affichage?
Ex: echo stripslashes(htmlspecialchars($data['xx']));
C'est pour m'en assurer.
Q2:
mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['nocat']))) lorsque je fais un INSERT seulement?
Q3:
mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['nocat'])))
Cette requête ajoute des \\\ dans la base lorsque l'ont mets des apostrophe
lors de l'affichage Q1, les \\\ disparaissent sauf si je mets dans le URL les \\\,
ca va afficher la données sans toutefois les \\\.
Bien, c'est correct comme idée pour sécuriser les requêtes?
Merci pour votre réponse précédente.
Finalement, après avoir ajouté d'autres données dans la base, le résultat qui en sort n'est plus pertinent.
aucun message d'erreur.
Franchement, je ne sais plus quoi faire ni comment résoudre mon problème.
Si quelqu'un a une idée. Je suis à vous.
Tien, je viens de résoudre mon problème et tout fonctionne maintenant.
La solution en rapport avec mon problème :
J'ai ajouté ceci avant $searchercher :
chk($_GET['search']);
dont la fonction est :
function chk(&$var) {
if (!isset($var))
return NULL;
else
return $var;
}
Merci pour vos interventions.
Bonjour,
Outre la remarque de Pierrot qui est de rigueur concernant l'erreur de syntaxe de la requete affichée, ne connaissant pas la définition de tes variables nocat, noart, etc... et vu que que tu les teste avec le meme paramètre $searchercher, pense à vérifier tout de même que toutes les valeurs que pourra prendre $searchercher sont compatibles avec toutes les variables que tu testes sinon l'erreur est inevitable lors de l'execution de mysql_query().
Merci Jc
Ma base de donnée pourrait donner une idée de ce que est nocat etc :
--
-- Dumping data for table `produits`
--
INSERT INTO `produits` (`id`, `nocat`, `noart`, `article`, `taille`, `stock`, `prix`, `vendu`, `details`, `image`) VALUES
(1, 'test', 'test', 'test', 'test', 'test', 'testtest', '', 'test', 'test.jpg'),
(2, 'test', 'test2', 'test', 'test', 'test', 'testtest', '', 'test', 'test2.jpg'),
(3, 'ametis', 'ametis', 'ametis', 'ametis', 'ametis', 'ametis', '', 'ametis', 'ametis.jpg');
Et voici mes essais :
// $reqq1 = ("SELECT * FROM produits WHERE nocat OR noart OR article OR taille OR stock OR prix OR vendu OR details LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");
// $reqq1 = ("SELECT * FROM produits WHERE COALESCE(nocat, '') || '~' || COALESCE(noart, '') || COALESCE(article, '') || COALESCE(taille, '') || COALESCE(stock, '') || COALESCE(prix, '') || COALESCE(vendu, '') || COALESCE(details, '') LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");
// $reqq1 = ("SELECT * FROM produits WHERE WS_CONCAT(nocat, noart, article, taille, stock, prix, vendu, details) LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");
$reqq1 = ("SELECT id,MATCH (nocat,noart,article) AGAINST ('$searchercher') FROM produits ORDER BY noart ASC LIMIT $limit_start,$pagination");
En commentaire, ce sont mes essais qui ne fonctionne pas et celui qui n'est pas en commentaire ne fonctionne pas non plus.
Peut-être une restriction du fournisseur?
Localement, toutes ces requêtes fonctionnent. Mais pas chez mon fournisseur.
pas besoin de mysql_error pour voir que ca :
$reqq1 = ("SELECT * FROM produits WHERE nocat LIKE '%$searchercher%' details LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");
pas good
il manque un OR ou un AND
a++
Merci Pierro et mcAllan!
J'ai corrigé cette ligne et fait quelques tests avec différentes possibilité :
Si je met ça de même :
$reqq1 = ("SELECT * FROM produits WHERE nocat LIKE '%$searchercher%' OR noart LIKE '%$searchercher%' OR article LIKE '%$searchercher%' OR taille LIKE '%$searchercher%' OR stock LIKE '%$searchercher%' OR prix LIKE '%$searchercher%' OR vendu LIKE '%$searchercher%' OR details LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");
ça passe pas!
Mais si je mets seulement une condition avec un OR, là oui.
Peut-etre qu'il n'est pas possible de mettre plusieurs OR avec LIKE? je sais pas, je fais des recherches pour le savoir.
Merci de votre réponse. voici les détails :
mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
73 : while ($data = mysql_fetch_array($req1))
mysql_free_result($req1);
A cause de WHERE, si je supprime les OR ... suivants, ça supprime le problème mais je ne peux plus chercher dans les autres champs.
code complet :
chk($_GET['nocat']);
chk($_GET['search']);
if( isset($_GET['page']) && is_numeric($_GET['page']) )
$page = $_GET['page'];
else
$page = 1;
$pagination = 10;
$limit_start = ($page - 1) * $pagination;
$nb_total = mysql_query('SELECT COUNT(*) AS nb_total FROM produits');
$nb_total = mysql_fetch_array($nb_total);
$nb_total = $nb_total['nb_total'];
$nb_pages = ceil($nb_total / $pagination);
$reqq = ("SELECT nocat, COUNT(nocat) AS nombre FROM produits GROUP BY nocat ORDER BY noart ASC");
$req = mysql_query($reqq, $db);
echo '<div id="onright2">';
$i = 0;
echo "<table><tr>";
echo '<th style="width:130px;">Catégorie</th>';
echo '<th style="width:5px;">Qté</th>';
echo "</tr>";
while ($data = mysql_fetch_array($req))
{
$bgcolor = ($i++ & 1) ? '#E8E8B1' : '#D7D77C';
echo '<tr bgcolor='.$bgcolor.'>';
echo '<td><a href="' . $_SERVER['PHP_SELF'] . '?nocat=' . mysql_real_escape_string($data['nocat']) .'">'.mysql_real_escape_string($data['nocat']).'</a></td><td>'. mysql_real_escape_string($data['nombre']) .'</td>';
echo "</tr>";
}
echo "</tr></table>";
echo '</div>';
if($_GET['search'] != '' ) {
$searchercher = mysql_real_escape_string(stripcslashes(htmlspecialchars($_GET['search'],ENT_QUOTES)));
$reqq1 = ("SELECT * FROM produits WHERE nocat LIKE '%$searchercher%' details LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");
}
else {
$categorie = mysql_real_escape_string(stripcslashes(htmlspecialchars($_GET['nocat'],ENT_QUOTES)));
$reqq1 = ("SELECT * FROM produits WHERE nocat='".$categorie."' ORDER BY noart ASC LIMIT $limit_start,$pagination");
}
$req1 = mysql_query($reqq1, $db);
$i = 0;
echo "<b><br /><center>Produits présentement disponibles</center><br /></b>";
echo "<table><tr>";
echo "<th>Catégorie</th>";
echo "<th>No Art</th>";
echo "<th>Article</th>";
echo "<th>Taille</th>";
echo "<th>Inventaire</th>";
echo "<th>Prix</th>";
echo "<th>Vendu</th>";
echo "<th>Image</th>";
echo "</tr>";
while ($data = mysql_fetch_array($req1))
{
$bgcolor = ($i++ & 1) ? '#E8E8B1' : '#D7D77C';
echo '<tr bgcolor='.$bgcolor.'>';
echo '<td>' .mysql_real_escape_string($data['nocat']). '</td>';
echo '<td>' .mysql_real_escape_string($data['noart']). '</td>';
echo '<td>' .mysql_real_escape_string($data['article']). '</td>';
echo '<td>' .mysql_real_escape_string($data['taille']). '</td>';
echo '<td>' .mysql_real_escape_string($data['stock']). '</td>';
echo '<td style="background:yellow;border-width:0.1em; border-color:red; border-style:double;"><b>' . mysql_real_escape_string($data["prix"]) . '</b></td>';
echo '<td style="border-width:0.1em; border-color:red; border-style:double;">' . mysql_real_escape_string($data["vendu"]) . '</td>';
echo '<td>' .mysql_real_escape_string($data['image']). '</td>';
echo '</tr><tr>';
echo '<td colspan="8" style="background:#F0EBD8;border:1px inset #000000;text-align:left;"><b>Détails : </b>' .mysql_real_escape_string($data['details']). '</td>';
}
echo "</tr></table>";
mysql_free_result($req1);
echo '<p class="pagination">' . pagination($page, $nb_pages) . '</p>';
mysql_close();
?>
et le formulaire :
<form name="theForm" method="get">
<input type="text" name="search">
</form>
<a href="javascript:document.theForm.submit();">Rechercher</a>
note supplémentaire :
si je supprime la variable et je mets en dur, ça fonctionne :
$reqq1 = ("SELECT * FROM produits WHERE nocat LIKE '002' OR details LIKE '002' ORDER BY noart ASC LIMIT $limit_start,$pagination");
Mais J'ai vraiment besoin d'utiliser le formulaire.