Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using preg_match on array from POST checkbox values

The problem I'm having is making preg_match work correctly for my array returned from my form.

<input type="checkbox" name="receiver-check[]" class="checkbox-id" value="Username 1 (123)">
<input type="checkbox" name="receiver-check[]" class="checkbox-id" value="Username 2 (456)">
<input type="checkbox" name="receiver-check[]" class="checkbox-id" value="Username 3 (789)">

So I wish to use preg_match on the values received through my form. This is how I use it.

$msg_receivers = !empty($_POST['receiver-check']) && is_array($_POST['receiver-check']) ? $_POST['receiver-check'] : array();
    $receiverIds = array();
    foreach($msg_receivers as $receiver) {
        $receiverIds[] = preg_replace('/\((\d+)\)$/', "$1", $receiver);
    }
    $number_of_receivers = count($receiverIds);
    $while_count = 0;
    while($number_of_receivers >= ($while_count + 1)){
        $sql = <<< EOF
        INSERT INTO private_messages (
        message_subject,
        message_content,
        message_deliver,
        message_receive,
        message_status,
        message_datetime,
        message_to_stab
        )VALUES
        (?,?,?,?,'2',?,?);
EOF;
        $stmt = $mysqli->prepare($sql) or die ("Feil i database<br>" . $sql . "<br><b>Feilmelding:</b> " . $mysqli->error);
        $stmt->bind_param("ssiiii",$message_subject,$message_content, $_SESSION['user_id'],$receiverIds[$while_count],$message_datetime,$message_to_stab);
        $stmt->execute() or die("noe gikk galt");
        $msg_num_rows = $stmt->num_rows;
        if($msg_num_rows = 0){
            $msg = "Feilmelding: Klarte ikke å sende meldingen.";
        }
        else{
            $msg = "Meldingen har blitt sendt.";
        }
        $stmt->free_result();
        $stmt->close();
        $while_count ++;
    }

Then I use $msg_receiver_query to asign a value in the query INSIDE the while loop. What I currently receive in my database is 0 and 1. Nothing else. What would the correct preg_match be for me to output JUST the numbers inside the paranthesis? and is there a more effective solution to this problem of mine?

like image 461
Gjert Avatar asked May 19 '26 14:05

Gjert


1 Answers

It looks like you don't want to match, you want to extract just a portion of each $_POST['receiver-check'] value - so preg_replace() would be the right function to use.

$msg_receivers = !empty($_POST['receiver-check']) && is_array($_POST['receiver-check']) 
             ? $_POST['receiver-check'] : array();

$receiverIds = array();

foreach($msg_receivers as $receiver) {
  $receiverIds[] = preg_replace('/^.*\((\d+)\)$/', "$1", $reciever);
}

That should give you an array of reciever ids ($receiverIds) like:

array(
  [0] => 123, 
  [1] => 456, 
  [2] => 789
  );
like image 179
CD001 Avatar answered May 22 '26 02:05

CD001



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!