PROBLEMA CON ARRAY

thanatos

Utente Attivo
29 Gen 2021
38
0
6
Roma
Sto cercando di creare una sorta di diario con un array php salvando il "post" nell'array. So che sarebbe meglio usare un database SQL ma per vari motivi sono costretto a usare questo metodo. Ho creato questo script:
PHP:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<div class="diario">
    <center>
        <h1>DIARIO</h1>
    <center>
    <div align="left">
        <form action="testDiario.php" method="post">
            <textarea name="msg" id="msg" cols="30" rows="10"></textarea>
            <input type="submit" value="invia">
        </form>
    </div>
    <p>
    <?php
        $msg = array("a", "b");
        $i = count($msg);
        $msg1 = $_POST['msg'];

        $msg[$i] = $msg1;
        
        print_r($msg);
    ?>
    </p>
</body>
</html>
Funziona, il problema è che aggiungendo un valore questo viene sostituito all'ultimo elemento dell'array.
Spero di essere stato chiaro, comunque per qualunque chiarimento chiedete
 
aggiungendo un valore questo viene sostituito all'ultimo elemento dell'array
ed é corretto, visto che inizializzi l'array ad ogni "invio" $msg = array("a", "b");
quindi il primo elemento disponibile sarà sempre quello con indice 2

se tu volessi gestire più elementi oltre il "2"
devi cambiare il codice, riprendendo / salvando l'array nelle "sessioni", per esempio
 
ed é corretto, visto che inizializzi l'array ad ogni "invio" $msg = array("a", "b");
quindi il primo elemento disponibile sarà sempre quello con indice 2

se tu volessi gestire più elementi oltre il "2"
devi cambiare il codice, riprendendo / salvando l'array nelle "sessioni", per esempio
Potresti spiegarmi brevemente come fare? Grazie mille per l'aiuto
 
PHP:
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<div class="diario">
    <center>
        <h1>DIARIO</h1>
    </center>
    <div align="left">
        <form action="Diario.php" method="post">
            <textarea name="msg" id="msg" cols="30" rows="10"></textarea>
            <input type="submit" value="invia">
        </form>
    </div>
    <p>
    <?php
        if(isset($_POST['msg'])) {
            if (!isset($_SESSION['msg'])) {
                $msg = array();
                $i   = 0;
            }
            else {
                $msg = $_SESSION['msg'];
                $i   = count($msg);
            }
            $msg1    = $_POST['msg'];
            $msg[$i] = $msg1;
            print_r($msg);

            $_SESSION['msg'] = $msg;
        }
    ?>
    </p>
</body>
</html>

risultato (esempio minimo)

1622209489896.png
 
PHP:
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<div class="diario">
    <center>
        <h1>DIARIO</h1>
    </center>
    <div align="left">
        <form action="Diario.php" method="post">
            <textarea name="msg" id="msg" cols="30" rows="10"></textarea>
            <input type="submit" value="invia">
        </form>
    </div>
    <p>
    <?php
        if(isset($_POST['msg'])) {
            if (!isset($_SESSION['msg'])) {
                $msg = array();
                $i   = 0;
            }
            else {
                $msg = $_SESSION['msg'];
                $i   = count($msg);
            }
            $msg1    = $_POST['msg'];
            $msg[$i] = $msg1;
            print_r($msg);

            $_SESSION['msg'] = $msg;
        }
    ?>
    </p>
</body>
</html>

risultato (esempio minimo)

Vedi l'allegato 7864
Poi provo e ti faccio sapere. Comunque grazie mille
 
PHP:
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<div class="diario">
    <center>
        <h1>DIARIO</h1>
    </center>
    <div align="left">
        <form action="Diario.php" method="post">
            <textarea name="msg" id="msg" cols="30" rows="10"></textarea>
            <input type="submit" value="invia">
        </form>
    </div>
    <p>
    <?php
        if(isset($_POST['msg'])) {
            if (!isset($_SESSION['msg'])) {
                $msg = array();
                $i   = 0;
            }
            else {
                $msg = $_SESSION['msg'];
                $i   = count($msg);
            }
            $msg1    = $_POST['msg'];
            $msg[$i] = $msg1;
            print_r($msg);

            $_SESSION['msg'] = $msg;
        }
    ?>
    </p>
</body>
</html>

risultato (esempio minimo)

Vedi l'allegato 7864
Ho provato e il problema iniziale è risolto. Però esiste un modo per "salvare" l'array e mantenerlo anche quando si apre nuovamente la pagina?
 
PHP:
<?php

session_start();

$postDaEliminare = $_POST['postDaEliminare'];

$postDaEliminare = str_replace('"', "", $postDaEliminare);

$msg = \array_diff($postDaEliminare);

echo $postDaEliminare;

?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>

<body>

<div class="diario">

    <center>

        <h1>DIARIO</h1>

    <center>

    <div align="left">

        <form action="testDiario.php" method="post">

            <textarea name="msg" id="msg" cols="30" rows="10"></textarea>

            <input type="submit" value="invia">

        </form>

    </div>

    <div>

    <?php

    

    $data = date("d/m/Y");

    $time = date("h:i A");

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

        if (!isset($_SESSION['msg'])) {

            $msg = array();

            $i = 0;

        }

        else {

            $msg = $_SESSION['msg'];

            $i = count($msg);

        }

        $msg1 = $_POST['msg'];

        $msg[$data . ", " . $time] = $msg1;

        print_r($msg);



        $_SESSION['msg'] = $msg;

    }

    

    foreach ($msg as $key => $value) {

        $indice = $key;

        $mes = $value;

        $post = "

        <p class=\"data inline\">$indice</p>

        <p class=\"post inline\">$mes</p>

        ";

        echo($post);

    }

    

    ?>

    </div>

    <div>

        <form action="testDiario.php" method="post">

            <select name="postDaEliminare">

                <?php

                    foreach ($msg as $key => $value) {

                        $indice = $key;

                        echo('<option class="width" value="' . $value . '">"' . $indice . '"</option>');

                    }

                ?>

            </select>

            <input type="submit" value="ELIMINA POST">

        </form>

    </div>

</body>

</html>
Devo eliminare l'elemento dell'array che viene scelto dall'utente all'interno della select conn ame="postDaEliminare". Però ogni volta che provo l'elemento non viene tolto (ho provato anche con unset() e l'indice). Come posso fare?
 
nel tuo codice insistono 2 grossi problemi,

1 - la logica é molto confusa, dovresti disegnare il "diagramma di flusso" dell'applicazione in modo da avere chiari gli step che devono essere eseguiti ed la loro sequenza

2 - il codice sottostante consente la perdita dei messaggi, perchè possono essere memorizzati con la stessa chiave, per chiarezza in un minuto posso inserire molti messaggi, l'ultimo sovrascrive i precedenti nel minuto

PHP:
$time = date("h:i A");

$msg[$data . ", " . $time] = $msg1;
 

Discussioni simili