Мой ввод сообщения не попадает в базу данных - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу отправить сообщение другу, но оно не хочет попадать в мою базу данных, но впоследствии отображается в URL, даже если я использую $ _POST. Я получаю свой currentuserID и мой receientID (человек, которому я должен отправить), потому что я var_dump, оба и получаю оба идентификатора. Мой SQL запрос не должен быть неправильным. Я подумал, что проверил несколько человек (но когда я тестировал в базе данных, это выдало ошибку. НО, когда я вставил в него другой запрос, который работает, он выдал ту же ошибку, поэтому я не думаю, что это проблема).

Так что я понятия не имею, в чем может быть проблема ..

Мое сообщение. php:

<?php
session_start();
if (empty($_SESSION['user_id'])) {
    header('Location: login.php');
}
//Hier mag enkel het gesprek te zien zijn tussen 2 users die met elkaar bevriend zijn
//tabel buddies >buddyID1 & buddyID2

include_once(__DIR__."/inc/header.inc.php");
include_once(__DIR__."/classes/Message.php");
include_once(__DIR__."/classes/User.php");

$userArray = $_SESSION['user_id'];
$userID = implode(" ", $userArray);
$currentUser = $userID;

//var_dump($_POST);

$recipientID = implode(" ",$_POST);//om het getal terug te krijgen van de recipientID
echo "currentUser: ";
var_dump($currentUser);
echo ".  recipientID: ";
var_dump($recipientID);



//msg wordt in databank gestopt
if(!empty($_POST['message'])){
    $msg = new Message();
    $msg->setUserID($currentUser);
    $msg->setRecipientID($recipientID);
    $msg->setMessage(htmlspecialchars($_POST['message']));
    $msg->messageSchrijven();
}

//msg wordt afgedrukt/gereturned
$msg2 = new Message();
$messages = $msg2->messagePrint();


?><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>
        <form action="" methd="post">
        <h1>Je chat nu met <?php echo $recipientID ?></h1>
            <input type="text" name="message">
            <input type="hidden" name="recipientID" id="" value="<?php echo $recipientID?>">
            <input type="hidden" name="senderID" id="" value="<?php echo $currentUser?>">
            <div class="">
                <button type="submit" class="btn" style="width: 90px">Send</button>
            </div>
        </form>
    </div>

    <?php foreach($messages as $message): ?>
        <div>                
        <p><?php echo $message["senderID"].": " . $message["content"]; ?></p>
        </div>
    <?php endforeach;?>


</body>
</html>

Сообщение моего класса. php:

<?php 
include_once (__DIR__ . "/Db.php");
class Message{
    private $userID;
    private $message;
    private $recipientID;

//getter setter userID
    public function getUserID()
    {
        return $this->userID;
    }

    public function setUserID($userID)
    {
        $this->userID = $userID;

        return $this;
    }

// getter setter recipientID
    public function getRecipientID()
    {
        return $this->recipientID;
    }

    public function setRecipientID($recipientID)
    {
        $this->recipientID = $recipientID;

        return $this;
    }

//getter setter message
    public function getMessage()
    {
        return $this->message;
    }

    public function setMessage($message)
    {
        $this->message = $message;

        return $this;
    }

// om je berichtje in de DB te steken
    public function messageSchrijven(){ 
            $conn = Db::getConnection();

            $statement = $conn->prepare("INSERT INTO msg(senderID,recipientID,content) values(:senderID,:recipientID,:content)");
            $statement->bindValue(":senderID", $this->getUserID()); // huidige user
            $statement->bindValue(":recipientID", $this->getRecipientID()); // de user naarwaar het verstuurd wordt
            $statement->bindValue(":content", $this->getMessage()); // het bericht
            $result = $statement->execute();
            $result = $statement->fetch(PDO::FETCH_ASSOC);
            return $result;
    }

// berichtje afprinten
    public function messagePrint(){ //$senderID,$recipientID
        $conn = Db::getConnection();
        $statement = $conn->prepare("SELECT * from msg where senderID = :senderID AND recipientID = :recipientID"); //where senderID = :senderID AND recipientID = :recipientID
        $statement->bindValue(":senderID", $this->getUserID());
        $statement->bindValue(":recipientID", $this->getRecipientID());
        $result = $statement->execute();
        $result = $statement->fetchAll(PDO::FETCH_ASSOC);
        return $result;
    }


}

Я получаю свой получатель с другой страницы, где перечислены мои "друзья", если я наберу sh на 1 из них, я получу его / ее идентификатор пользователя с меня на страницу "message. php".

Так что я не знаю, если это что-то с моим запросом, или я теряю свои идентификаторы пользователя, когда я пытаюсь отправить его. Но я попытался протестировать его, установив вручную ID пользователя с помощью

$msg->setUserID("9");
$msg->setRecipientID("10");

, но это не работает .. (currentUserID = 9, receientID = 10 в данный момент, кстати). Та же проблема с печатью сообщений .. Я не получаю их. База данных подключена, потому что я могу войти и зарегистрироваться без проблем.

1 Ответ

0 голосов
/ 07 апреля 2020

IMPLODE

Прежде всего, я думаю, что вы неправильно понимаете метод взрыва. В вашем примере $recipientID

$recipientID = implode(" ",$_POST); //om het getal terug te krijgen van de recipientID

должно содержать что-то вроде «10 9 Это мое сообщение», и это не идентификатор. Добавьте некоторые проверки и измените их на

$recipientID = $_POST['recipientID'];

Вы найдете некоторые сведения о имплозе на php. net

PDO EXECUTE

Если вы используете PDO, метод execute возвращает логическое значение (поиск по php. net PDP execute ). Поэтому, если вы не используете возвращаемое значение, просто используйте его следующим образом:

$statement->execute();

Дополнительно удалите строку $result = $statement->fetchAll(PDO::FETCH_ASSOC); в методе вставки.

ОШИБКИ

После execute() PDO вы можете использовать

print_r($statement->errorInfo());

, чтобы получить ошибки вашего запроса. Вы можете получить больше информации здесь

DATABASE

Мы не можем видеть схему вашей базы данных, возможно, вы оскорбляете уникальные ключи Ваша таблица или тип поля?

HTML

С моей точки зрения, я всегда буду писать пробел между именем переменной и объявлением php, например,

<input type="hidden" name="recipientID" value="<?php echo $recipientID; ?>" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...