Visualizzazione risultati 1 fino 10 di 10
Like Tree3Likes
  • 1 Post By darbula
  • 1 Post By darbula
  • 1 Post By darbula

Discussione: utente registrato crea stanza chat

  1. #1
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    139

    Predefinito utente registrato crea stanza chat

    ciao ho creato usando xampp un sito con registrazione login e ogni utente può visitare il profilo altrui può anche creare una stanza ( chat ) dove può chattare e la lista delle stanza create si vedono e riconosce ogni stanza creata ma nel database inserisce solo il nome stanza la data di creazione e l'utente che l'ha creata chiedo aiuto grazie posto ciò che ho creato questo è il file sql

    CREATE TABLE `chat` (
    `id` int(11) NOT NULL,
    `chatname` varchar(40) CHARACTER SET utf8 NOT NULL,
    `msg` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
    `name` varchar(40) CHARACTER SET utf8 NOT NULL,
    `date` timestamp NOT NULL DEFAULT current_timestamp()
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    Codice PHP:
    questa è la pagina dove si può vedere la lista stanze e/o crearla
    <form method="post" action="creachat.php">
    Nome stanza:<br>
    <input type="text" name="chatname">
    <input type="hidden" value="<?= $_SESSION['name'] ?>">
    <br><br>
    <input type="submit" name="save" value="submit">
    </form>
    </div>
    </div>
    <?php
    include_once 'db.php';
    if(isset(
    $_POST['save']))
    {
    $chatname = $_POST['chatname'];

    $sql = "INSERT INTO chat (chatname, name)
    VALUES ('
    $chatname','".$_SESSION['name']."')";
    if (
    mysqli_query($con, $sql)) {
    echo
    "New record created successfully !";
    } else {
    echo
    "Error: " . $sql . "
    "
    . mysqli_error($con);
    }
    mysqli_close($con);
    }
    ?>
    </div>
    </div>

    <?php
    $servername
    = "localhost";
    $username = "root";
    $password = "";
    $dbname = "test";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
    die(
    "Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT id, chatname, name, date FROM chat; ";
    $result = $conn->query($sql);

    while(
    $row = $result->fetch_assoc()) {
    ?>

    </div>
    <div class="container">
    <div class="card">
    <table class="table">
    <thead>
    <tr>
    <th scope="col">Creata da</th>
    <th scope="col">Nome stanza</th>
    <th scope="col">Data creata</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <th scope="row"><?php echo $row['name']; ?></th>
    <td><?php echo $row['chatname']; ?></td>
    <td><?php echo $row['date']; ?></td>
    <td><?php
    echo '<td><a href="chatname.php?id=' . $row['chatname'] . '">Entra</a></td>';
    ?></td>
    </tr>
    </tr>
    </tbody>
    </table>
    </div>
    <?php
    }

    ?>
    --------------------------------------
    questa è la pagina chat
    <?php
    include 'db.php';

    $id = $_GET['id'];


    $query=mysqli_query($con,"SELECT chatname, name, msg FROM chat where chatname='$id'")or die(mysqli_error());
    while(
    $row=mysqli_fetch_array($query)){

    // Per stampare i dati
    $chatname= $row['chatname'];
    $name= $row['name'];
    $msg= $row['msg'];


    ?>
    </div>

    <?php
    include ("db.php");

    if(!
    $con)
    {
    die(
    mysqli_error());
    }

    if(isset(
    $_POST['submit'])){

    $name=$_POST['name'];
    $msg=$_POST['msg'];
    $id = $_GET['id'];
    mysqli_query($con,"insert into `chat` (chatname, msg, name) values (chatname='$id', '$msg' , '".$_SESSION['name']."', NOW())") or die(mysqli_error());
    }
    ?>
    </div>
    <div>
    <div class="panel panel-default" style="height: 400px;">
    <div style="height:10px;"></div>
    <span style="margin-left:10px;"><?php echo $row['chatname']; ?></span><br>
    <span style="font-size:10px; margin-left:10px;"><i>---------------------------------------------</i></span>
    <div style="height:10px;"></div>
    <div id="msg" style="margin-left:10px; max-height:320px; overflow-y:scroll;">
    </div>
    </div>

    <div class="container">
    <form method="post" action="chatname.php">
    <p class="lead emoji-picker-container">
    <input type="text" name="msg" id="msg" class="form-control" placeholder="Di la tua"data-emojiable="true">
    </p>
    <input type="hidden" value="<?= $_SESSION['name'] ?>">
    <input type="submit" name="submit" value="invia">
    </form>
    </div>
    Ultima modifica di fcfclean : 19-07-2021 alle ore 17.42.25

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    All'inizio inserisci error_reporting(-1);
    Sostituisci or die controllando il valore di ritorno per la funzione mysqli_query e independemente usa var_dump per vedere a video com'è la reale sintassi della query (giustamente dovrai inserirla dentro un contenitore di variabile semplice).
    Posso però già dire che non effettui la dovuta verifica per la variabile di sessione e altre variabili esterne (cioè che sono dovute da una probabile interazione dell'utente: $_GET, $_POST etc.).

    Codice PHP:
    //crea o recupera una sessione
    session_start();
    if(!isset(
    $_SESSION['name'])) {
    echo
    'non esisto';
    } else {
    // esisto, ma potrebbe anche trattarsi di una vecchia configurazione o errore nel codice sorgente.
    //si usa anche un timestamp
    }
    Da php 7.1, non è inizializzata la variabile $_SESSION se la sessione non è attiva.
    Ultima modifica di darbula : 19-07-2021 alle ore 20.57.52
    fcfclean likes this.

  3. #3
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    139

    Predefinito

    grazie x la risposta

  4. #4
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Figurati.
    Attendo l'esito, fammi sapere.
    Spero sia chiara la spiegazione, il dubbio permane finché non leggo ho risolto :D

  5. #5
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    139

    Predefinito

    ciao e grazie ancora sarà difficile riuscire a fare ciò sono un autodidatta non sono un programmatore mo carico i file sul mio dominio aruba
    Ultima modifica di fcfclean : 20-07-2021 alle ore 12.44.03

  6. #6
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Puoi sempre colmare con il motore di ricerche.
    La sessione http di php può essere tramite COOKIE, per richieste POST o GET nella parte finale della query string (?nome=valore). Vedi esempio su come comunicare tra più pagine (Qui tra due pagine).
    Come vedi dovrai aggiungere session_start(); sia quando vorrai creare la sessione che ti accomuna a quel specifico utente, nonché per recuperare tali informazioni.
    Codice PHP:
    $prima_variabile = 'Sono un testo';
    var_dump($prima_variabile);
    Strutture di controllo php, in questo caso occorre if.
    Quindi il messaggio che ti ho scritto in precedenza si trasforma in.
    Codice PHP:
    $resultset = "insert into `chat` (chatname, msg, name) values (chatname='$id', '$msg' , '".$_SESSION['name']."', NOW())";
    if(
    mysqli_query($con, $resultset) != true) {
    var_dump(mysqli_error());
    }
    var_dump($resultset); // Guarda se manca del testo nella stringa
    //poiché è una variabile che ingloba altri valori di variabili
    //in sintesi la sessione e le altre variabili dovranno occupare spazio nel testo, altrimenti non esistono
    Giustamente dovrai effettuare altri controlli con if, per la variabile $_SESSION['name'] e altre $_GET e/o $_POST.

    Cioè questo è la traduzione di ciò che ho detto in precedenza. http://forum.it.altervista.org/php-m...ml#post1473675
    Ultima modifica di darbula : 20-07-2021 alle ore 14.18.52 Motivo: corretto $resultset

  7. #7
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    139

    Predefinito

    sei mitico grazie mille

  8. #8
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Eventualmente apporta solo la modifica per la funzione mysqli_query senza or die ma come ti ho suggerito.
    Poi qui nel forum incolla la stringa con l'esito aspettato (significa copia il testo della variabile $resultset) e la stringa con il var_dump in modo che io la possa controllare (giustamente niente dati personali, tra cui password, mail e nomi utenti assoggettabili Realmente a qualcuno).
    Ultima modifica di darbula : 20-07-2021 alle ore 14.30.19
    fcfclean likes this.

  9. #9
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    139

    Predefinito

    sicuramente sbaglio qualcosa perché quando entro dentro la stanza e do invio ( dopo aver scritto il messaggio ) da pagina bianca e non inserisce nulla ho impostato cosi: se vuoi vedere il sito fcfclean.it/sito
    -----------------
    <?php
    include ("db.php");
    session_start();

    if(!$con)
    {
    die(mysqli_error());
    }

    if(isset($_POST['submit'])){

    $msg = $_POST['msg'];
    $chatname = '$id';
    var_dump($chatname);

    $resultset = "into `chat` (chatname, msg, name) values (chatname='$id',
    '$msg' , '".$_SESSION['name']."', NOW())";
    if(mysqli_query($con, $resultset) != true) {
    var_dump(mysqli_error());
    }
    var_dump($resultset);
    }
    ?>
    </div>
    <div>
    <div class="panel panel-default" style="height: 400px;">
    <div style="height:10px;"></div>
    <span style="margin-left:10px;"><?php echo $row['chatname']; ?></span><br>
    <span style="font-size:10px; margin-left:10px;"><i>-------------------------
    --------------------</i></span>
    <div style="height:10px;"></div>
    <div id="msg" style="margin-left:10px; max-height:320px; overflow-
    y:scroll;">
    </div>
    </div>

    <div class="container">
    <form method="post" action="chatname.php">
    <p class="lead emoji-picker-container">
    <input type="text" name="msg" id="msg" class="form-control" placeholder="Di
    la tua"data-emojiable="true">
    </p>
    <input type="hidden" value="<?= $_SESSION['name'] ?>">
    <input type="submit" name="submit" value="invia">
    </form>
    </div>
    </div>

  10. #10
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Non avere fretta di risolvere.
    Ho dimenticato e poi aggiungo in seguito anche insert, modifica anche tu.
    Codice aggiornato
    Poiché utilizzi var_dump è impossibile la pagina bianca se è una richiesta POST dopo aver premuto il pulsante submit del form HTML della pagina creachat.php(ergo $_POST['submit']), poi per accedere dovrai stare chatname.php?id=nome (variabile $_GET['id']) http://forum.it.altervista.org/php-m...ml#post1473665
    Per adesso limitati a fare due esempi il risultato atteso e il contenuto del var_dump, è qualcosa che tu puoi fare. Inoltre avrai la soddisfazione di capirne di più.
    EDIT Non verrà mai valutato l'inserimento del messaggio, perché da creachat.php senza id=nome invia a chatname.php (in chatname.php dovresti verificare $_POST['submit']).
    Devi avere le idee chiare, perché non riesci? Non si tratta di codice ma organizzare le proprie idee.

    Pensa a strutturare in pagina diverse.

    creazione_sessione.php
    Codice PHP:
    $_SESSION['test'] = 'test';
    recupero_sessione.php da non usare in contemporanea con creazione_sessione.php, appunto una richiesta a parte su qualsiasi pagina con estensione .php
    Codice PHP:
    session_start();
    if(!isset(
    $_SESSION['test'])) {
    include
    dirname(__FILE__) . '/creazione_sessione.php';
    }
    altra_pagina.php a tutte le altre pagine, ad eccezione di crezione_sessione.php e recupero_sessione.php
    Codice PHP:
    include dirname(__FILE__) . '/recupero_sessione.php';
    if(isset(
    $_SESSION['test'])) {
    echo
    'benvenuto ' . $_SESSION['test'];
    } else {
    echo
    'errore variabile sessione';
    }
    Ultima modifica di darbula : 21-07-2021 alle ore 05.45.45
    fcfclean likes this.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •