Как мне успешно использовать функцию array_intersect () здесь? - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь создать систему, в которой администратор может добавлять несколько человек одновременно в базу данных. Я хочу, чтобы эта система не позволяла администратору добавлять людей с адресами электронной почты, уже существующими в базе данных.

ЕСЛИ одно из писем в _POST ["адрес электронной почты"] совпадает с одним из адресов электронной почты в БД, пользователь должен получить сообщение о том, что одно из писем уже существует в база данных. Чтобы добиться этого, я попытался использовать функцию array_intersect (). Однако после этого я получаю предупреждение:

Предупреждение: array_intersect (): Аргумент # 2 не является массивом в ... addusers. php в строке 41

Сначала я подумал, что это как-то связано с тем фактом, что мой второй аргумент был ассоциативным массивом, поэтому я попробовал функцию array_intersect_asso c, которая возвращает то же предупреждение. Как я могу решить эту проблему?

Код добавляющих пользователей. php

<?php
session_start();
error_reporting(E_ALL); 
ini_set('display_errors',1);

$conn = mysqli_connect('localhost','*','*','*');
$condition = false; // this is for the other part of my code which involves inserting the output into db

$name = $_POST["name"];
$affix = $_POST["affix"];
$surname = $_POST["surname"];
$emailaddress = $_POST["emailaddress"];
$password = $_POST["password"];

//amount of emailaddresses in db
$checkquery2 = mysqli_query($conn, "
                SELECT COUNT(emailaddress)
                FROM users
                                        ");
$result2 = mysqli_fetch_array($checkquery2);

// the previously mentioned amount is used here below
for($i=0; $i<$result2[0]; $i++){
// the actual emails in the db itself
    $q1 = mysqli_query($conn, "
              SELECT
                    emailaddress
              FROM
                    users
            ");

// goes through all the emails 
    $result_array1 = array();
    while ($row1 = mysqli_fetch_assoc($q1)) {
        $result_array1[] = $row1;
    }

    $query1 = $result_array1[$i]["emailaddress"];
}

// HERE LIES THE ISSUE 
for($i=0; $i<count($emailaddress); $i++){
    if (count(array_intersect_assoc($emailaddress, $query1)) > 0) {
        echo "One of the entered emails already exists in the database...";
        echo '<br><button onclick="goBack()">Go Back</button>
    <script>
    function goBack() {
      window.history.back();
    }
    </script><br>';

        $condition = false;
    }
    else{
        $condition = true;
    }
}

РЕДАКТИРОВАТЬ , как отмечают комментарии, $ query1 это действительно не массив, это строка. Тем не менее, проблема остается, даже если я удаляю индекс и «[адрес электронной почты]», как в коде, всегда выбирается оператор else, а не if.

1 Ответ

2 голосов
/ 03 марта 2020

$query1 - это не массив, это всего лишь один адрес электронной почты. Вы должны нажать на него в l oop, не перезаписывая его.

У вас также есть больше циклов, чем вам нужно. Вам не нужно выполнять SELECT emailaddress FROM users запрос в al oop, и вам не нужно проверять пересечение в al oop. А поскольку вам не нужны эти циклы, вам не нужно сначала подсчитывать счет.

<?php
session_start();
error_reporting(E_ALL); 
ini_set('display_errors',1);

$conn = mysqli_connect('localhost','*','*','*');
$condition = false; // this is for the other part of my code which involves inserting the output into db

$name = $_POST["name"];
$affix = $_POST["affix"];
$surname = $_POST["surname"];
$emailaddress = $_POST["emailaddress"];
$password = $_POST["password"];

$q1 = mysqli_query($conn, "
      SELECT
            emailaddress
      FROM
            users
    ");

// goes through all the emails 
$result_array1 = array();
while ($row1 = mysqli_fetch_assoc($q1)) {
    $result_array1[] = $row1['emailaddress'];
}

$existing_addresses = array_intersect($emailaddress, $result_array1);
if (count($existing_addresses) > 0) {
    echo "Some of the entered emails already exists in the database: <br>" . implode(', ', $existing_addresses);
    echo '<br><button onclick="goBack()">Go Back</button>
    <script>
    function goBack() {
      window.history.back();
    }
    </script><br>';

    $condition = false;
}
else{
    $condition = true;
}
...