Find the answer to your Linux question:
Results 1 to 7 of 7
what is dificult in creating this tables... Code: CREATE TABLE `pois` ( `id` bigint(20) unsigned NOT NULL, `lat` float(10,7) NOT NULL, `lon` float(10,7) NOT NULL, PRIMARY KEY (`id`) ) CREATE ...
Enjoy an ad free experience by logging in. Not a member yet? Register.
  1. #1
    Linux Newbie
    Join Date
    May 2013
    Posts
    220

    creating tables in php leads to errors in phpmyadmin....


    what is dificult in creating this tables...

    Code:
    CREATE TABLE `pois` (
      `id` bigint(20) unsigned NOT NULL,
      `lat` float(10,7) NOT NULL,
      `lon` float(10,7) NOT NULL,
      PRIMARY KEY (`id`)
    )
    
    CREATE TABLE `pois_tag` (
      `poisid` int(11) NOT NULL DEFAULT '0',
      `tagname` varchar(45) NOT NULL DEFAULT '',
      `tagvalue` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`poisid`,`tagname`)
    )
    i get back the following error ;

    Code:
    MySQL meldet: Dokumentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version
    for the right syntax to use near 'CREATE TABLE `pois_tag` (
      `poisid` int(11) NOT NULL DEFAULT '0',
      `tagname`' at line 8
    many thanks for any and all help


    uppdate:


    again very very helpful your answer. Youre very supportive and all your postings are a valuable asset of knowledge. Ready to apply in my work.

    Many thanks!!

    Well i think i shoulde get rid of the back tics.

    They are only needed when table or column names conflict with reserved words and that is bad programming practice. In other words we don't need them. As to another specific problem, i have specified NOT NULL then set the default to null ('').

    this might be a great issue - isnt it:



    Question: how to set this correct... should i leave the expression " DEFAULT NULL "!´?

    Code:
    CREATE TABLE `pois` (
      `id` bigint(20) unsigned NOT NULL,
      `lat` float(10,7) NOT NULL,
      `lon` float(10,7) NOT NULL,
      PRIMARY KEY (`id`)
    )
    
    CREATE TABLE `pois_tag` (
      `poisid` int(11) NOT NULL DEFAULT '0',
      `tagname` varchar(45) NOT NULL DEFAULT '',
      `tagvalue` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`poisid`,`tagname`)
    )
    can you give me a hint how to do this right!?

    many thanks for any and all help.

    greeetings
    Last edited by sayhello; 08-06-2014 at 01:10 PM.
    Akoya P 6512 15" OpenSuse 13.1: AMD Athlon X2 P320
    Samsunng q 210, 12,1" OpenSuse 13.1: Intel® Core™ 2 Duo Proz. P8400 2,26 GHz 1066 MHz FSB 3 MB

  2. #2
    Linux Engineer
    Join Date
    Dec 2013
    Posts
    1,488
    Drop the back ticks. Not only are they not needed but they are wrong. Double quotes are sometimes used for identifiers but they are only required if the identifiers contain something outside the rules. You don't need single quotes around ints though they are legal.

    In the MySQL DB if a column can take a NULL then the clause defaults to it - so it is unnecessary and I wouldn't clutter things adding it.

  3. #3
    Linux Newbie
    Join Date
    May 2013
    Posts
    220
    hell deear gregm


    first of all - many many thannks for the answer -

    Drop the back ticks. Not only are they not needed but they are wrong. Double quotes are sometimes used for identifiers but they are only required if the identifiers contain something outside the rules. You don't need single quotes around ints though they are legal. In the MySQL DB if a column can take a NULL then the clause defaults to it - so it is unnecessary and I wouldn't clutter things adding it
    i willl do as adviced!!!

    gregm your answers are allways very helpful.


    here a more theoretical question - that comes up to my mind - perhaps this is better adressed in a new thread - but i like to post it here - since you re really mysql-experts - and helped me alot so far..

    Relational databases have fixed schemas. The sheme of data that is derived from a request at the planet-file may differ dynamically.what if we need a schema that can adjust to a variable number of tags and adapt to changes in the underlying data.


    for example - see the dataset below - with its sheme:


    the second dataset has the following tags / values-combination:


    Code:
    <tag k="fax" v="+49 621 1259 779"/>

    which the first does not have.

    the third dataset has the following tags / values-combination:

    Code:
          <tag k="addr:city" v="Mannheim"/>
          <tag k="addr:country" v="DE"/>
          <tag k="addr:housenumber" v="5"/>
          <tag k="addr:postcode" v="68161"/>
          <tag k="addr:street" v="Collinistraße"/>
    ... which all others do not have..and


    the last dataset has the following tags / values-combination:


    <tag k="smoking" v="separated"/>



    ...which all others do not have



    see below;


    Code:
          
          
      $xmlstr = <<<XML
      <data>
      <node id="2064639440" lat="49.4873181" lon="8.4710548">
          <tag k="amenity" v="restaurant"/>
          <tag k="cuisine" v="turkish"/>
          <tag k="email" v="info@lynso.de"/>
          <tag k="name" v="Kilim  - Café und Bar Restaurant"/>
          <tag k="opening_hours" v="Su-Th 17:00-1:00; Fr, Sa 17:00-3:00"/>
          <tag k="operator" v="Cengiz Kaya"/>
          <tag k="phone" v="06 21 - 43 755 371"/>
          <tag k="website" v="http://www.kilim-mannheim.de/"/>
        </node>
        <node id="2126473801" lat="49.4851170" lon="8.4756295">
          <tag k="amenity" v="restaurant"/>
          <tag k="cuisine" v="italian"/>
          <tag k="email" v="mannheim1@vapiano.de"/>
          <tag k="fax" v="+49 621 1259 779"/>
          <tag k="name" v="Vapiano"/>
          <tag k="opening_hours" v="Su-Th 10:00-24:00; Fr-Sa 10:00-01:00"/>
          <tag k="operator" v="Vapiano"/>
          <tag k="phone" v="+49 621 1259 777"/>
          <tag k="website" v="http://www.vapiano.de/newsroom/?store=29"/>
          <tag k="wheelchair" v="yes"/>
        </node>
        <node id="667927886" lat="49.4909673" lon="8.4764904">
          <tag k="addr:city" v="Mannheim"/>
          <tag k="addr:country" v="DE"/>
          <tag k="addr:housenumber" v="5"/>
          <tag k="addr:postcode" v="68161"/>
          <tag k="addr:street" v="Collinistraße"/>
          <tag k="amenity" v="restaurant"/>
          <tag k="name" v="Churrascaria Brasil Tropical"/>
          <tag k="phone" v="+496211225596"/>
          <tag k="wheelchair" v="limited"/>
        </node>
        <node id="689928440" lat="49.4798794" lon="8.4853418">
          <tag k="amenity" v="restaurant"/>
          <tag k="cuisine" v="greek"/>
          <tag k="email" v="epirus70@hotmail.de"/>
          <tag k="fax" v="0621/4407 762"/>
          <tag k="name" v="Epirus"/>
          <tag k="opening_hours" v="Mo-Sa 12:00-15:00,18:00-24:00"/>
          <tag k="phone" v="0621/4407 761"/>
          <tag k="smoking" v="separated"/>
          <tag k="website" v="http://epirus-ma.blogspot.com/"/>
          <tag k="wheelchair" v="no"/>
        </node>
        <node id="689928445" lat="49.4799409" lon="8.4851357">
          <tag k="amenity" v="restaurant"/>
          <tag k="cuisine" v="italian"/>
          <tag k="email" v="gianlucascurti@ristorante-augusta.de"/>
          <tag k="name" v="Ristorante Augusta"/>
          <tag k="opening_hours" v="Mo-Fr 12:00-14:00,18:00-23:00;Su 12:00-14:00,18:00-23:00"/>
          <tag k="phone" v="0621 449872"/>
          <tag k="website" v="ristorante-augusta.com/"/>
          <tag k="wheelchair" v="no"/>
        </node>
      </data>
      XML;
    Relational databases have fixed schemas. This is one of the limitations of working with them that you have to live with. the sheme of data that is derived from a request at the planet-file may differ dynamically. what if we need a schema that can adjust to a variable number of tags and adapt to changes in the underlying data.

    is this covered by this sheme? - of hard coded column names as in
    Code:
    $fields = array('id','lat','lon','name','amenity','operator','vending');
    Dont we need to another sheme to pick up any additional columns added to the pois table
    Code:
    $sql = "SHOW COLUMNS FROM pois";
    $fields = array();
    $res = $db->query($sql);
    while ($row = $res->fetch_row()) {
        $fields[] = $row[0];}
    hope i was able to make clear what the intended aims & goals of this posting are...

    AGAIN: The sheme of data that is derived from a request at the planet-file may differ dynamically.
    what if we need a schema that can adjust to a variable number of tags and adapt to changes in the underlying data.

    Can this be coverd by a hardcode struture - or which one is needet here... to fit most?

    thanks inadvane for any and all help in your answer

    say
    Akoya P 6512 15" OpenSuse 13.1: AMD Athlon X2 P320
    Samsunng q 210, 12,1" OpenSuse 13.1: Intel® Core™ 2 Duo Proz. P8400 2,26 GHz 1066 MHz FSB 3 MB

  4. $spacer_open
    $spacer_close
  5. #4
    Linux Engineer docbop's Avatar
    Join Date
    Nov 2009
    Location
    Woodshed, CA
    Posts
    947
    Quote Originally Posted by sayhello View Post

    AGAIN: The sheme of data that is derived from a request at the planet-file may differ dynamically.
    what if we need a schema that can adjust to a variable number of tags and adapt to changes in the underlying data.

    Can this be coverd by a hardcode struture - or which one is needet here... to fit most?
    Short answer gregm will give you details.


    SQL databases can change, but not dynamically it can be time consuming since to add a field the whole table must be changed. If you have data that the fields are changing dynamically and you want to handle that then you should look at one of the NoSQL databases like MongoDB, but NoSQL databases are very different approach and require coding changes as well as migrating data.

    Now some sites will use both a SQL and a NoSQL databases so static data can remain in SQL and dynamic data would be in NoSQL, but again that is a lot of work.
    A lion does not lose sleep, over the opinion of sheep.

  6. #5
    Linux Engineer
    Join Date
    Dec 2013
    Posts
    1,488
    Quote Originally Posted by sayhello View Post
    AGAIN: The sheme of data that is derived from a request at the planet-file may differ dynamically.
    what if we need a schema that can adjust to a variable number of tags and adapt to changes in the underlying data.

    Can this be coverd by a hardcode struture - or which one is needet here... to fit most?

    thanks inadvane for any and all help in your answer

    say
    You could use a schema free DB as docbop alludes to. MySQL is a relational DB and having schema allows relationships to be formed between tables. They are optimized to allow complex queries to be performed quickly.

    To build a SQL schema for your data you'll need to understand what the format you are receiving means and store the data accordingly. For a schema free DB to be of value you may need to do the same analysis but you may be able simply store it using keys that present themselves in the data. Data stored without some pre-thought and analysis will seldom be of value, in my experience.

  7. #6
    Linux Newbie
    Join Date
    May 2013
    Posts
    220
    hello dear docbop and gregm - good evening

    many thanks for the answers regarding the db. this helps me quiet a lot!!!!


    To build a SQL schema for your data you'll need to understand what the format you are receiving means and store the data accordingly. For a schema free DB to be of value you may need to do the same analysis but you may be able simply store it using keys that present themselves in the data. Data stored without some pre-thought and analysis will seldom be of value, in my experience.

    sure thing - youre right!!! i need to understand fully the db-structure and the sheme!
    i subsequently need to make some pre-thought and analysis.


    these steps belong to my preliminary work! i will do lots of more preliminary works and analytical thinking in the next few weeks....



    at the moment i think like so: i want to have a datasheme that gives me the option to store data from requests at the planet-file.
    well generally spoken - the structure of the XML data is fixed. Sure, not all items have all data (sometimes the address isn't given, sometimes there's no fax number etc.). But that doesn't mean the structure is different. It means the values are missing, which is exactly what the SQL NULL is for. For example, if we don't have the address, then we simply use NULL in all address fields.

    what is aimed: i do not want to collect random data from OpenStreetMap? i actually want to give the fields a meaning and use them in a application? In the latter case, we need a fixed schema anyway.

    so - i guesss that i go with the following approach....

    Code:
    CREATE TABLE `pois` (
      `id` bigint(20) unsigned NOT NULL,
      `lat` float(10,7) NOT NULL,
      `lon` float(10,7) NOT NULL,
      PRIMARY KEY (`id`)
    ) 
    
    CREATE TABLE `pois_tag` (
      `poisid` int(11) NOT NULL DEFAULT '0',
      `tagname` varchar(45) NOT NULL DEFAULT '',
      `tagvalue` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`poisid`,`tagname`)
    )

    Where each tagname/value pair is stored as a row in a separate table with the pois id
    Processing would be like this


    btw: see the attached file - what do you say - can i go like this...


    Code:
    <?php
    
    $db = new mysqli(HOST,USERNAME,PASSWORD,'test'); // use your credentials
    
    $xmlstr = <<<XML
    <data>
    <node id="2064639440" lat="49.4873181" lon="8.4710548">
        <tag k="amenity" v="restaurant"/>
        <tag k="cuisine" v="turkish"/>
        <tag k="email" v="info@lynso.de"/>
        <tag k="name" v="Kilim  - Café und Bar Restaurant"/>
        <tag k="opening_hours" v="Su-Th 17:00-1:00; Fr, Sa 17:00-3:00"/>
        <tag k="operator" v="Cengiz Kaya"/>
        <tag k="phone" v="06 21 - 43 755 371"/>
        <tag k="website" v="http://www.kilim-mannheim.de/"/>
      </node>
      <node id="2126473801" lat="49.4851170" lon="8.4756295">
        <tag k="amenity" v="restaurant"/>
        <tag k="cuisine" v="italian"/>
        <tag k="email" v="mannheim1@vapiano.de"/>
        <tag k="fax" v="+49 621 1259 779"/>
        <tag k="name" v="Vapiano"/>
        <tag k="opening_hours" v="Su-Th 10:00-24:00; Fr-Sa 10:00-01:00"/>
        <tag k="operator" v="Vapiano"/>
        <tag k="phone" v="+49 621 1259 777"/>
        <tag k="website" v="http://www.vapiano.de/newsroom/?store=29"/>
        <tag k="wheelchair" v="yes"/>
      </node>
      <node id="667927886" lat="49.4909673" lon="8.4764904">
        <tag k="addr:city" v="Mannheim"/>
        <tag k="addr:country" v="DE"/>
        <tag k="addr:housenumber" v="5"/>
        <tag k="addr:postcode" v="68161"/>
        <tag k="addr:street" v="Collinistraße"/>
        <tag k="amenity" v="restaurant"/>
        <tag k="name" v="Churrascaria Brasil Tropical"/>
        <tag k="phone" v="+496211225596"/>
        <tag k="wheelchair" v="limited"/>
      </node>
      <node id="689928440" lat="49.4798794" lon="8.4853418">
        <tag k="amenity" v="restaurant"/>
        <tag k="cuisine" v="greek"/>
        <tag k="email" v="epirus70@hotmail.de"/>
        <tag k="fax" v="0621/4407 762"/>
        <tag k="name" v="Epirus"/>
        <tag k="opening_hours" v="Mo-Sa 12:00-15:00,18:00-24:00"/>
        <tag k="phone" v="0621/4407 761"/>
        <tag k="smoking" v="separated"/>
        <tag k="website" v="http://epirus-ma.blogspot.com/"/>
        <tag k="wheelchair" v="no"/>
      </node>
      <node id="689928445" lat="49.4799409" lon="8.4851357">
        <tag k="amenity" v="restaurant"/>
        <tag k="cuisine" v="italian"/>
        <tag k="email" v="gianlucascurti@ristorante-augusta.de"/>
        <tag k="name" v="Ristorante Augusta"/>
        <tag k="opening_hours" v="Mo-Fr 12:00-14:00,18:00-23:00;Su 12:00-14:00,18:00-23:00"/>
        <tag k="phone" v="0621 449872"/>
        <tag k="website" v="ristorante-augusta.com/"/>
        <tag k="wheelchair" v="no"/>
      </node>
    </data>
    XML;
    
    $fields = array('id','name','lat','lon');
    $xml = simplexml_load_string($xmlstr);
    
    //
    // PROCESS XML RECORDS
    //
    
    $poisdata = array();
    $tagdata = array();
    
    foreach ($xml->node as $node) {
        $nodedata = array_fill_keys($fields,'');
        $nodedata['id']  = intval($node['id']);
        $nodedata['lat'] = isset($node['lat']) ? floatval($node['lat']) : 0;
        $nodedata['lon'] = isset($node['lon']) ? floatval($node['lon']) : 0;
        $poisdata[] = vsprintf("(%d, %10.7f, %10.7f)", $nodedata);
        foreach ($node->tag as $tag) {
            $k = (string)$tag['k'];
            $v = (string)$tag['v'];
            $tagdata[] = sprintf("(%d, '%s', '%s')"
                    , $nodedata['id']
                    , $db->real_escape_string($k)
                    , $db->real_escape_string($v));
        }
    }
    
    //
    // STORE THE DATA
    //
    $sql = "REPLACE INTO pois ('id','lat','lon') VALUES\n" . join(",\n", $poisdata);
    $db->query($sql);
    
    $sql = "REPLACE INTO pois_tag (poisid, tagname, tagvalue) VALUES\n" . join(",\n", $tagdata);
    $db->query($sql);
    
    //
    // DISPLAY THE DATA
    //
    $currentTags = array();
    $sql = "SELECT DISTINCT tagname 
            FROM pois_tag
            ORDER BY tagname = 'name' DESC, tagname";
    $res = $db->query($sql);
    while (list($tn) = $res->fetch_row()) {
        $currentTags[] = $tn;
    }
    $thead = "<tr><th>id</th><th>lat</th><th>lon</th><th>"
             . join('</th><th>', $currentTags) . "</th></tr>\n";
             
    $currid = $currlat = $currlon = 0;
    $sql = "SELECT p.id, lat, lon, tagname, tagvalue
            FROM pois p
                LEFT JOIN pois_tag t ON t.poisid = p.id
            ORDER BY p.id";
    $res = $db->query($sql);
    $tdata = '';
    while (list($id, $lat, $lon, $t, $v) = $res->fetch_row()) {
        if ($currid != $id) {
            if ($currid) {
                $tdata .= "<tr><td>$currid</td><td>$currlat</td><td>$currlon</td><td>"
                    . join('</td><td>', $poisrow) . "</td></tr>\n";
            }
            $currid = $id;
            $currlat = $lat;
            $currlon = $lon;
            $poisrow = array_fill_keys($currentTags,'');
        }
        $poisrow[$t] = $v;
    }
    $tdata .= "<tr><td>$currid</td><td>$currlat</td><td>$currlon</td><td>"
        . join('</td><td>', $poisrow) . "</td></tr>\n";
    ?>
    <html>
    <head>
    <meta name="generator" content="PhpED 12.0 (Build 12010, 64bit)">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Tags</title>
    <meta name="author" content="Barand">
    <meta name="creation-date" content="06/04/2014">
    <style type="text/css">
    body, td, th {
        font-family: arial, sans-serif;
        font-size: 10pt;
    }
    table {
        border-collapse: collapse;
    }
    th {
        background-color: #369;
        color: white;
        padding: 5px 2px;
    }
    td {
        background-color: #EEE;
        padding: 2px;
    }
    </style>
    </head>
    <body>
    <table border='1'>
        <?php echo $thead, $tdata; ?>
    </table>
    </body>
    </html>
    again: see the attached file - what do you say - can i go like this...

    btw - a new runned demo gave back the following in the terminal...

    Code:
    martin@linux-70ce:~/php> php osm_200.php
      <html>
      <head>
      <meta name="generator" content="PhpED 12.0 (Build 12010, 64bit)">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Tags</title>
      <meta name="creation-date" content="06/04/2014">
      <style type="text/css">
      body, td, th {
          font-family: arial, sans-serif;
          font-size: 10pt;
      }
      table {
          border-collapse: collapse;
      }
      th {
          background-color: #369;
          color: white;
          padding: 5px 2px;
      }
      td {
          background-color: #EEE;
          padding: 2px;
      }
      </style>
      </head>
      <body>
      <table border='1'>
    <tr><th>id</th><th>lat</th><th>lon</th><th>name</th><th>addr:city</th><th>addr:country</th><th>addr:housenumber</th><th>addr:postcode</th><th>addr:street</th><th>amenity</th><th>cuisine</th><th>email</th><th>fax</th><th>opening_hours</th><th>operator</th><th>phone</th><th>smoking</th><th>website</th><th>wheelchair</th></tr>
    <tr><td>667927886</td><td>0.0000000</td><td>49.4909668</td><td>Churrascaria Brasil Tropical</td><td>Mannheim</td><td>DE</td><td>5</td><td>68161</td><td>Collinistraße</td><td>restaurant</td><td></td><td></td><td></td><td></td><td></td><td>+496211225596</td><td></td><td></td><td>limited</td></tr>
    <tr><td>689928440</td><td>0.0000000</td><td>49.4798813</td><td>Epirus</td><td></td><td></td><td></td><td></td><td></td><td>restaurant</td><td>greek</td><td>epirus70@hotmail.de</td><td>0621/4407 762</td><td>Mo-Sa 12:00-15:00,18:00-24:00</td><td></td><td>0621/4407 761</td><td>separated</td><td>http://epirus-ma.blogspot.com/</td><td>no</td></tr>
    <tr><td>689928445</td><td>0.0000000</td><td>49.4799423</td><td>Ristorante Augusta</td><td></td><td></td><td></td><td></td><td></td><td>restaurant</td><td>italian</td><td>gianlucascurti@ristorante-augusta.de</td><td></td><td>Mo-Fr 12:00-14:00,18:00-23:00;Su 12:00-14:00,18:00-23:00</td><td></td><td>0621 449872</td><td></td><td>ristorante-augusta.com/</td><td>no</td></tr>                                                                                                                                                                         
    <tr><td>2064639440</td><td>0.0000000</td><td>49.4873199</td><td>Kilim  - Café und Bar Restaurant</td><td></td><td></td><td></td><td></td><td></td><td>restaurant</td><td>turkish</td><td>info@lynso.de</td><td></td><td>Su-Th 17:00-1:00; Fr, Sa 17:00-3:00</td><td>Cengiz Kaya</td><td>06 21 - 43 755 371</td><td></td><td>http://www.kilim-mannheim.de/</td><td></td></tr>                                                                                                                                                                                
    <tr><td>2126473801</td><td>0.0000000</td><td>49.4851189</td><td>Vapiano</td><td></td><td></td><td></td><td></td><td></td><td>restaurant</td><td>italian</td><td>mannheim1@vapiano.de</td><td>+49 621 1259 779</td><td>Su-Th 10:00-24:00; Fr-Sa 10:00-01:00</td><td>Vapiano</td><td>+49 621 1259 777</td><td></td><td>http://www.vapiano.de/newsroom/?store=29</td><td>yes</td></tr>                                                                                                                                                                         
      </table>                                                                                                                                                                          
      </body>                                                                                                                                                                           
    </html>martin@linux-70ce:~/php>
    what do you say!? the dataset was stored in the db - and all seems to go well.
    And i got back the above mentioned terminal-output.

    these steps belong to my preliminary work!

    again youre right: sure thing!!! i need to understand fully the db-structure and the sheme!
    i subsequently need to make some pre-thought and analysis.- this work will be done in the next few weeks!!!


    dear docbop and gregm love to hear from you


    many many greetings
    yours say


    btw:docbop and gregm - please have a look and see the attached image - how it should look like in the db

    i am very very glad that you are in this forum - you rock!!!
    Attached Images Attached Images
    Akoya P 6512 15" OpenSuse 13.1: AMD Athlon X2 P320
    Samsunng q 210, 12,1" OpenSuse 13.1: Intel® Core™ 2 Duo Proz. P8400 2,26 GHz 1066 MHz FSB 3 MB

  8. #7
    Linux Engineer
    Join Date
    Dec 2013
    Posts
    1,488
    I'm glad you're making progress. A couple of comments: using key and value as fields means you don't have context for the contents, to get a specific data value means searching the keys. If you build the tables using the actual keys that you are wanting to save then you can directly access the data. You'll want a foreign key as an index into the node table in order to reference the table/s that contain the data values.

Posting Permissions

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