Undefined index

  • Creatore Discussione Creatore Discussione Ghost
  • Data di inizio Data di inizio

Ghost

Nuovo Utente
6 Feb 2023
8
1
3
Ciao a tutti, ho iniziato da poco a lavorare come programmatore web e dopo qualche pagina di codici, sono inciampato in alcuni errori, il progetto che sto creando, richiede l'inserimento di dati in una tabella sql da php.
Parto col dire che il codice mi permette tranquillamente di inserire i vari dati nel database, solo che sia quando apro la pagina web, che quando la ricarico, aggiunge dei dati (ovviamente vuoti) alla tabella e inoltre mi esce il messaggio "Undefined index", per tutte le variabili dichiarate prima della query.

Il codice è il seguente: (la pagina l'ho chiamata ordine.php)

PHP:
<html>
    <head>
        <link rel="stylesheet" href="./css/ordine.css">
        <title>Ordine</title>
    </head>

    <body>
        <table align="center">
            <form method="POST" action="<?php echo$_SERVER['PHP_SELF']?>">
            <tr>
                <td align="center">Effettua un nuovo ordine</td>
            </tr>
            <tr>
                <!--raccolgo i dati del cliente-->
                <table align="center">
                        <tr>   
                            <td><label>Nome</label><input type="text" name="nome" placeholder="Giorgio" required></td>
                            <td><label>Cognome</label><input type="text" name="cogn" placeholder="Rossi" required></td>
                            <td><label>Soprannome</label><input type="text" name="sopr" placeholder="Gio"></td>
                            <td><label>Telefono</label><input type="tel" name="tele" placeholder="381 529 3590" pattern="[0-9]{3}[0-9]{3}[0-9]{4}"></td>
                        </tr>
                </table>

            <br>

                <!--raccolgo i dati del modello-->
                <table align="center">
                        <tr>
                            <td><label>Modello</label><input type="text" name="5" placeholder="10m" required></td>
                            <td><label>Lunghezza/cm</label><input type="number" name="6" placeholder="110,00" required></td>
                            <td><label>Larghezza/cm</label><input type="number" name="7" placeholder="45,89" required></td>
                            <td><label>Quantita</label><input type="number" name="8" placeholder="5" required></td>
                        </tr>
                </table>

            <br>

                <!--raccolgo i dati della versione-->
                <table align="center">
                        <tr>
                            <td><label>Versione</label><input type="text" name="versio" placeholder="123v" required></td>
                            <td><label>Lunghezza/cm</label><input type="number" name="lungh_v" placeholder="110,00" required></td>
                            <td><label>Larghezza/cm</label><input type="number" name="largh_v" placeholder="45,89" required></td>
                            <td><label>Quantita</label><input type="number" name="qtta_v" placeholder="5" required></td>
                        </tr>
                </table>
            </tr>
                <button onclick="submit" name="invia">Submit</button>
            </form>
        </table>

<!--/////////////////////////////////////////////////////////////////////////////////////////////////////////////////-->

    <?php

        require_once('./php/config.php');

        //Undefined index è relativo ai 4 campi inseriti qui sotto dopo il post
        $nom = $_POST['nome'];
        $cog = $_POST['cogn'];
        $sop = $_POST['sopr'];
        $tel = $_POST['tele'];


        $sql = "INSERT INTO ordine(nome, cognome, soprannome, telefono)
                VALUES('$nom', '$cog', '$sop', '$tel')";

        $result = mysqli_query($conn, $sql);

        if (isset($_POST[invia])) {
            echo "<script>alert('Ordine effettuato con successo!!')</script>";
        }else{
            echo "<script>alert('Errore')</script>";
        }
 
Ultima modifica di un moderatore:
lo script php é inserito nello stesso file html,
come lo hai inserito viene eseguito sempre ogni volta che apri la pagina o la ricarichi,
con un opportuno controllo ( if (!empty($_POST)) dovresti eseguire lo script php solo quando $_POST restituisce valori dal form

credo anche che non sia lecito assegnare nomi che iniziano e siano solo numeri, tipo
name="5"

correggi e se non hai risolto riposta il nuovo problema
 
Ultima modifica:
lo script php é inserito nello stesso file html,
come lo hai inserito viene eseguito sempre ogni volta che apri la pagina o la ricarichi,
con un opportuno controllo ( if (!empty($_POST)) dovresti eseguire lo script php solo quando $_POST restituisce valori dal form

credo anche che non sia lecito assegnare nomi che iniziano e siano solo numeri, tipo
name="5"

correggi e se non hai risolto riposta il nuovo problema
Ciao Marino, ti ringrazio per il consiglio, l'ho sfruttato e funziona correttamente, ad ogni modo vorrei chiederti, io ho separato la parte php dall'html in due pagine diverse, come posso fare per unirle in un unica pagina senza che si ricrei quell'errore? poi, come faccio ad eliminare una riga dalla tabella mysql, mettendo un bottone nello script html?
 
Ciao Marino, ti ringrazio per il consiglio, l'ho sfruttato e funziona correttamente, ad ogni modo vorrei chiederti, io ho separato la parte php dall'html in due pagine diverse, come posso fare per unirle in un unica pagina senza che si ricrei quell'errore? poi, come faccio ad eliminare una riga dalla tabella mysql, mettendo un bottone nello script html?
per meglio dire, come faccio ad evitare che cancellando la tabella 2 (ad esempio), la tabella successiva diventi appunto la 2?
 
ho ripreso il tuo codice commentando alcune righe per provarlo,
puoi eseguire anche tu il codice prima di fare modifiche
poi togli i miei commenti e lo rendi operativo

PHP:
<?php
if (!empty($_POST)){

    // require_once('./php/config.php');

    $nom = $_POST['nome'];
    $cog = $_POST['cogn'];
    $sop = $_POST['sopr'];
    $tel = $_POST['tele'];

    $sql = "INSERT INTO ordine(nome, cognome, soprannome, telefono) VALUES('$nom', '$cog', '$sop', '$tel')";
    $result = 1;    // $result = mysqli_query($conn, $sql);

    if (!empty($result)) {
        echo "<script>alert('Ordine effettuato con successo!!')</script>";
    }else{
        echo "<script>alert('Errore')</script>";
    }
}
?>
<html>
<head>
<link rel="stylesheet" href="./css/ordine.css">
<title>Ordine</title>
</head>
<body>
<table align="center">
<form method="POST" action="<?php echo$_SERVER['PHP_SELF']?>">
<tr>
<td align="center">Effettua un nuovo ordine</td>
</tr>
<tr>
<!--raccolgo i dati del cliente-->
<table align="center">
<tr>
<td><label>Nome</label><input type="text" name="nome" placeholder="Giorgio" required></td>
<td><label>Cognome</label><input type="text" name="cogn" placeholder="Rossi" required></td>
<td><label>Soprannome</label><input type="text" name="sopr" placeholder="Gio"></td>
<td><label>Telefono</label><input type="tel" name="tele" placeholder="381 529 3590" pattern="[0-9]{3}[0-9]{3}[0-9]{4}"></td>
</tr>
</table>
<br>
<!--raccolgo i dati del modello-->
<table align="center">
<tr>
<td><label>Modello</label><input type="text" name="5" placeholder="10m" required></td>
<td><label>Lunghezza/cm</label><input type="number" name="6" placeholder="110,00" required></td>
<td><label>Larghezza/cm</label><input type="number" name="7" placeholder="45,89" required></td>
<td><label>Quantita</label><input type="number" name="8" placeholder="5" required></td>
</tr>
</table>
<br>
<!--raccolgo i dati della versione-->
<table align="center">
<tr>
<td><label>Versione</label><input type="text" name="versio" placeholder="123v" required></td>
<td><label>Lunghezza/cm</label><input type="number" name="lungh_v" placeholder="110,00" required></td>
<td><label>Larghezza/cm</label><input type="number" name="largh_v" placeholder="45,89" required></td>
<td><label>Quantita</label><input type="number" name="qtta_v" placeholder="5" required></td>
</tr>
</table>
<button onclick="submit" name="invia">Submit</button>
</form>
</body>
</html>
 
ho ripreso il tuo codice commentando alcune righe per provarlo,
puoi eseguire anche tu il codice prima di fare modifiche
poi togli i miei commenti e lo rendi operativo

PHP:
<?php
if (!empty($_POST)){

    // require_once('./php/config.php');

    $nom = $_POST['nome'];
    $cog = $_POST['cogn'];
    $sop = $_POST['sopr'];
    $tel = $_POST['tele'];

    $sql = "INSERT INTO ordine(nome, cognome, soprannome, telefono) VALUES('$nom', '$cog', '$sop', '$tel')";
    $result = 1;    // $result = mysqli_query($conn, $sql);

    if (!empty($result)) {
        echo "<script>alert('Ordine effettuato con successo!!')</script>";
    }else{
        echo "<script>alert('Errore')</script>";
    }
}
?>
<html>
<head>
<link rel="stylesheet" href="./css/ordine.css">
<title>Ordine</title>
</head>
<body>
<table align="center">
<form method="POST" action="<?php echo$_SERVER['PHP_SELF']?>">
<tr>
<td align="center">Effettua un nuovo ordine</td>
</tr>
<tr>
<!--raccolgo i dati del cliente-->
<table align="center">
<tr>
<td><label>Nome</label><input type="text" name="nome" placeholder="Giorgio" required></td>
<td><label>Cognome</label><input type="text" name="cogn" placeholder="Rossi" required></td>
<td><label>Soprannome</label><input type="text" name="sopr" placeholder="Gio"></td>
<td><label>Telefono</label><input type="tel" name="tele" placeholder="381 529 3590" pattern="[0-9]{3}[0-9]{3}[0-9]{4}"></td>
</tr>
</table>
<br>
<!--raccolgo i dati del modello-->
<table align="center">
<tr>
<td><label>Modello</label><input type="text" name="5" placeholder="10m" required></td>
<td><label>Lunghezza/cm</label><input type="number" name="6" placeholder="110,00" required></td>
<td><label>Larghezza/cm</label><input type="number" name="7" placeholder="45,89" required></td>
<td><label>Quantita</label><input type="number" name="8" placeholder="5" required></td>
</tr>
</table>
<br>
<!--raccolgo i dati della versione-->
<table align="center">
<tr>
<td><label>Versione</label><input type="text" name="versio" placeholder="123v" required></td>
<td><label>Lunghezza/cm</label><input type="number" name="lungh_v" placeholder="110,00" required></td>
<td><label>Larghezza/cm</label><input type="number" name="largh_v" placeholder="45,89" required></td>
<td><label>Quantita</label><input type="number" name="qtta_v" placeholder="5" required></td>
</tr>
</table>
<button onclick="submit" name="invia">Submit</button>
</form>
</body>
</html>
Ciao Marino, ho appena aggiunto ciò che mi hai mandato, al vecchio codice che ha alcune modifiche rispetto a prima, ora non mi da più alcun errore durante l'inserimento dei dati, però non carica più nulla nella tabella, e se provo a ricaricare novamente la pagina, mi torna l'alert dell'ordine effettuato con successo però ovviamente privo di dati nella tabella, ti mando lo script completo così puoi verificare tu stesso:

PHP:
<?php   
    require_once('./php/config.php');

    if (!empty($_POST)) {

    //campi relativi all'ordine
    $id_c = $_POST['cliente'  ];
    $mode = $_POST['modello'  ];
    $vers = $_POST['versione' ];
    $lung = $_POST['lunghezza'];
    $larg = $_POST['larghezza'];
    $qtta = $_POST['quantita' ];

    //inserisco i dati nel database
    $sql = "INSERT INTO ordine (id_c, modello, versione, lunghezza, larghezza, quantita)
            VALUES('$id_c', '$mode', '$vers', '$lung', '$larg', '$qtta')";
    $result = 1;

        if(!empty($result)){
            echo "<script>alert('Ordine effettuato')</script>";
        }else{
            echo "<script>alert('Errore nella raccolta dati')</script>";
        }

    }
?>

<!--/////////////////////////////////////////////////////////////////////////////////////////////////////////////////-->

<html>
    <head>
        <link rel="stylesheet" href="./css/ordine.css">
        <title>Ordine</title>
    </head>

    <body>
        <table align="center">
            <form method="POST" action="<?php echo$_SERVER['PHP_SELF']?>">
            <tr>
                <td align="center">Effettua un nuovo ordine</td>
            </tr>
            <tr>
                <!--raccolgo i dati del cliente-->
                <table align="center">
                        <tr>   
                            <td><label>Cliente</label><input type="text" name="cliente" placeholder="01" required></td>
                            <td><label>Modello</label><input type="text" name="modello" placeholder="Poltrona" required></td>
                            <td><label>Versione</label><input type="text" name="versione" placeholder="3p" required></td>
                        </tr>

                        <br>

                        <tr>
                            <td><label>Lunghezza/cm</label><input type="number" name="lunghezza" placeholder="300" required></td>
                            <td><label>Larghezza/cm</label><input type="number" name="larghezza" placeholder="60" required></td>
                            <td><label>Quantita</label><input type="number" name="quantita" placeholder="3" required></td>
                        </tr>
                </table>
            </tr>
                <button onclick="submit" name="invia">Submit</button>
            </form>
        </table>

<!--/////////////////////////////////////////////////////////////////////////////////////////////////////////////////-->

<?php
  
    require_once('php/config.php'); 

    //visualizzo gli ordini in corso
    $sql1="SELECT id, id_c, modello, versione FROM ordine";

    $result1 = mysqli_query($conn, $sql1);

    echo "<h1 align='center'>Ordini in corso</h1>";
  
    //creo una tabella
    echo "<table border='1' align='center'>";

    echo "<th>N.Ordine</th>";
    echo "<th>Cliente</th>";
    echo "<th>Modello</th>";
    echo "<th>Versione</th>";

    //effettuo un controllo
    if(mysqli_num_rows($result1) > 0) {
    //estraggo i dati relativi ad ogni riga
    while($row1 = mysqli_fetch_assoc($result1)){

        echo "<tr>";
        echo "<td> $row1[id]       </td>";
        echo "<td> $row1[id_c]     </td>";
        echo "<td> $row1[modello]  </td>";
        echo "<td> $row1[versione] </td>";
        echo "</tr>";

        }
    }
    echo "</table>";

    //chiudo la connessione
    $conn->close();
?>   
    </body>
</html>
 
Ultima modifica di un moderatore:
Ciao Marino, ho appena aggiunto ciò che mi hai mandato, al vecchio codice che ha alcune modifiche rispetto a prima, ora non mi da più alcun errore durante l'inserimento dei dati, però non carica più nulla nella tabella, e se provo a ricaricare novamente la pagina, mi torna l'alert dell'ordine effettuato con successo però ovviamente privo di dati nella tabella, ti mando lo script completo così puoi verificare tu stesso:

<?php
require_once('./php/config.php');

if (!empty($_POST)) {

//campi relativi all'ordine
$id_c = $_POST['cliente' ];
$mode = $_POST['modello' ];
$vers = $_POST['versione' ];
$lung = $_POST['lunghezza'];
$larg = $_POST['larghezza'];
$qtta = $_POST['quantita' ];

//inserisco i dati nel database
$sql = "INSERT INTO ordine (id_c, modello, versione, lunghezza, larghezza, quantita)
VALUES('$id_c', '$mode', '$vers', '$lung', '$larg', '$qtta')";
$result = 1;

if(!empty($result)){
echo "<script>alert('Ordine effettuato')</script>";
}else{
echo "<script>alert('Errore nella raccolta dati')</script>";
}

}
?>

<!--/////////////////////////////////////////////////////////////////////////////////////////////////////////////////-->

<html>
<head>
<link rel="stylesheet" href="./css/ordine.css">
<title>Ordine</title>
</head>

<body>
<table align="center">
<form method="POST" action="<?php echo$_SERVER['PHP_SELF']?>">
<tr>
<td align="center">Effettua un nuovo ordine</td>
</tr>
<tr>
<!--raccolgo i dati del cliente-->
<table align="center">
<tr>
<td><label>Cliente</label><input type="text" name="cliente" placeholder="01" required></td>
<td><label>Modello</label><input type="text" name="modello" placeholder="Poltrona" required></td>
<td><label>Versione</label><input type="text" name="versione" placeholder="3p" required></td>
</tr>

<br>

<tr>
<td><label>Lunghezza/cm</label><input type="number" name="lunghezza" placeholder="300" required></td>
<td><label>Larghezza/cm</label><input type="number" name="larghezza" placeholder="60" required></td>
<td><label>Quantita</label><input type="number" name="quantita" placeholder="3" required></td>
</tr>
</table>
</tr>
<button onclick="submit" name="invia">Submit</button>
</form>
</table>

<!--/////////////////////////////////////////////////////////////////////////////////////////////////////////////////-->

<?php

require_once('php/config.php');

//visualizzo gli ordini in corso
$sql1="SELECT id, id_c, modello, versione FROM ordine";

$result1 = mysqli_query($conn, $sql1);

echo "<h1 align='center'>Ordini in corso</h1>";

//creo una tabella
echo "<table border='1' align='center'>";

echo "<th>N.Ordine</th>";
echo "<th>Cliente</th>";
echo "<th>Modello</th>";
echo "<th>Versione</th>";

//effettuo un controllo
if(mysqli_num_rows($result1) > 0) {
//estraggo i dati relativi ad ogni riga
while($row1 = mysqli_fetch_assoc($result1)){

echo "<tr>";
echo "<td> $row1[id] </td>";
echo "<td> $row1[id_c] </td>";
echo "<td> $row1[modello] </td>";
echo "<td> $row1[versione] </td>";
echo "</tr>";

}
}
echo "</table>";

//chiudo la connessione
$conn->close();
?>
</body>
</html>
nel secondo php, ci sono due id, uno è riferito all'id dell'ordine che ho impostato come auto incremento, invece l'altro (id_c), è l'id relativo al cliente
 
[MOD]
Salve Ghost, quando si posta del codice sul forum è opportuno utilizzare gli appositi strumenti disponibili nell'editor messaggi, così che il codice sia inserito nel modo corretto e risulti meglio leggibile per tutti. Avevo già corretto il tuo primo post e per il momento correggo anche quest'ultimo ma ti invito a prestare maggiore attenzione in futuro.
Grazie e buona continuazione.
 
[MOD]
Salve Ghost, quando si posta del codice sul forum è opportuno utilizzare gli appositi strumenti disponibili nell'editor messaggi, così che il codice sia inserito nel modo corretto e risulti meglio leggibile per tutti. Avevo già corretto il tuo primo post e per il momento correggo anche quest'ultimo ma ti invito a prestare maggiore attenzione in futuro.
Grazie e buona continuazione.
chiedo venia, solo che non ho ancora capito come fare, è possibile avere una spiegazione?
 
nel secondo php, ci sono due id, uno è riferito all'id dell'ordine che ho impostato come auto incremento, invece l'altro (id_c), è l'id relativo al cliente
Ciao Marino, mi sono appena reso conto che stavo sbagliando la parte "importante" dello script, ovvero, dove in php chiedevo di inserire i dati nel database, in realtà dovevo estrarli, mi spiego meglio...dagli input presenti nella parte html, devo fare un ordine, con dei dati già presenti nel database, quindi immagino che nella parte php, io debba fare un controllo dell'esistenza di quei dati e di conseguenza, stamparli in output nella stessa pagina con l'altro codice che ho già pronto...e qui arriva il punto, come faccio a visualizzare i dati inseriti in un input e presenti nel db?
 

Discussioni simili