开发者

Searching for Array Key in $_POST, PHP

开发者 https://www.devze.com 2023-02-07 16:55 出处:网络
I am trying to add commenting like StackOverflow and Facebook uses to a site I\'m building. Basically, each parent post will have its own child comments. I plan to implement the front-end with jQuery

I am trying to add commenting like StackOverflow and Facebook uses to a site I'm building. Basically, each parent post will have its own child comments. I plan to implement the front-end with jQuery Ajax but I'm struggling with how to best tackle the PHP back-end.

Since having the same name and ID for each form field would cause validation errors (and then some, probably), I added the parent post's ID to each form field. Fields that will be passed are commentID, commentBody, commentAuthor - with the ID added they will be commentTitle-12, etc.

Since the $_POST array_key will be different each time a new post is processed, I need to trim off the -12 (or whatever the ID may be) from the $_POST key, leaving just commentTitle, commentBody, etc. and its associated value.

Example

$_POST['commentTitle-12']; //how it would be received after submission
$_POST['commentTitle']; //this is what I am aiming for

Many thanks

SOLUTION Thanks to CFreak-

//Basic example, not actual script
<?php
if (array_key_exists("send", $_POST)) {
    $title = $_POST['title'][0];
    $body = $_POST['body'][0];
    echo $title . ', ' . $body;
}
?>
<html>
<body>
<form name="test" id="test" method="post" action="">
<input type="text" name="title[]"/>
<input type="text" name="body[]"/>
<input type="submit" name="send" id="send"/>
</form>
</body>
</html>

Update 2 Oops, kind of forgot the whole point of it - unique names (although it's been established that 1) this isn't really necessary and 2) probably better, for this application, to do this using jQuery instead)

//Basic example, not actual script
    <?php
    if (array_key_exists("send", $_POST)) {
        $id = $_POST['id'];
        $title = $_POST['title'][$id];
        $b开发者_如何学Goody = $_POST['body'][$id];
        echo $title . ', ' . $body;
    }
    ?>
    <html>
    <body>
    <form name="test" id="test" method="post" action="">
    <input type="text" name="title[<?php echo $row['id'];?>]"/>
    <input type="text" name="body[<?php echo $row['id'];?>]"/>
    <input type="hidden" name="id" value="<?php echo $row['id']; //the ID?>"/>
    <input type="submit" name="send" id="send"/>
    </form>
    </body>
    </html>


PHP has a little trick to get arrays or even multi-dimensional arrays out of an HTML form. In the HTML name your field like this:

<input type="text" name="commentTitle[12]" value="(whatever default value)" />

(you can use variables or whatever to put in the "12" if that's what you're doing, the key is the [ ] brackets.

Then in PHP you'll get:

$_POST['commentTitle'][12]

You could then just loop through the comments and grabbing each by the index ID.

You can also just leave it as empty square brackets in the HTML:

<input type="text" name="commentTitle[]" value="(whatever default value)" />

That will just make it an indexed array starting at 0, if you don't care what the actual ID value is.

Hope that helps.


You just have to iterate through $_POST and search for matching keys:

function extract_vars_from_post($arr) {
    $result = array();
    foreach ($arr as $key => $val) {
        // $key looks like asdasd-12
        if (preg_match('/([a-z]+)-\d+/', $key, $match)) {
            $result[$match[1]] = $val;
        } else {
            $result[$key] = $val;
        }
    }

    return $result;
}

Didn't test the code, though

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号