Using preg_match on array parameters from POST

The problem I am facing 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 want to use preg_match on the values ​​received in 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

a while loop to assign a value in an INSIDE request. What I now get in my base is 0 and 1. Nothing else. What is the correct way preg_match

for me to display JUST numbers inside the paranthesis? and is there a better solution to this problem?

+3


source to share


2 answers


It sounds like you don't want to match, you only want to extract a portion of each value $_POST['receiver-check']

, so preg_replace()

would be a suitable function.

$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);
}

      



This should give you an array of receiver IDs ($ receiverIds), e.g .:

array(
  [0] => 123, 
  [1] => 456, 
  [2] => 789
  );

      

+1


source


You can do something like this.

This way you can insert it into your DB. but you will ask your Db 3 times to insert 3 records.

<?php

//use your connection Data
$user = "root";
$pass = "***";
$host = "localhost";
$dbdb = "TestDataBase";

$connect = mysqli_connect($host, $user, $pass, $dbdb);
if(!$connect)
{
    trigger_error('Error connection to database: '.mysqli_connect_error());
}

//check if receiver-check is set or not
if(isset($_POST['receiver-check'])){
      $msg_receivers = $_POST['receiver-check'];


      // iterate through $msg_receivers
      foreach($msg_receivers AS $value){
          preg_match_all("/([0-9]{3})/", $value, $msg_receiver_query);

            //Query, just change the table name and columns to what ever you need.
            $sql = "INSERT INTO `table` (`column1`) VALUES ('" .$msg_receiver_query[0][0] . "')";

            if (mysqli_query($connect, $sql)) {
                  echo 'Record(s) created successfully<br>';
            } else {
                  echo $sql . '"<br>"' . mysqli_error($connect);
            }
      }

}else{
      echo "nothing is set";
}
?>

      



Possibly ittle for the advanced, but you can do it in a query one .

<?php

//use your connection Data
$user = "root";
$pass = "***";
$host = "localhost";
$dbdb = "TestDataBase";

$connect = mysqli_connect($host, $user, $pass, $dbdb);
if(!$connect)
{
    trigger_error('Error connection to database: '.mysqli_connect_error());
}

//check if receiver-check is set or not
if(isset($_POST['receiver-check'])){
      $msg_receivers = $_POST['receiver-check'];

      $inputArray = '';

      // iterate through $msg_receivers
      foreach($msg_receivers AS $value){
          preg_match_all("/([0-9]{3})/", $value, $msg_receiver_query);

          //insert all output in to an array
          $inputArray [] =  "('" . $msg_receiver_query[0][0] . "')";
      }

      //Insert all outputs in 1 query
      $sql = "INSERT INTO `testtable` (`column1`) VALUES " . implode(",",$inputArray) . "";

      if (mysqli_query($connect, $sql)) {
            echo 'Record(s) created successfully<br>';
      } else {
            echo $sql . '"<br>"' . mysqli_error($connect);
      }

}else{
      echo "nothing is set";
}
?>

      

0


source







All Articles