php-general Digest 3 Sep 2007 08:30:37 -0000 Issue 4997

Topics (messages 261620 through 261629):

Re: for loop inside a switch
        261620 by: Jonesy
        261628 by: M. Sokolewicz

Re: mail() takes too much time
        261621 by: Gavin M. Roy
        261623 by: brian

Re: Pragmatically changing a "Record Number"
        261622 by: brian
        261625 by: tedd
        261626 by: Chris

Hey [EMAIL PROTECTED] ;)
        261624 by: Jose Ramirez

Re: what is my dns ip address
        261627 by: Olav Mørkrid

Create a matrix gallery
        261629 by: Humani Power

Administrivia:

To subscribe to the digest, e-mail:
        [EMAIL PROTECTED]

To unsubscribe from the digest, e-mail:
        [EMAIL PROTECTED]

To post to the list, e-mail:
        [EMAIL PROTECTED]


----------------------------------------------------------------------
--- Begin Message ---
On Fri, 31 Aug 2007 22:05:11 -0700, jekillen wrote:

>You can run a switch inside a for loop and when a case is matched set 
>a variable to true.
>the break statement will break out of the switch, then inside the 
>iteration code, after the switch block, test the variable for true. If 
>it is true the use another break instruction.
>That should break out of the loop altogether at the end on that 
>particular iteration.

Ahhhh....  The *GoTo* solution.  :-)

Jonesy

--- End Message ---
--- Begin Message ---
jekillen wrote:
On Aug 31, 2007, at 6:26 PM, Robert Cummings wrote:

On Fri, 2007-08-31 at 15:56 -0700, Dan wrote:
Sanjeev is right.  You're thinking about the problem backwards.  You're
trying to build a Switch inside a loop. Remember, if you ever have to do some operating multiple times you're using a forloop, then the thing that
you want to repeat(switch case) is INSIDE the for loop.

Not always true. Sometimes once you've made the switch it applies to all
members of a data array. In which case switching on every iteration is a
waste of processor since you can check a single time outside the loop.

Cheers,
Rob.
--

You can run a switch inside a for loop and when a case is matched set a variable to true. the break statement will break out of the switch, then inside the iteration code, after the switch block, test the variable for true. If it is true the use another break instruction. That should break out of the loop altogether at the end on that particular iteration.
like so:
for($i = 0; $i < somevalue; $i++)
    {
       $bar = false;
switch($anotherValue[$i]) // /this assumes you are looping through an indexed array
               { case 'foo':
                 $bar = true
                 //other code;
                 break;
                 default;
                 // $bar is not set  to true so the loop continues
               }
             if($bar == true)
               {
                 break;
               }
           /* instead of the default line in the switch statement
            else
              {
                continue;
              }
           */
     }

Hope this is useful.
Jeff K

why not just:
for($i = 0; $i < somevalue; $i++)
{
   $bar = false;
switch($anotherValue[$i]) // /this assumes you are looping through an indexed array
   {
      case 'foo':
         //other code;
         break(2);

      default;
         // anything really
   }

   // more crap

   continue;
}

--- End Message ---
--- Begin Message ---
You might want to consider a few things:

Queueing your email in a database table and sending it out in a
separate process.

or

Finding a mail daemon that will queue quickly for you and not send
directly on adding to the queue.

I use the first of the two options and it works quite well for us.

Gavin

On 9/2/07, shiplu <[EMAIL PROTECTED]> wrote:
> Hello everybody,
>
> I am maintaining a social network site.
> there each user can send other mail.
> these mails are not real mail rather message entry to database.
> I added a new feature so that every message is sent to me (admin/webmaster)
> via email (real e-mail).
> I used mail function.
> THis is a simple mail function. all it does sends mail with the message as
> the mail body to my address.
> Thats it. no extra complexity.
> But the problem is I got the mail very late. after 4-6 hours. That is  huge
> time difference.
> I shouldn't take more than 3-5 mins.
> Do you know the reason?
> my mail code is here,
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> $headers  = "MIME-Version: 1.0\r\n";
> $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
> list($myname,$mydomain)=preg_split("/\@/",$myemail,2);
> $headers .= "From: $myname <$myemail>\r\n";
> mail("[EMAIL PROTECTED]", "message from XXX to YYY", $message_content,
> $headers);
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> --
> shout at http://shiplu.awardspace.com/
>
> Available for Hire/Contract/Full Time
>

--- End Message ---
--- Begin Message ---
shiplu wrote:
Hello everybody,

I am maintaining a social network site.
there each user can send other mail.
these mails are not real mail rather message entry to database.
I added a new feature so that every message is sent to me (admin/webmaster)
via email (real e-mail).
I used mail function.
THis is a simple mail function. all it does sends mail with the message as
the mail body to my address.
Thats it. no extra complexity.
But the problem is I got the mail very late. after 4-6 hours. That is  huge
time difference.
I shouldn't take more than 3-5 mins.
Do you know the reason?
my mail code is here,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
list($myname,$mydomain)=preg_split("/\@/",$myemail,2);
$headers .= "From: $myname <$myemail>\r\n";
mail("[EMAIL PROTECTED]", "message from XXX to YYY", $message_content,
$headers);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


This might be an issue with your MTA (Sendmail, Postfix, etc.). Have you tried sending a mail directly (ie. via shell)?

Also, if it's not required that you receive a notice of each post immediately, perhaps you could instead have some process (on your computer) check the database periodically. If you go this route and you have an auto_increment id field, you should save the largest so that your script only has to retrieve messages with id > last_id.

brian

--- End Message ---
--- Begin Message ---
tedd wrote:
Hi to the original poster:

Snip -- a lot of discussion

Use the following code at your own peril.

$dbQuery = "ALTER TABLE $dbtable ";
$dbQuery .= "DROP id, ";
$dbQuery .= "ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT,";
$dbQuery .= "AUTO_INCREMENT = 1";
$result = mysql_query($dbQuery) or die("Could not renumber dB $dbQuery" . mysql_error());

The reason for not wanting to care about the auto_increment id is that it is something that the database uses and really should not be changed. If you want to have a sequential record number, then add that field and alter it as you will, but leave the internal workings of database alone.

However, if you wish not to understand how all that works, then use the code above -- it will renumber your auto_increment id leaving no gaps.


At the risk of turning this into a truly marathon thread ...

I don't think altering the id is necessary at all. The solution the OP seems to be looking for is to (as Graham has said) count off the rows as they are being printed using a variable. Using a table for clarity:

<?php
$sql = 'SELECT id, title FROM foo';
$result = mysql_query($sql);
$count = 0;
while (++$count && ($row = $result->fethchRow()))
{
?>
 <tr>
  <td>
    row #<?= $count ?>
  </td>
  <td>
    <a href="foo.php?id=<?= $row['id'] ?>"><?= $row['title'] ?></a>
  </td>
 </tr>
<?php
}

It seems that all this is about is displaying a rowcount. The ids can be anything at all and it'll still look spiffy.

brian

--- End Message ---
--- Begin Message ---
At 6:14 PM -0400 9/2/07, brian wrote:
tedd wrote:
Hi to the original poster:

Snip -- a lot of discussion

Use the following code at your own peril.

$dbQuery = "ALTER TABLE $dbtable ";
$dbQuery .= "DROP id, ";
$dbQuery .= "ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT,";
$dbQuery .= "AUTO_INCREMENT = 1";
$result = mysql_query($dbQuery) or die("Could not renumber dB $dbQuery" . mysql_error());

The reason for not wanting to care about the auto_increment id is that it is something that the database uses and really should not be changed. If you want to have a sequential record number, then add that field and alter it as you will, but leave the internal workings of database alone.

However, if you wish not to understand how all that works, then use the code above -- it will renumber your auto_increment id leaving no gaps.


At the risk of turning this into a truly marathon thread ...

I don't think altering the id is necessary at all. The solution the OP seems to be looking for is to (as Graham has said) count off the rows as they are being printed using a variable. Using a table for clarity:

<?php
$sql = 'SELECT id, title FROM foo';
$result = mysql_query($sql);
$count = 0;
while (++$count && ($row = $result->fethchRow()))
{
?>
 <tr>
  <td>
    row #<?= $count ?>
  </td>
  <td>
    <a href="foo.php?id=<?= $row['id'] ?>"><?= $row['title'] ?></a>
  </td>
 </tr>
<?php
}

It seems that all this is about is displaying a rowcount. The ids can be anything at all and it'll still look spiffy.

brian


How is that contrary to what I said?

Cheers,

tedd
--
-------
http://sperling.com  http://ancientstones.com  http://earthstones.com

--- End Message ---
--- Begin Message ---
tedd wrote:
At 6:14 PM -0400 9/2/07, brian wrote:
tedd wrote:
Hi to the original poster:

Snip -- a lot of discussion

Use the following code at your own peril.

$dbQuery = "ALTER TABLE $dbtable ";
$dbQuery .= "DROP id, ";
$dbQuery .= "ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT,";
$dbQuery .= "AUTO_INCREMENT = 1";
$result = mysql_query($dbQuery) or die("Could not renumber dB $dbQuery" . mysql_error());

The reason for not wanting to care about the auto_increment id is that it is something that the database uses and really should not be changed. If you want to have a sequential record number, then add that field and alter it as you will, but leave the internal workings of database alone.

However, if you wish not to understand how all that works, then use the code above -- it will renumber your auto_increment id leaving no gaps.


At the risk of turning this into a truly marathon thread ...

I don't think altering the id is necessary at all. The solution the OP seems to be looking for is to (as Graham has said) count off the rows as they are being printed using a variable. Using a table for clarity:

<?php
$sql = 'SELECT id, title FROM foo';
$result = mysql_query($sql);
$count = 0;
while (++$count && ($row = $result->fethchRow()))
{
?>
 <tr>
  <td>
    row #<?= $count ?>
  </td>
  <td>
    <a href="foo.php?id=<?= $row['id'] ?>"><?= $row['title'] ?></a>
  </td>
 </tr>
<?php
}

It seems that all this is about is displaying a rowcount. The ids can be anything at all and it'll still look spiffy.

brian


How is that contrary to what I said?

You are actually changing the id's in the database.

Brian's example is making up an id to display (much like the excel row numbers) rather than actually changing the id in the database.

--
Postgresql & php tutorials
http://www.designmagick.com/

--- End Message ---
--- Begin Message ---


http://www.hi5.com/register/XlneT?inviteId=A_90991ca_0C09xs.2txp151622090

Jose

--- End Message ---
--- Begin Message ---
the source of the problem is gethostbyaddr(). it seems to have a 4,5
second timeout, so some lookups time out after 4,5 seconds, while most
of them are resolved in < 0.1 second; a radically performance
difference.

the user written gethostbyaddr_timeout() on the gethostbyaddr man page
overcomes this problem, but unlike gethostbyaddr() requires a specific
dns address, which seems unavailable from php at the moment.

parsing nslookup and similar things seems like a workaround. where
does one propose a dns_ip() function which returns the system's
default dns ip address?

or better yet, to add a timeout value to gethostbyaddr(), or in some
other way ensure that lookups return quickly, whether they have an
answer or not.

--- End Message ---
--- Begin Message ---
hi list. I wonder if anyone can help me with this.
i have a database with the file name of several images stored in a
filesystem, and I want to create a table containing the image results of a
query.

this is my code

<?php
include_once("../../../connection/connection.php");
?>
<html>
<head>
<title>Image Gallery</title>
</head>

<table border=1>
    <?php
//get the thumbsnails
$getpic=mysql_query("select * from rsiis_images")
 or die(mysql_error());


     while ($rows=mysql_fetch_assoc($getpic))
     {
      extract ($rows);
      echo "<tr>";
     echo "<td><a href=editing_image.php?pic=".$rows['image_id']."><img
src=".$ImageThumb.$rows['image_id'].".jpg></td>";
       }
?>

</tr>

</table>
</body>
</html>

With this code, I am able to see the thumb images with their respective link
ok, but if I have a query with 40 results, I will have a big row of images.
____________________________________________________

|pic1 | pic2 | pic3 | pic4 | pic5 | pic6 | pic7 | pic8 | pic9 | pic10 |
______________________________________________________


What I want to to do is insert a new <td> after showing 5 thumb images, and
continue with the next picture on the next row.
something like this
__________________________
|pic1 | pic2 | pic3 | pic4 | pic5 |
__________________________
|pic6 | pic7 | pic8 | pic9 | pic10 |
__________________________
|pic11 | pic12 | pic13 |
__________________



Thanks in advance.
Yamil

--- End Message ---

Reply via email to