je me résous à vous exposer mon problème qui me prend la tête depuis des mois, en vain. D'abord, le but de mon code est d'extraire un format de texte qui correspond à des photos publiées sur un forum (pour les trier ensuite).
J'utilise donc la fonction preg_match_all appliqué sur du texte extrait d'une base de données. Le masque marche déjà très bien. Sauf que je n'arrive pas du tout à extraire les lignes du tableau renvoyé dans le §matches du preg_match_all . J'obtiens ça dans cette variable :
Comment extraire et afficher ces 4 foutues lignes ? Ca doit pas être compliqué je pense (j'en vois déjà qui rigolent derrière leur clavier ) J'ai bien essayé de comprendre ce tableau de tableau renvoyé mais j'en peux plus là Déjà juste un print_r(§matches[0][0]); ne renvoit strictement rien . Pas prêt de faire la boucle .
Merci vraiment pour votre aide. Vous aurez toute ma reconnaissance éternelle
//sélection dans un tableau des posts avec des photos en format cphxxx
$tablo = mysql_query("SELECT post_text FROM `phpbb_posts` WHERE `post_text` LIKE '%cph%'");
$mask = '![0-9]+\.(?:jpeg|jpg|png|JPG)!';
//test sur la 1ère ligne du tablo
$row = mysql_fetch_array($tablo);
$txt = $row[0];
preg_match_all($mask, $txt, $out);
print_r($out[0][0]);
Salut skuti, merci de te pencher sur mon souci . J'utilise HAPedit, pas de risque de me tromper entre § et $ . J'ai mal retranscrit dans mon post le $matches
Désolé de la réponse tardive, j'ai eu des soucis de connections et de mot de passe. Alors que ce soit avec un mysql_fetch_array ou mysql_fetch_row, j'ai en retour :
Array
array(1) {
[0]=>
array(0) {
}
}
array(0) {
}
NULL
Pourtant, en testant mon preg_match-all avec un texte contenant 3 photos sur ce site, j’obtiens exactement ce que je veux :
avec un while pas de souci ça me sort parfaitement bien toutes les publications qui contiennent une photo . Je teste pour l'instant le preg_match sur la première ligne avant d'aller plus loin.
Le seul truc que je te conseille c'est d'utiliser preg_match() au lieu de preg_match_all car tu n'as pas un texte et de faire un var_dump(); de $txt juste avant ton preg_match pour vérifier que ton $txt est correcte. Si c'est vide, c'est à voir plus haut et potentiellement faire une condition pour ne rien faire si $txt est vide.
Alors en faisant un var_dump sur mon $txt ça m'affiche bien la 1ère publication de ma base sql qui contient une photo publiée :
$txt = "sortie en septembre, une photo [img]https://monsite.fr/upload/cph20190212194309.jpg[/img]"
Mais la grande question : est-ce bien une chaine de texte ??? car si je vais plus loin avec juste preg_match appliqué à $txt, je n'ai plus rien comme si je travaillais une variable que n'est pas une chaine. Je ne pourrai pas échapper au preg_match_all, car une publication peut contenir plusieurs photos que je devrais récupérer avec le masque. Je ne comprends vraiment plus rien.
EDIT : un strlen sur txt renvoie bien le nb de caractères. C'est donc bien une chaine que le preg_match n'évalue pas
Est-ce que tu passes qu'une fois ici, ou il y a une boucle qui fait que tu passes plusieurs fois ici ?
Est-ce que tu peux mettre tout ton code ? J'ai testé et j'ai bien une string.
S'il y a une boucle qui fait que tu executes plusieurs fois la requête avec des paramètres différents, il ce pourrait qu'a un moment dans cette boucle $txt soit null mais si tu fais un print_r();die; tu ne verras que la première itération.
// extraction de tous les publications contenant des photos
$tablo = mysql_query("SELECT post_text FROM phpbb_posts WHERE post_text LIKE '%cph%'");
$mask = '![0-9]+\.(?:jpeg|jpg|png|JPG)!';
//test sur la 1ère ligne du tablo pour le moment
$row = mysql_fetch_row($tablo);
$txt = $row[0]; //en cas de test //var_dump($txt);die;
preg_match($mask,$txt,$out); //en cas de test //var_dump($out);die; echo $out;
@skuti : mauvais copier-collé semble-t-il. je redonne le code complet :
<?php
//ACCES A LA BASE
$bddserver = "serveur";
$bddlogin = "log";
$bddpassword = "mdp";
$bdd = "mabase";
$liendb = mysql_connect($bddserver, $bddlogin, $bddpassword) or
die("Impossible de se connecter : " . mysql_error());
mysql_select_db ($bdd);
//sélection dans un tableau des posts avec des photos en format cph123456789
$tablo = mysql_query("SELECT post_text FROM phpbb_posts WHERE post_text LIKE '%cph%'");
$mask = '![0-9]+\.(?:jpeg|jpg|png|JPG)!';
//POUR LINSTANT, test uniquement sur la 1ère ligne du tablo
$row = mysql_fetch_row($tablo);
$txt = $row[0];
preg_match($mask,$txt,$out);
echo $out;
mysql_close();
mysql_free_result($tablo);
?>
Forza GT
Lire le tableau généré par un preg_match_all
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Aucun problème, que des solutions...
Salut skuti, merci de te pencher sur mon souci . J'utilise HAPedit, pas de risque de me tromper entre § et $ . J'ai mal retranscrit dans mon post le $matches
Forza GT
Forza GT
Forza GT
Forza GT
Forza GT
Forza GT
Forza GT