Everybody! This is important. In a few days, these forums will be moving over to using the totally sweet Discourse platform. To ensure this migration happens smoothly with no loss of content, these forums are currently in a read-only mode. I do apologize for the inconvenience.

There is never a good time to turn the forums off for an extended period of time, but I promise the new forums will be a billion times better. I'm pretty sure of it.

See you all on the other side in a few days, and if you have any (non-technical) questions, please e-mail me at kirupa@kirupa.com. For technical questions, try to find a tutorial that corresponds to what you are looking for and post in the comments section of that page.

Cheers,
Kirupa

Results 1 to 8 of 8

Thread: Search a mysql array using checkboxes

  1. #1

    Search a mysql array using checkboxes

    Hi,

    I'm trying to script a search for a database. The script works fine except for the array search. I have a database entry form for car accessories which will implode the checkboxes into an array and place it into one field.

    The trouble I'm having is searching this field using the same checkboxes. if someone checks the first checkbox and, say the 5th checkbox, the search will return the results for the first checkbox, ignoring the 5th checkbox where I want both checkbox values to be searched for.

    Here is the search form:

    HTML Code:
    <form name="search" action="searching.php">
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="10%">Make:</td>
        <td width="39%"><input name="manufacturer" type="text" size="10" maxlength="10" /></td>
        <td width="10%">Model:</td>
        <td width="41%"><input name="model" type="text" size="10" maxlength="10" /></td>
        </tr>
      <tr>
        <td colspan="4">Price:</td>
        </tr>
      <tr>
        <td>From:      </td>
        <td><input name="price_from" type="text" size="10" maxlength="10" /></td>
        <td>To:      </td>
        <td><input name="price_to" type="text" size="10" maxlength="10" /></td>
      </tr>
      </table>
      <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <td colspan="4"><h3 align="center" class="h3">Included Features</h3></td>
        </tr>
      <tr>
        <td><div align="center">
          <input name="accessories[]0" type="checkbox" value="Airbag(s)" />
        </div></td>
        <td>Airbag(s)</td>
        <td><div align="center">
          <input name="accessories[]1" type="checkbox" value="Antilock Braking System" />
        </div></td>
        <td>Antilock Braking System</td>
        </tr>
      <tr>
        <td><div align="center">
          <input name="accessories[]2" type="checkbox" value="Air Conditioning" />
        </div></td>
        <td>Air Conditioning</td>
        <td><div align="center">
          <input name="accessories[]3" type="checkbox" value="Automatic Gearbox" />
        </div></td>
        <td>Automatic Gearbox</td>
        </tr>
      <tr>
        <td><div align="center">
          <input name="accessories[]4" type="checkbox" value="Alloy wheels" />
        </div></td>
        <td>Alloy wheels</td>
        <td><div align="center">
          <input name="accessories[]5" type="checkbox" value="Climate Control" />
        </div></td>
        <td>Climate Control</td>
        </tr>
      <tr>
        <td><div align="center">
          <input name="accessories[]6" type="checkbox" value="Central Locking" />
        </div></td>
        <td>Central Locking</td>
        <td><div align="center">
          <input name="accessories[]7" type="checkbox" value="Cruise Control" />
        </div></td>
        <td>Cruise Control</td>
        </tr>
      <tr>
        <td><div align="center">
          <input name="accessories[]8" type="checkbox" value="Diesel" />
        </div></td>
        <td>Diesel</td>
        <td><div align="center">
          <input name="accessories[]9" type="checkbox" value="DVD System" />
        </div></td>
        <td>DVD System</td>
        </tr>
      <tr>
        <td><div align="center">
          <input name="accessories[]10" type="checkbox" value="Estate" />
        </div></td>
        <td>Estate</td>
        <td><div align="center">
          <input name="accessories[]11" type="checkbox" value="Electric Windows" />
        </div></td>
        <td>Electric Windows</td>
        </tr>
      <tr>
        <td><div align="center">
          <input name="accessories[]12" type="checkbox" value="Power Assisted Steering" />
        </div></td>
        <td>Power Assisted Steering</td>
        <td><div align="center">
          <input name="accessories[]13" type="checkbox" value="R/C Central Locking" />
        </div></td>
        <td>R/C Central Locking</td>
        </tr>
      <tr>
        <td><div align="center">
          <input name="accessories[]14" type="checkbox" value="Satellite Navigation" />
        </div></td>
        <td>Satellite Navigation</td>
        <td><div align="center">
          <input name="accessories[]15" type="checkbox" value="Traction Control" />
        </div></td>
        <td>Traction Control</td>
        </tr>
      <tr>
        <td><div align="center">
          <input name="accessories[]16" type="checkbox" value="Sunroof" />
        </div></td>
        <td>Sunroof</td>
        <td><div align="center">
          <input name="accessories[]17" type="checkbox" value="Electric Sunroof" />
        </div></td>
        <td>Electric Sunroof</td>
        </tr>
        </table><br />
          <br /><div align="center">
      <input name="Submit" type="submit" value="Search" />
    </div>
    </form>
    And the Searching Script:

    PHP Code:
    <?
    $manufacturer 
    $_GET["manufacturer"];
    $model $_GET["model"];
    $price_from $_GET["price_from"];
    $price_to $_GET["price_to"];
    $accessories_1 $_GET['accessories'][0] ;
    $accessories_2 $_GET['accessories'][1] ;
    $accessories_3 $_GET['accessories'][2] ;
    $accessories_4 $_GET['accessories'][3] ;
    $accessories_5 $_GET['accessories'][4] ;
    $accessories_6 $_GET['accessories'][5] ;
    $accessories_7 $_GET['accessories'][6] ;
    $accessories_8 $_GET['accessories'][7] ;
    $accessories_9 $_GET['accessories'][8] ;
    $accessories_10 $_GET['accessories'][9] ;
    $accessories_11 $_GET['accessories'][10] ;
    $accessories_12 $_GET['accessories'][11] ;
    $accessories_13 $_GET['accessories'][12] ;
    $accessories_14 $_GET['accessories'][13] ;
    $accessories_15 $_GET['accessories'][14] ;
    $accessories_16 $_GET['accessories'][15] ;
    $accessories_17 $_GET['accessories'][16] ;
    $accessories_18 $_GET['accessories'][17] ;
    $string $_SERVER['QUERY_STRING'] ;
    if (!
    $price_from){
    $price_from '0';
    }
    if (!
    $price_to){
    $price_to '10000000';
    }

    $page = (!isset($_GET['page']))? $_GET['page']; 
    $prev = ($page 1); 
    $next = ($page 1); 
    /* Max results per page */ 
    $max_results 5
    /* Calculate the offset */ 
    $from = (($page $max_results) - $max_results); 
    /* Query the db for total results. You need to edit the sql to fit your needs */ 
    $result mysql_query("SELECT * FROM cars WHERE price BETWEEN '$price_from' AND '$price_to' AND manufacturer LIKE '%$manufacturer%' AND model LIKE '%$model%' OR accessories_1 LIKE '%$accessories_1%' OR '%$accessories_2%' OR '%$accessories_3%' OR '%$accessories_4%' OR '%$accessories_5%' OR '%$accessories_6%' OR '%$accessories_7%' OR '%$accessories_8%' OR '%$accessories_9%' OR '%$accessories_10%' OR '%$accessories_11%' OR '%$accessories_12%' OR '%$accessories_13%' OR '%$accessories_14%' OR '%$accessories_15%' OR '%$accessories_16%' OR '%$accessories_17%' OR '%$accessories_18%'"); 
    $total_results mysql_num_rows($result); 
    $total_pages ceil($total_results $max_results); 
    $pagination ''
    /* Create a PREV link if there is one */ 
    if($page 1

    $pagination .= '<a href="searching.php?'.$string.'&page='.$prev.'">Previous</a> '

    /* Loop through the total pages */ 
    for($i 1$i <= $total_pages$i++) 

    if(
    $i == $page

    $pagination .= $i

    else 

    $pagination .= '&nbsp;<a href="searching.php?'.$string.'&page='.$i.'">'.$i.'</a>&nbsp;'


    /* Print NEXT link if there is one */ 
    if($page $total_pages

    $pagination .= '<a href="searching.php?'.$string.'&page='.$next.'">Next</a>'

    $result2 mysql_query("SELECT * FROM cars WHERE price BETWEEN '$price_from' AND '$price_to' AND manufacturer LIKE '%$manufacturer%' AND model LIKE '%$model%' AND accessories_1 LIKE '%$accessories_1%' OR '%$accessories_2%' OR '%$accessories_3%' OR '%$accessories_4%' OR '%$accessories_5%' OR '%$accessories_6%' OR '%$accessories_7%' OR '%$accessories_8%' OR '%$accessories_9%' OR '%$accessories_10%' OR '%$accessories_11%' OR '%$accessories_12%' OR '%$accessories_13%' OR '%$accessories_14%' OR '%$accessories_15%' OR '%$accessories_16%' OR '%$accessories_17%' OR '%$accessories_18%' ORDER BY price DESC LIMIT $from$max_results");
    if (
    mysql_num_rows($result2) == 0){
    echo 
    "<div align='center'>No Vehicles Found in your Search. <form action='search.php'><input type=submit value='Search Again'></form></div>";
    }
    elseif (
    mysql_num_rows($result2) == 1){
    echo 
    "<p>Your search returned <b>"$total_results ."</b> Vehicle:</p>";
    }
    else {
    echo 
    "<p>Your search returned <b>"$total_results ."</b> Vehicles:</p>";
    }
    //grab all the content
    while($row=mysql_fetch_array($result2))

    $special=$row["special"];
    if (
    $special=='no'){
    echo 
    "<table width='550' border='0' cellspacing='0' cellpadding='0' class='list_bg'>";
    echo 
    "<tr width='550'>";
     echo 
    "<td class='list_head_tl'>"."&nbsp;</td>";
     echo 
    "<td align='center' class='list_head'><b>" $row['manufacturer'] . "&nbsp;" $row['model'] . "&nbsp;" $row['engine'] . "</b></td>";
     echo 
    "<td class='list_head_tr'>"."&nbsp;</td>";
     echo 
    "<td class='list_head_trr'>"."&nbsp;</td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td colspan='4' class='list_top'>&nbsp;</td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td>"."&nbsp;</td>";
     echo 
    "<td>"."<div class='outerpair1'><div class='outerpair2'><div class='shadowbox'><div class='innerbox'><a href='car_view.php?id="$row['id'] ."'><img src='imagethumb.php?s="$row['image_1'] ."&w=166' title='"$row['manufacturer'] ."&nbsp;"$row['model'] ."&nbsp;"$row['engine'] ."' width='166' border='0'></a></div></div></div></div></td>";
     echo 
    "<td>"."&nbsp;</td>";
     echo 
    "<td align='justify'>".$row['description']."</td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td colspan='4'>"."<table width='500' border='0' cellspacing='0' cellpadding='0' align='center'><tr><td>".$row['accessories_1']."</td></tr></table></td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td colspan='4'>"."<table width='500' border='0' cellspacing='0' cellpadding='0' align='center'><tr><td align='right'><a href='car_view.php?id="$row['id'] ."'>More Information</a></td></tr></table></td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td colspan='4' class='list_bot'>"."&nbsp;</td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td colspan='4'><table width='100%' border='0' cellspacing='0' cellpadding='0'>";
     echo 
    "<tr>";
     echo 
    "<td class='list_bot_bll'>"."&nbsp;</td>";
     echo 
    "<td width='23' class='list_price_bl'>"."&nbsp;</td>";
     echo 
    "<td width='174' align='center' class='list_price'><b>""Price: &euro;"number_format ($row['price'], 0""","),"</b></td>";
     echo 
    "<td width='23' class='list_price_br'>"."&nbsp;</td>";
     echo 
    "</tr>";
     echo 
    "</table></td>";
     echo 
    "</tr>";
     } else {
     echo 
    "<table width='550' border='0' cellspacing='0' cellpadding='0' class='list_bg'>";
     echo 
    "<tr width='550'>";
     echo 
    "<td class='list_head_tl'>"."&nbsp;</td>";
     echo 
    "<td align='center' class='list_head'><b>" $row['manufacturer'] . "&nbsp;" $row['model'] . "&nbsp;" $row['engine'] . "</b></td>";
     echo 
    "<td class='list_head_tr'>"."&nbsp;</td>";
     echo 
    "<td class='list_head_trr'>"."&nbsp;</td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td colspan='4' class='list_top'>&nbsp;</td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td>"."&nbsp;</td>";
     echo 
    "<td>"."<div class='outerpair1'><div class='outerpair2'><div class='shadowbox'><div class='innerbox'><a href='car_view.php?id="$row['id'] ."'><img src='imagethumb.php?s="$row['image_1'] ."&w=166' title='"$row['manufacturer'] ."&nbsp;"$row['model'] ."&nbsp;"$row['engine'] ."' width='166' border='0'></a></div></div></div></div></td>";
     echo 
    "<td>"."&nbsp;</td>";
     echo 
    "<td align='justify'>".$row['description']."</td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td colspan='4'>"."<table width='500' border='0' cellspacing='0' cellpadding='0' align='center'><tr><td>".$row['accessories_1']."</td></tr></table></td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td colspan='4'>"."<table width='500' border='0' cellspacing='0' cellpadding='0' align='center'><tr><td align='right'><a href='car_view.php?id="$row['id'] ."'>More Information</a></td></tr></table></td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td colspan='4' class='list_bot'>"."<div class='special_price' align='right'>Old Price: &euro;"number_format ($row['price'], 0""","),"</td>";
     echo 
    "</tr>";
     echo 
    "<tr>";
     echo 
    "<td colspan='4'><table width='100%' border='0' cellspacing='0' cellpadding='0'>";
     echo 
    "<tr>";
     echo 
    "<td class='list_bot_bll'>"."&nbsp;</td>";
     echo 
    "<td width='23' class='list_price_bl'>"."&nbsp;</td>";
     echo 
    "<td width='174' align='center' class='list_price'><b>""Special Price: &euro;"number_format ($row['special_price'], 0""","),"</b></td>";
     echo 
    "<td width='23' class='list_price_br'>"."&nbsp;</td>";
     echo 
    "</tr>";
     echo 
    "</table></td>";
     echo 
    "</tr>";
     }
       }
     echo 
    "</table>";
     echo 
    "<div align='right'>"$pagination;
    ?>
    Can anyone see what I am doing wrong, or where I might have to include an in_array?

  2. #2
    There are a few things...

    - I'd give your FORM tag a method="post" attribute - GET has a size limit you may hit
    - The names for your checkboxes should be accessories[n] rather than accessories[]n
    - Your SQL statement isn't valid which is why the query isn't returning the results you expect
    - You need to escape the variable parts of your SQL statement to avoid SQL injection attacks

    I'm happy to help you fix the SQL, but that query will be VERY slow. I'd rather help you fix your database schema so you can look for information efficiently. Can you post what your cars database table looks like?

  3. #3
    Hi mbeards, thanks for the advice.

    This is the basic structure of the database:

    id int(11) No auto_increment
    manufacturer text latin1_swedish_ci No
    model text latin1_swedish_ci No
    engine text latin1_swedish_ci No
    accessories_1 text latin1_swedish_ci No
    price decimal(15,0) No
    description longtext latin1_swedish_ci No
    image_1 text latin1_swedish_ci No
    image_2 text latin1_swedish_ci No
    image_3 text latin1_swedish_ci No
    image_4 text latin1_swedish_ci No
    image_5 text latin1_swedish_ci No
    special text latin1_swedish_ci No
    special_price decimal(15,0) No
    car_month text latin1_swedish_ci No

    The reason there is only one accessories field is because I looked at creating 18 seperate fields, one for each accessory but it didn't look very good when reproduced on a web page. By putting the accessories in an array and dumping them in the database as an array with comma seperators, it makes the output a lot easier on the eyes. Is this a problem when searching for the accessories?

  4. #4
    You should "normalize" your database structure. A normalized schema means less duplicate data, less errors, and takes advantage of the "relational" in Relational Database Management System. So, I'd suggest that you'd create something like the following:

    Code:
    CREATE TABLE manufacturers
    (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(128) NOT NULL,
      UNIQUE(name)
    );
    
    CREATE TABLE accessories
    (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(128) NOT NULL,
      UNIQUE(name)
    );
    
    CREATE TABLE images
    (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(128) NOT NULL,
      label VARCHAR(128) NOT NULL,
      UNIQUE(name)
    );
    
    -- Each car can have 1 manufacturer
    CREATE TABLE cars
    (
      id INT AUTO_INCREMENT PRIMARY KEY,
      manufacturer_id INT NOT NULL,
      model VARCHAR(128) NOT NULL,
      engine VARCHAR(64) NOT NULL,
      price DECIMAL(9,0) NOT NULL,
      special_price DECIMAL(9,0),
      description TEXT,
      special_text TEXT,
      car_month TEXT
    );
    CREATE INDEX cars_manufacturer_id_idx ON cars (manufacturer_id);
    CREATE INDEX cars_model_idx ON cars (model);
    CREATE INDEX cars_engine_idx ON cars (engine);
    CREATE INDEX cars_price_idx ON cars (price);
    
    -- Each car can have many accessories
    CREATE TABLE car_accessories
    (
      id INT AUTO_INCREMENT PRIMARY KEY,
      car_id INT NOT NULL,
      accessory_id INT NOT NULL,
      UNIQUE(car_id, accessory_id)
    );
    
    -- Each car can have many images
    CREATE_TABLE car_images
    (
      id INT AUTO_INCREMENT PRIMARY KEY,
      car_id INT NOT NULL,
      image_id INT NOT NULL,
      UNIQUE(car_id, image_id)
    );
    Then, you'd insert all the different accessories into the accessories table...
    INSERT INTO accessories (name) VALUES ('Airbag(s)');
    INSERT INTO accessories (name) VALUES ('Air Conditioning');
    etc...

    And each of the different manufacturers...
    INSERT INTO manufacturers (name) VALUES ('Toyota');
    INSERT INTO manufacturers (name) VALUES ('Ford');
    etc...

    And, then for each car, fill out its relationships. Let's pretend those examples above get ids 1 and 2 respectively...
    INSERT INTO cars (manufacturer_id, model, engine, price, description) VALUES (1, 'Prius', 'Hybrid Synergy Drive', 22000, "The Toyota Prius is Toyota’s gasoline-electric hybrid vehicle and was the first mass-produced gasoline-electric hybrid when it went on sale in Japan in 1997.");

    INSERT INTO car_accessories (car_id, accessory_id) VALUES (1, 1);
    INSERT INTO car_accessories (car_id, accessory_id) VALUES (1, 2);
    etc...

    Phew... that's a lot (call it an SQL tutorial). You would probably do this same "breaking out" for engines, models, and car_months and creating related tables.

    In your PHP script, you then query the accessories table for all the accessories and set the checkbox input values to the "id" from the accessories table. You can do the same for the manufacturers and show them in a drop down select/option list where the id is the value and the name is what's between the option tags.

    The PHP page then gets back user-entered text for some of the fields and primary key ids for others.

    Post back if you understand this database stuff and if you want to get into the PHP side.

  5. #5
    Hi mbeards,

    Yeah I think I understand. Instead of creating one table called cars and inputting all of the data into that table with different fields, I create a different table for each field I wish to search and then link the seperate tables via the car index, engine index etc. So that when the info is called from the database you can relate the different tables by the index, so that accessories id 7 goes to car id 3. Is that right, or am I barking up the wrong tree?

    Yes if you would be able to help me with the PHP that would be great, as I've only ever made simple queries and searches from one table before. Searching two tables sounds difficult.

    Another thing I've just thought of whilst looking at the code. When I'm creating the new database entry, how do I know what the manufacturer id is if I've only just entered that into the database? Entries are by completing a similar form to the one above and inserting via the one script. How will this script know what the new manufacturer id is for a new vehicle?

  6. #6
    Well, it's not necessarily a table for each field you'd like to search on, but rather a table for each separate entity to reduce duplication. As an example, say you misspelled Toyota and you've got 1,000s of rows in your single cars table for each possible Toyota model/accessories combo... now you've got to go fix 1000s of records... don't mess up and don't forget any! Versus having a related manufacturers table. Now you fix your typo once and all 1000s of Toyota models reflect the fix.

    The database can tell you the value of the last auto incremented primary key from an insert statement. In PHP, you use mysql_insert_id().

    When you're inserting new records, you'd just process the form submission in steps (since you'll have more than 1 insert statement). You just work your way through the hierarchy, inserting "parent" records before "child" records.

    Selecting from or searching multiple tables isn't difficult once you've done it a few times. You might want to track down a tutorial on SQL to learn about JOINs.

    In your original example, all the fields were required. You probably want them optional. In other words, the user fills out as much or as little detail before searching. Maybe I want to search for any manufacturer's car between 20k and 30k. Or maybe I only want to see Chevy's with sunroofs. So, to pull that off, you'll need to build your SQL query in steps.

    Not real code...
    PHP Code:
     $sql "SELECT * FROM cars";
    $where "";
    if (!empty(
    $manufacturer_id)) {
      
    $where .= sprintf(" (cars.manufacturer_id = %d) "$manufacturer_id);
    }
    ...
    etc...

    if (!empty(
    $where)) {
      
    $sql $sql " WHERE " $where;

    You can private message me for more help.

  7. #7
    I'm still having trouble creating a subquery for the accessories checkboxes.

    The search function for the manufacturer, model and price works fine and I've now got the subquery working, but it doesn't return the correct values as the first value that is checked is paid more attention to than subsequent checked boxes. For example checkbox 11 is electric windows and 14 is RC central locking. If both of these are checked then the results should display all vehicles with electric windows and r/c central locking, but it doesn't, it returns all vehicles with electric windows and ignores the r/c central locking.

    Has anyone had any experience with subqueries from checkboxes that may or may not be checked?

    This is the current query that does not work correctly:
    $acc_array = array($accessories_1,$accessories_2,$accessories_3 ,$accessories_4,$accessories_5,$accessories_6,$acc essories_7,$accessories_8,$accessories_9,$accessor ies_10,$accessories_11,$accessories_12,$accessorie s_13,$accessories_14,$accessories_15,$accessories_ 16,$accessories_17,$accessories_18);
    $accessories = implode(" ", $acc_array);

    "SELECT DISTINCT vehicles.id, vehicles.manufacturer_id, vehicles.model, vehicles.engine, vehicles.price, vehicles.special, vehicles.special_price, vehicles.description, manufacturers.name FROM vehicles, manufacturers, car_accessories, accessories WHERE vehicles.manufacturer_id LIKE '%$manufacturer%' AND manufacturers.id = vehicles.manufacturer_id AND vehicles.price BETWEEN '$price_from' AND '$price_to' AND vehicles.model LIKE '%$model%' AND vehicles.id IN (SELECT car_accessories.car_id FROM car_accessories WHERE car_accessories.accessory_id IN ('$accessories')) ORDER BY vehicles.price DESC LIMIT $from, $max_results"

    Can anyone see where I'm missing something?
    Last edited by LooInSpain; February 2nd, 2008 at 10:16 AM. Reason: Query Updated

  8. #8
    Please, anyone!!!

    I just need help passing the checkbox variables to the search query so that it returns all vehicles that have all of the checked accessories, that's the last piece of the puzzle. The rest works fine.

    If anyone has an idea of how to do this or maybe a suggestion, please post so I can try it out and hopefully get this working (and help me sleep!!!)

    Thanks

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Home About kirupa.com Meet the Moderators Advertise

 Link to Us

 Credits

Copyright 1999 - 2012