errore inserimento creazione stanza

  • Creatore Discussione Creatore Discussione Imperor
  • Data di inizio Data di inizio

Imperor

Utente Attivo
25 Nov 2010
102
2
18
Roma
www.fcfclean.it
ciao e ben ritrovati ;) sono riuscito a creare un sito di chat dove l'utente si registra e può creare la sua stanza e diventa admin fin qui funziona tutto ma se l'utente che è diventato admin quando prova a creare un'altra stanza mi da errore che non riesco a capire
posto i codici
Codice:
Error: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`prova`.`chatrooms`, CONSTRAINT `chatrooms_ibfk_1` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`))
----------------------------------------
forse è qui l'errore???
CREATE TABLE `chatrooms` (
  `id` int(11) NOT NULL,
  `name` varchar(100) NOT NULL,
  `created_by` int(11) DEFAULT NULL,
  `topic` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
 <?php
                            if ($_SERVER['REQUEST_METHOD'] === 'POST') {
                                $chatroomName = $_POST['chatroom_name'];
                                $topic = $_POST['topic'];
                                $userId = $_SESSION['user_id'];

                                try {
                                    // Inserimento della chatroom
                                    $stmt = $pdo->prepare("INSERT INTO chatrooms (name, topic, created_by) VALUES (:name, :topic, :created_by)");
                                    $stmt->execute(['name' => $chatroomName, 'topic' => $topic, 'created_by' => $userId]);
                                    $chatroomId = $pdo->lastInsertId();

                                    // Assegnazione del ruolo di amministratore
                                    $role = 'admin';
                                    $stmt = $pdo->prepare("INSERT INTO user_roles (user_id, chatroom_id, role) VALUES (:user_id, :chatroom_id, :role)");
                                    $stmt->execute(['user_id' => $userId, 'chatroom_id' => $chatroomId, 'role' => $role]);
                                    
                                    $stmt = $pdo->prepare("UPDATE users SET role = :role WHERE id = :id");
                                    $stmt->execute(['id' => $userId, 'role' => $role]);

                                    echo "Chatroom created and user assigned as admin";
                                } catch (PDOException $e) {
                                    echo 'Error: ' . $e->getMessage();
                                }
                            }
                            ?>
                            <form method="post">
                                <div class="form-group"><h6>Nome stanza</h6>
                                    <div class="col-sm-10"><input type="text" name="chatroom_name" value="" class="form-control" autocomplete="off"></div>
                                </div>
                                
                                <div class="form-group"><h6>Descrizione stanza</h6>
                                    <div class="col-sm-10"><input type="text" name="topic" value="" class="form-control" autocomplete="off"></div>
                                </div>
                                
                                <div class="form-group">
                                    <div class="col-sm-4 col-sm-offset-1"><br>
                                        <button class="btn btn-primary" value="submit" name="create_chatroom" type="submit">Create room</button>
                                    </div>
                                </div>
                            </form>
 
ciao e ben ritrovati ;) sono riuscito a creare un sito di chat dove l'utente si registra e può creare la sua stanza e diventa admin fin qui funziona tutto ma se l'utente che è diventato admin quando prova a creare un'altra stanza mi da errore che non riesco a capire
posto i codici
Codice:
Error: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`prova`.`chatrooms`, CONSTRAINT `chatrooms_ibfk_1` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`))
----------------------------------------
forse è qui l'errore???
CREATE TABLE `chatrooms` (
  `id` int(11) NOT NULL,
  `name` varchar(100) NOT NULL,
  `created_by` int(11) DEFAULT NULL,
  `topic` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
 <?php
                            if ($_SERVER['REQUEST_METHOD'] === 'POST') {
                                $chatroomName = $_POST['chatroom_name'];
                                $topic = $_POST['topic'];
                                $userId = $_SESSION['user_id'];

                                try {
                                    // Inserimento della chatroom
                                    $stmt = $pdo->prepare("INSERT INTO chatrooms (name, topic, created_by) VALUES (:name, :topic, :created_by)");
                                    $stmt->execute(['name' => $chatroomName, 'topic' => $topic, 'created_by' => $userId]);
                                    $chatroomId = $pdo->lastInsertId();

                                    // Assegnazione del ruolo di amministratore
                                    $role = 'admin';
                                    $stmt = $pdo->prepare("INSERT INTO user_roles (user_id, chatroom_id, role) VALUES (:user_id, :chatroom_id, :role)");
                                    $stmt->execute(['user_id' => $userId, 'chatroom_id' => $chatroomId, 'role' => $role]);
                                   
                                    $stmt = $pdo->prepare("UPDATE users SET role = :role WHERE id = :id");
                                    $stmt->execute(['id' => $userId, 'role' => $role]);

                                    echo "Chatroom created and user assigned as admin";
                                } catch (PDOException $e) {
                                    echo 'Error: ' . $e->getMessage();
                                }
                            }
                            ?>
                            <form method="post">
                                <div class="form-group"><h6>Nome stanza</h6>
                                    <div class="col-sm-10"><input type="text" name="chatroom_name" value="" class="form-control" autocomplete="off"></div>
                                </div>
                               
                                <div class="form-group"><h6>Descrizione stanza</h6>
                                    <div class="col-sm-10"><input type="text" name="topic" value="" class="form-control" autocomplete="off"></div>
                                </div>
                               
                                <div class="form-group">
                                    <div class="col-sm-4 col-sm-offset-1"><br>
                                        <button class="btn btn-primary" value="submit" name="create_chatroom" type="submit">Create room</button>
                                    </div>
                                </div>
                            </form>
risolto :)
 

Discussioni simili