Forum Moderators: coopster

Message Too Old, No Replies

preg split unsure why not functioning.

         

jason_m

3:37 pm on May 14, 2010 (gmt 0)

10+ Year Member



i am attempting to split a comma delimited tag field within my blog table. for some reason it is not splitting.

a sample tags would be:
mytag1,mytag2
ThisOnlyHas1,

<?php $host="myhost"; // Host name 
$username="myuser"; // Mysql username
$password="mypassword"; // Mysql password
$db_name="mydb"; // Database name
$tbl_name="myblog"; // Table name
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

if (!is_null($id)){
$sql = 'SELECT * FROM ' .$tbl_name. ' order by id desc limit ' .(($id -1)*3). ',3;';
}elseif (!is_null($perma_string)){
$sql = 'SELECT * FROM ' .$tbl_name. ' where `title` like \'%' .$perma_string. '%\';';
}elseif (!is_null($tag_string)){
$sql = 'SELECT * FROM ' .$tbl_name. ' where `tag` like \'%' .$tag_string. '%\';';
}


$result = mysql_query($sql) or die(mysql_error());
$num_rows = mysql_num_rows($result);
if ($num_rows==0){
$view_db .='<tr><th colspan="4" align="left"><p id="ES">&#248;</p>';
$view_db .='</th></tr>';
$view_db .='<tr><th colspan="2" align="left">';
}else{

while ($row = mysql_fetch_array($result))
{

$view_db .='<tr><th colspan="2" align="left"><a class="title_link" target="_blank" href="?perma_link=';

$title_link='';
$my_split=preg_split('/\s/',$row['title']);
if (sizeof($my_split)>0){

for($i=0;$i<=sizeof($my_split);$i+=1){
if($i>0 && $i<sizeof($my_split)){

$title_link.='+'.$my_split[$i];
}else{
$title_link.=$my_split[$i];
}
}
}else{
$title_link=$row['title'];
}

$tag_link='';
$sPattern = '/\s*/m';
$sReplace = '';
$tags_fetch=$row['tag'];
$tags_cleaned=preg_replace( $sPattern, $sReplace, $tags_fetch);
$my_split2=preg_split('/\,/',$tags_cleaned); //this should be splitting it


if (sizeof($my_split2)>0){

for($i=0;$i<=sizeof($my_split2);$i+=1){
/*echo 'my split:';
echo '<br>';
echo $my_split2[i];
echo '<br>';*/
if($i<sizeof($my_split2)-1){
/*echo $tags_cleaned;
echo '<br>';
echo 'if:<br>';
echo 'i: '.$i.'<br>';
echo 'size : '.sizeof($my_split2).'<br>';
echo 'split i :'.$my_split2[i];
echo '<br>';*/
$tag_link.='<a class="blog" href="http://www.abcdef.com/blog/index.php?tag='.$my_split2[i].'">'.$my_split2[i].'</a>, ';

}else{
/*echo $tags_cleaned;
echo '<br>';
echo 'else:<br>';
echo 'i: '.$i.'<br>';
echo 'size : '.sizeof($my_split2).'<br>';
echo 'split i :'.$my_split2[i];
echo '<br>';*/
$tag_link.='<a class="blog" href="http://www.abcdef.com/blog/index.php?tag='.$my_split2[i].'">'.$my_split2[i].'</a>';

}

}
}else{

}



$view_db .= $title_link;
$view_db .= '">';
$view_db .= $row['title'];
$view_db .= '</a>';
$view_db .= '</th><th style="height:100%!important" colspan="2" align="right">';
$view_db .=$row['postdate'];
$view_db .= ' ';
$view_db .=$row['posttime'];
$view_db .= '</th></tr><tr><th class="body_text" colspan="4" align="left">';//<p style="color:#585858">';
$view_db .=$row['body'];
$view_db .='</tr>';

$view_db .='<tr><th colspan="4" align="left">By:<a href="mailto:';
$view_db .=$row['user'];
$view_db .='@abcdef.com">';
$view_db .=$row['user'];
$view_db .='</a></th></tr>';

$view_db .='<tr><th colspan="4" align="left">Tags:';
$view_db .=$tag_link;
$view_db .='</th></tr>';

$view_db .='<tr><th colspan="2" align="left">';
$view_db .='<tr><th colspan="4" align="center"><hr></th></tr>';

$crap_catch=$row['title'].$row['postdate'].$row['posttime'].$row['user'].$row['body'];
$counter=$counter+1;
}
}

$view_db .='<tr>';

if (!is_null($perma_string)){
$title_link='';
$my_split=preg_split('/\s/',$perma_string);

if (sizeof($my_split)>0){

for($i=0;$i<=sizeof($my_split);$i+=1){
if($i>0 && $i<sizeof($my_split)){

$title_link.='+'.$my_split[$i];
}else{
$title_link.=$my_split[$i];
}
}
}


$view_db.='<th colspan="2" align="left">';
$view_db .='<a name="fb_share" type="button_count" share_url="http://www.abcdef.com/index.php?perma_link='.$title_link.'"></a> ';
$view_db .='<a class="DiggThisButton DiggCompact" href="http://digg.com/submit?url=http://www.abcdef.com/index.php?perma_link='.$title_link.'"></a>';
$view_db .='</th></tr><tr>';
}

$view_db.='<th colspan="2" align="left">';

if (!is_null($perma_string)){
$view_db .='<a href="http://www.abcedf.com/blog/index.php?id=' .($id+1). '"/>&#9668;Back</a></th><th colspan="2" align="right">';
}else{
$view_db .='<a href="http://www.abcdef.com/blog/index.php?id=' .($id+1). '"/>&#9668;Previous</a></th><th colspan="2" align="right">';
}

if ($id > 1){
$view_db .='<a href="http://www.abcdef.com/blog/index.php?id=' .($id-1). '"/>Next&#9658</a>';
}
$view_db .='</th></tr></table>';
echo ($view_db);


?>

Readie

3:44 pm on May 14, 2010 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



OK, first of all you don't need to use preg_split here, using regex is unecessary for this script, and is just slowing it down.

preg_split('/\s/', $some_variable);
Can be changed to
explode(" ", $some_variable);

preg_split('/\,/', $some_variable);
Can be changed to
explode(",", $some_variable);

---

Also:

/\,/

Commas are just commas in regular expressions, they do not need to be escaped with a backslash.

Furthermore, it may not be working how you expect because you may need the multi-line flag:

/,/m

jason_m

3:54 pm on May 14, 2010 (gmt 0)

10+ Year Member



using your method i get the following output:
//NOTE: same output with '/,/m'

my split:

tag1,tag2
else:
i: 0
size : 1
split i :
my split:

tag1,tag2
else:
i: 1
size : 1
split i :
my split:

using the following script:

$tags_fetch=$row['tag'];
$tags_cleaned=preg_replace( $sPattern, $sReplace, $tags_fetch);
//$my_split2=preg_split('/,/',$tags_cleaned);
$my_split2=explode('/,/', $tags_cleaned);

for($i=0;$i<=sizeof($my_split2);$i+=1){
echo 'my split:';
echo '<br>';
echo $my_split2[i];
echo '<br>';
if($i<sizeof($my_split2)-1){
echo $tags_cleaned;
echo '<br>';
echo 'if:<br>';
echo 'i: '.$i.'<br>';
echo 'size : '.sizeof($my_split2).'<br>';
echo 'split i :'.$my_split2[i];
echo '<br>';


}else{
echo $tags_cleaned;
echo '<br>';
echo 'else:<br>';
echo 'i: '.$i.'<br>';
echo 'size : '.sizeof($my_split2).'<br>';
echo 'split i :'.$my_split2[i];
echo '<br>';


}

}

jason_m

3:55 pm on May 14, 2010 (gmt 0)

10+ Year Member



edit*:

my split:

tag1,tag2
else:
i: 0
size : 1
split i :
my split:

tag1,tag2
else:
i: 1
size : 1
split i :

Readie

3:55 pm on May 14, 2010 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



$my_split2=explode('/,/', $tags_cleaned); 

Explode doesn't use regular expressions. Change this to

$my_split2=explode(',', $tags_cleaned); 

jason_m

4:00 pm on May 14, 2010 (gmt 0)

10+ Year Member



$my_split2=explode(',', $tags_cleaned);


still no luck with this. output is coming in as my_split2[0]=blank, my_split[1]=full,tags,

jason_m

4:00 pm on May 14, 2010 (gmt 0)

10+ Year Member



thank you for taking the time to help me with this.

jason_m

5:55 pm on May 14, 2010 (gmt 0)

10+ Year Member



issue fixed.

please note above:
echo 'split i :'.$my_split2[i]; 

should be:
echo 'split i :'.$my_split2[[b]$i[/b]];

Readie

6:00 pm on May 14, 2010 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



Ahh, that would explain it. If you do the following at the top of your PHP file it'll tell you if you're trying to call an undefined variable, like was happening there:

<?php

ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL | E_STRICT);

Just make sure to remove them, or comment them out before your site goes live.

jason_m

6:52 pm on May 14, 2010 (gmt 0)

10+ Year Member



i'm not exactly too professional about it. i do all my edits live :|.
i do not think my site gets much traffic, but establishing a visit tracker is next!

writing to a text file blah blah.

but thanks! thats a really useful tip!