Visualizzazione risultati 1 fino 21 di 21

Discussione: Fatal error: Call to a member function prepare() on null in

  1. #1
    Data registrazione
    21-07-2019
    Messaggi
    13

    Lightbulb Fatal error: Call to a member function prepare() on null in

    Salve ragazzi
    Spero di postare nel luogo giusto e di seguire tutte le procedure descritte per postare un nuovo post.
    Nel caso di errore chiedo scusa anticipatamente e rifarò nuovamente tutto.

    Allora io e un mio amico stiamo lavorando su un progetto ma ci siamo bloccati da qualche giorno su un errore, non siamo degli esperti di php quindi spero di non dire troppe sciocchezze.

    Veniamo al dunque, a noi risulta questo errore :

    Fatal error: Call to a member function prepare() on null in /membri/progettoditelematica2019/index.php on line 18

    il codice a cui si fa riferimento è questo
    Codice PHP:
    [B]<?php

    include 'connessione.php';
    //require_once 'sessioni.php';//include una volta sola il metodo sessioni
    session_start();
    if (isset(
    $_SESSION["nickname"])){ //se risulta già un cookie loggato, entra
    header("location: visualizzafatture.php");


    exit;
    }

    if (isset(
    $_POST["submitx"])){ //se è stato premuto il pulsante submitx, manda la query al db
    $nickname = $_POST['nickname'];
    $password = $_POST['password'];

    // $query = $mysqli->query("SELECT * FROM Utenti WHERE Nickname = '$nickname' AND Password = '$password'");
    // $query2 = $mysqli->query("SELECT * FROM Fornitore WHERE Nickname = '$nickname' AND Password = '$password'");

    $query = $mysqli->prepare("SELECT * FROM Utenti WHERE Nickname = ? AND Password = ?");
    $query2 = $mysqli->prepare("SELECT * FROM Fornitore WHERE Nickname = ? AND Password = ?");


    $query->bind_param('ss',$nickname,$password);
    $query2->bind_param('ss',$nickname,$password);

    $query->execute();

    //ho deciso di mettere in sicurezza l'accesso al sito utilizzato i prepared statements
    //senza, l'accesso al sito poteva essere messo a rischio semplicemente manomettendo la query
    //ed inserendo ' or ''=' nello username e password.

    if($query->fetch()) {//query->num_rows
    echo "Accesso consentito";
    $_SESSION["nickname"] = $nickname;
    $_SESSION["fornitore"] = false;
    header("location: visualizzafatture.php");
    exit();
    }
    else{
    $query->close();
    $query2->execute();
    echo
    "Accesso rifiutato";
    }

    if(
    $query2->fetch()){//query2->num_rows
    echo "Accesso consentito";
    $_SESSION["nickname"] = $nickname;
    $_SESSION["fornitore"] = true;

    header("location: visualizzafatture.php");
    exit();
    }

    else {
    echo
    "Accesso rifiutato";
    }

    }

    $art='
    __________ .___ __ _____ __
    \______ \_______ ____ __| _/_ __ _____/ |_ / \ _____ _______/ |_ ___________
    | ___/\_ __ \/ _ \ / __ | | \_/ ___\ __\ / \ / \\\\__ \ / ___/\ __\/ __ \_ __ \
    | | | | \( <_> ) /_/ | | /\ \___| | / Y \/ __ \_\___ \ | | \ ___/| | \/
    |____| |__| \____/\____ |____/ \___ >__| \____|__ (____ /____ > |__| \___ >__|
    \/ \/ \/ \/ \/ \/
    '
    ;

    ?>

    <html>
    <body>
    <center><h1>Benvenuto in</h1></center>
    <center>
    <table>
    <tr><td>
    <pre style="font-family: 'Courier New', Courier, monospace"><?php echo $art; ?></pre>
    </tr></td>
    </table>
    <h4>Entra in Product Master per trovare con noi le offerte migliori</h4>

    </center>
    </p></center>
    <br>
    <form action="index.php" method="POST">

    <center>
    <table>
    <tr><td>Username:</td><td><input type="text" name="nickname"></td></tr>
    <tr><td></td><td></td></tr>
    <tr><td>Password:</td><td><input type="password" name="password"></td></tr>
    </table>
    </center>

    <center><input type="submit" name="submitx" id="submit" value="login"></center>

    </form>

    </body>
    </html>
    vi metto anche il codice di connessione.php

    Codice PHP:
    <?php
    $mysqli
    = new mysqli('localhost','root', '123qwe', "Product_Master");

    if (
    $mysqli->connect_error) { //connetto al database
    die('Errore di connessione (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
    exit();
    }
    else {
    //echo '<center><p>' . 'Connesso. ' . $mysqli->host_info . '</p></center>';
    }

    class
    gestioneprodotti
    {
    }
    il sito su cui noi stiamo lavorando è questo se volete vedere voi di persona

    http://progettoditelematica2019.alte....org/index.php

    Cosa significa quell'errore li? ci siamo impantanati mannaggia !!

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Fatal error: Call to a member function prepare() on null in /membri/progettoditelematica2019/index.php on line 18
    ...
    Cosa significa quell'errore li? ci siamo impantanati mannaggia !!
    Il messaggio d'errore è piuttosto esplicito, state cercando di invocare il metodo (member function) su un "oggetto" il cui valore è null.
    In altre parole $mysqli vale null, non è stata inizializzata correttamente.

    L'inizializzazione in connessione.php sembra corretta, a parte le credenziali che non sono quelle di AlterVista.
    D'altro canto state dichiarando e inizializzando $mysqli in un file per utilizzarlo in un altro, quindi usate uno stato globale, il che non è mai una buona idea.

    I suggerimenti che do più spesso:


  3. #3
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    allora,
    io l'ho inizializzata mettendo questo
    Codice:
    var_dump($mysqli);
    prima della riga
    Codice:
     $query = $mysqli->prepare("SELECT * FROM Utenti WHERE Nickname = ? AND Password = ?");
    è giusto? come devo modificare?

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    allora, io l'ho inizializzata mettendo questo
    Quello è un var_dump, mostra il contenuto della variabile, non inizializza alcunché.

    Quale versione di PHP state utilizzando? Fino alla 5.3 c'era un bug riguardante connect_error, se state utilizzando una versione più vecchia è possibile che la connessione fallisca ma, a causa del bug, il messaggio d'errore non venga mostrato.

    I suggerimenti che do più spesso:


  5. #5
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Quale versione di PHP state utilizzando? Fino alla 5.3 c'era un bug riguardante connect_error, se state utilizzando una versione più vecchia è possibile che la connessione fallisca ma, a causa del bug, il messaggio d'errore non venga mostrato.
    Allora, ho controllato la versione sul server facendo partire il comando da un semplice file e mi risulta questa qui
    Versione PHP attuale: 5.6.40

  6. #6
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Il messaggio d'errore è piuttosto esplicito, state cercando di invocare il metodo (member function) su un "oggetto" il cui valore è null.
    In altre parole $mysqli vale null, non è stata inizializzata correttamente.
    come posso inizializzarla correttamente secondo te? ne sto provando di ogni

  7. #7
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Rivedi connessione.php, incapsulando in una funzione risolvete il problema dello stato globale:
    connessione.php
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);

    function
    connect($host = 'localhost', $user = 'progettoditelematica2019', $password = null, $database = 'my_progettoditelematica2019') {
    $mysqli = new mysqli($host, $user, $password, $database);

    if (
    $mysqli->connect_error) {
    die(
    'Errore di connessione (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
    }

    return
    $mysqli;
    }

    Quindi index.php diventa:
    index.php
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);

    require_once
    'connessione.php';
    //require_once 'sessioni.php';

    session_start();
    if (isset(
    $_SESSION["nickname"])) {
    header("location: visualizzafatture.php");
    exit;
    }


    // Procedura di autenticazione
    if (isset($_POST["submitx"])) {
    $nickname = $_POST['nickname'];
    $password = $_POST['password'];

    $mysqli = connect();

    // Le seguenti righe servono per il debug, andranno rimosse
    echo 'Contenuto della variabile $mysqli:';
    echo
    "<pre>";
    var_dump($mysqli);
    echo
    "</pre>";
    if (
    is_null($mysqli)) {
    die(
    "Impossibile connettersi alla base di dati.");
    }

    $query = $mysqli->prepare("SELECT * FROM Utenti WHERE Nickname = ? AND Password = ?");
    $query2 = $mysqli->prepare("SELECT * FROM Fornitore WHERE Nickname = ? AND Password = ?");

    $query->bind_param('ss',$nickname,$password);
    $query2->bind_param('ss',$nickname,$password);

    $query->execute();

    ...
    // Il resto è uguale
    Ultima modifica di mzanella : 25-07-2019 alle ore 11.41.11

    I suggerimenti che do più spesso:


  8. #8
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    ok ci stiamo avvicinando ma ora compare un altro errore !!

    quindi il mio file connessione.php
    diventa cosi:
    Codice PHP:

    <?php
    session_start
    ();
    error_reporting(E_ALL);

    function
    connect($host = 'localhost', $user = 'root'. $password = '123qwe', $database = 'my_progettoditelematica2019') {
    $mysqli = new mysqli($host, $user, $password, $database);

    if (
    $mysqli->connect_error) {
    die(
    'Errore di connessione (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
    }

    return
    $mysqli;
    }

    class
    gestioneprodotti
    {
    }

    mentre il mio file index.php diventa cosi:

    Codice PHP:
    <?php
    error_reporting
    (E_ALL);


    require_once
    'connessione.php';
    //require_once 'sessioni.php';

    session_start();
    if (isset(
    $_SESSION["nickname"])) {
    header("location: visualizzafatture.php");
    exit;
    }


    // Procedura di autenticazione
    if (isset($_POST["submitx"])) {
    $nickname = $_POST['nickname'];
    $password = $_POST['password'];

    $mysqli = connect();

    // Le seguenti righe servono per il debug, andranno rimosse
    echo 'Contenuto della variabile $mysqli:';
    echo
    "<pre>";
    var_dump($mysqli);
    echo
    "</pre>";
    if (
    is_null($mysqli)) {
    die(
    "Impossibile connettersi alla base di dati.");
    }

    $query = $mysqli->prepare("SELECT * FROM Utenti WHERE Nickname = ? AND Password = ?");
    $query2 = $mysqli->prepare("SELECT * FROM Fornitore WHERE Nickname = ? AND Password = ?");

    $query->bind_param('ss',$nickname,$password);
    $query2->bind_param('ss',$nickname,$password);

    $query->execute();


    //ho deciso di mettere in sicurezza l'accesso al sito utilizzato i prepared statements
    //senza, l'accesso al sito poteva essere messo a rischio semplicemente manomettendo la query
    //ed inserendo ' or ''=' nello username e password.

    if($query->fetch()) {//query->num_rows
    echo "Accesso consentito";
    $_SESSION["nickname"] = $nickname;
    $_SESSION["fornitore"] = false;
    header("location: visualizzafatture.php");
    exit();
    }
    else{
    $query->close();
    $query2->execute();
    echo
    "Accesso rifiutato";
    }

    if(
    $query2->fetch()){//query2->num_rows
    echo "Accesso consentito";
    $_SESSION["nickname"] = $nickname;
    $_SESSION["fornitore"] = true;

    header("location: visualizzafatture.php");
    exit();
    }

    else {
    echo
    "Accesso rifiutato";
    }

    }
    //..
    // ecc ecc



    l'errore che compare ora è questo :

    Parse error: syntax error, unexpected '$password' (T_VARIABLE) in /membri/progettoditelematica2019/connessione.php on line 6

    in piu è scomparsa la prima pagina dove inserire i dati e il form non so il motivo.

    Poi volevo chiederti un mio collega lo aveva fatto non mettendo il file connessione.php nella stessa cartella di file index.php , ma nella cartella che nel mio caso è ''Product_Master'' dove dentro ho tutti gli altri file php che saranno una decina.
    Se hai una chat qualunque possiamo sentirci li su cosi facciamo prima.
    Ultima modifica di progettoditelematica2019 : 25-07-2019 alle ore 11.38.54

  9. #9
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    quindi il mio file connessione.php
    diventa cosi:
    No che non diventa così, diventa come indicato nel messaggio precedente, ovvero con i valori di default appropriati per AlterVista (a meno che non stiate sviluppando in locale, nel qual caso sarebbe opportuno saperlo) e, soprattutto, senza dichiarazioni di classi non pertinenti. La classe (vuota?) gestioneprodotti dovrebbe stare in un file separato.

    l'errore che compare ora è questo :
    Parse error: syntax error, unexpected '$password' (T_VARIABLE) in /membri/progettoditelematica2019/connessione.php on line 6
    Nel messaggio precedente c'era un errore di sintassi, avevo scritto un punto al posto di una virgola. Ora è sistemato. Errori di questo genere puoi sistemarli autonomamente .

    in piu è scomparsa la prima pagina dove inserire i dati e il form non so il motivo.
    Il motivo è l'errore di prima "bloccava" la generazione della pagina.

    Poi volevo chiederti un mio collega lo aveva fatto non mettendo il file connessione.php nella stessa cartella di file index.php , ma nella cartella che nel mio caso è ''Product_Master'' dove dentro ho tutti gli altri file php che saranno una decina.
    Buon per lui ! Puoi porre il file connessione.php dove preferisci, purché tu tenga conto di eventuali conseguenze nei percorsi dei file. In questo caso, dentro index.php, dovresti modificare il percorso di require_once.

    Se hai una chat qualunque possiamo sentirci li su cosi facciamo prima.
    Nulla di personale, ma non fornisco assistenza "diretta" .

    I suggerimenti che do più spesso:


  10. #10
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    ok grazie mille ho risolto!! ora fa l'accesso!!!

    pero ora sono comparsi degli altri errori però prima vorrei spiegarti cosa fa il progetto cosi che tu capisca al meglio:

    Il progetto tende a simulare un portale di vendite online.
    Nonostante il login unico, vi sono tre differenti categorie di utenti:
    • L’amministratore (root).
    • L’utente comune.
    • Il fornitore.
    A seconda della tipologia di appartenenza, il sito reindirizzerà alle aree diversamente.
    Per visitare correttamente tutte le pagine, è necessario effettuare l’accesso con almeno un
    utente per ogni categoria.

    L’utente root:
    • Può visualizzare le fatture di vendita e di acquisto a seconda della categoria e dell’arco
    temporale indicato.
    • Può visualizzare, modificare ed eliminare gli utenti e fornitori.
    • Può visualizzare, aggiungere, modificare ed eliminare i prodotti.

    Gli utenti comuni:
    • Possono visualizzare i prodotti disponibili, aggiungerli nel proprio carrello, per poi procedere
    all’acquisto.
    • Possono modificare le proprie informazioni di base.
    • Agli utenti comuni non è permesso né l’accesso all’area riservata ai fornitori, né l’accesso
    all’area di amministrazione

    I fornitori possono:
    • Caricare le proprie fatture di vendita.
    • Rifornire le scorte in magazzino del prodotto indicato.
    • Ai fornitori non è permesso né l’accesso all’area riservata agli utenti comuni, né l’accesso
    all’area di amministratore.
    _______________________________


    Ora mi compaiono diversi errori per ogni tipo di login che ho provato a fare e te li spiego subito.

    Se entro con utente fornitore risulta questo

    Notice: A session had already been started - ignoring session_start() in /membri/progettoditelematica2019/fornitore.php on line 5

    Notice: Undefined variable: mysqli in /membri/progettoditelematica2019/fornitore.php on line 30

    Fatal error: Call to a member function query() on null in /membri/progettoditelematica2019/fornitore.php on line 30


    il primo errore lo posso togliere togliendo la parte di codice
    Codice PHP:
    session_start();

    e il codice è questo

    Codice PHP:

    <?php

    if (isset($_POST["logout"])){
    $_SESSION = [];
    if (isset(
    $_COOKIE[session_name()])){
    setcookie(session_name(),'',time()-50000);
    }

    session_destroy();

    header("Location: index.php");
    exit;
    }

    $myNick = $_SESSION["nickname"];
    $id_fattura = rand(1000000, 9999999);
    $queryCod_fornitore = $mysqli->query("SELECT Cod_Fornitore FROM Fornitore WHERE Nickname = '$myNick'");
    $cod_fornitore = $queryCod_fornitore->fetch_row();
    $cod_fornitore[0];

    if (isset(
    $_POST["aggiungi"])){

    //$id_fattura
    //$cod_fornitore[0]
    $data = $_POST['data'];
    $quantita = $_POST['quantita'];
    $totale = $_POST['totale'];


    //qui ottengo il codice prodotto e la scorta di magazzino, necessaria per aggiornare successivamente il valore del prodotto rifornito
    $prodottoDaFornire = $_POST['prodottoDaFornire'];

    $queryCod_prodotto = $mysqli->query("SELECT Cod_Prodotto, Scorte_magazzino FROM Prodotto WHERE Nome = '$prodottoDaFornire'");
    $prodotto = $queryCod_prodotto->fetch_row();
    //$prodotto[0];//codice prodotto
    //$prodotto[1];//scorte magazzino

    if(!$mysqli->query("INSERT INTO Fattura_Dal_Fornitore (ID_Fattura, Cod_Fornitore, Data_Ordine, Totale) VALUES ('$id_fattura', '$cod_fornitore[0]', '$data', '$totale');")){
    die(
    $mysqli->error);
    }
    if(!
    $mysqli->query("INSERT INTO Fornitura (ID_Fattura, Cod_Fornitore, Cod_Prodotto, Quantita) VALUES ('$id_fattura', '$cod_fornitore[0]', '$prodotto[0]', '$quantita');")){
    die(
    $mysqli->error);

    }

    $nuovaQuantita = $prodotto[1] + $quantita;//la quantità viene aggiornata di conseguenza
    $queryAggiornaMagazzino = $mysqli->query("UPDATE Prodotto SET Scorte_Magazzino = '$nuovaQuantita' WHERE Prodotto.Cod_Prodotto = '$prodotto[0]'");


    }

    ?>

    <html>
    <head></head>
    <body>
    <form action="fornitore.php" method="POST">
    <center>
    <h1>Benvenuto <?php echo $_SESSION['nickname']?></h1>
    <h3>qui potrai caricare le tue fatture</h3>

    <h4>Fattura:</h4>
    <table>


    <tr><td>Prodotto:</td><td>
    <select name="prodottoDaFornire">
    <?php
    $queryCategorieAggiungi
    = $mysqli->query("SELECT Nome FROM Prodotto WHERE 1");
    while (
    $rowAggiungi = $queryCategorieAggiungi->fetch_row()) {
    echo
    '<option>'.$rowAggiungi[0].'</option>';
    }

    ?>

    </select>
    <br></td></tr>
    <tr><td>Data ordine:</td><td><input type="date" name="data" value="2018-01-01"></td></tr>
    <tr><td>Quantità</td><td><input type="text" name="quantita"></td></tr>
    <tr><td>Totale:</td><td><input type="text" name="totale"></td></tr>
    </table>
    <input type="submit" name="aggiungi" value="aggiungi fattura" />

    </center>
    <hr />

    <input type="submit" name="logout" value="logout" />
    </form>

    </body>
    </html>
    __________________________________________________ __________________________________________________

  11. #11
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    se invece entro con root gli errori sono questi


    Notice: Undefined index: categoria in /membri/progettoditelematica2019/visualizzafatture.php on line 30

    Notice: Undefined index: fromDate in /membri/progettoditelematica2019/visualizzafatture.php on line 31

    Notice: Undefined index: toDate in /membri/progettoditelematica2019/visualizzafatture.php on line 32

    Notice: Undefined index: categoriaA in /membri/progettoditelematica2019/visualizzafatture.php on line 34

    Notice: Undefined index: fromDateA in /membri/progettoditelematica2019/visualizzafatture.php on line 35

    Notice: Undefined index: toDateA in /membri/progettoditelematica2019/visualizzafatture.php on line 36

    Notice: Undefined variable: mysqli in /membri/progettoditelematica2019/visualizzafatture.php on line 39

    Fatal error: Call to a member function query() on null in /membri/progettoditelematica2019/visualizzafatture.php on line 39



    Codice PHP:
    <?php
    include 'connessione.php';
    //require_once 'sessioni.php';
    //session_start();
    if (!isset($_SESSION["nickname"])){
    header("location: index.php");
    exit();
    }
    else if (
    $_SESSION["nickname"]!='root' && $_SESSION["fornitore"] == false){
    header("location: InVendita.php");
    exit();
    }
    else if (
    $_SESSION["nickname"]!='root' && $_SESSION["fornitore"] == true){
    header("location: fornitore.php");
    exit();
    }

    if (isset(
    $_POST["logout"])){
    $_SESSION = [];
    if (isset(
    $_COOKIE[session_name()])){
    setcookie(session_name(),'',time()-50000);
    }

    session_destroy();

    header("Location: index.php");
    exit;
    }

    $categoria = $_POST['categoria'];
    $fromDate = $_POST['fromDate'];
    $toDate = $_POST['toDate'];

    $categoriaA = $_POST['categoriaA'];
    $fromDateA = $_POST['fromDateA'];
    $toDateA = $_POST['toDateA'];

    if(
    $categoria != 'Tutte le categorie'){
    $query = $mysqli->query("SELECT Fattura_Al_Cliente.Data_Ordine, Fattura_Al_Cliente.Cod_Cliente, Utenti.Nickname, Fattura_Al_Cliente.ID_Fattura, Campionario_Prodotti.Prezzo_Totale
    FROM Fattura_Al_Cliente
    JOIN Utenti on Utenti.Cod_Cliente = Fattura_Al_Cliente.Cod_Cliente
    JOIN Campionario_Prodotti on Campionario_Prodotti.ID_Fattura = Fattura_Al_Cliente.ID_Fattura
    JOIN Prodotto on Prodotto.Cod_Prodotto = Campionario_Prodotti.Cod_Prodotto
    JOIN Categoria_Prodotti on Categoria_Prodotti.Cod_Categoria = Prodotto.Cod_Categoria
    WHERE (Fattura_Al_Cliente.Data_Ordine between '
    $fromDate' and '$toDate') AND Categoria_Prodotti.Nome = '$categoria'");
    }
    else{
    $query = $mysqli->query("SELECT Fattura_Al_Cliente.Data_Ordine, Fattura_Al_Cliente.Cod_Cliente, Utenti.Nickname, Fattura_Al_Cliente.ID_Fattura, Campionario_Prodotti.Prezzo_Totale
    FROM Fattura_Al_Cliente
    JOIN Utenti on Utenti.Cod_Cliente = Fattura_Al_Cliente.Cod_Cliente
    JOIN Campionario_Prodotti on Campionario_Prodotti.ID_Fattura = Fattura_Al_Cliente.ID_Fattura
    WHERE Fattura_Al_Cliente.Data_Ordine between '
    $fromDate' and '$toDate'");
    }


    if(
    $categoriaA != 'Tutte le categorie'){
    $query2 = $mysqli->query("SELECT Fattura_Dal_Fornitore.Data_Ordine, Fornitore.Cod_Fornitore, Fornitore.Nickname, Fattura_Dal_Fornitore.ID_Fattura, Fattura_Dal_Fornitore.Totale
    FROM Fattura_Dal_Fornitore
    JOIN Fornitore on Fornitore.Cod_Fornitore = Fattura_Dal_Fornitore.Cod_Fornitore
    JOIN Fornitura on Fornitura.ID_Fattura = Fattura_Dal_Fornitore.ID_Fattura
    JOIN Prodotto on Prodotto.Cod_Prodotto = Fornitura.Cod_Prodotto
    JOIN Categoria_Prodotti on Categoria_Prodotti.Cod_Categoria = Prodotto.Cod_Categoria
    WHERE (Fattura_Dal_Fornitore.Data_Ordine between '
    $fromDateA' and '$toDateA') AND Categoria_Prodotti.Nome = '$categoriaA'");
    }
    else{
    $query2 = $mysqli->query("SELECT Fattura_Dal_Fornitore.Data_Ordine, Fornitore.Cod_Fornitore, Fornitore.Nickname, Fattura_Dal_Fornitore.ID_Fattura, Fattura_Dal_Fornitore.Totale
    FROM Fattura_Dal_Fornitore
    JOIN Fornitore on Fornitore.Cod_Fornitore = Fattura_Dal_Fornitore.Cod_Fornitore
    JOIN Fornitura on Fornitura.ID_Fattura = Fattura_Dal_Fornitore.ID_Fattura
    JOIN Prodotto on Prodotto.Cod_Prodotto = Fornitura.Cod_Prodotto
    JOIN Categoria_Prodotti on Categoria_Prodotti.Cod_Categoria = Prodotto.Cod_Categoria
    WHERE (Fattura_Dal_Fornitore.Data_Ordine between '
    $fromDateA' and '$toDateA')");
    }



    $queryCategorie = $mysqli->query("SELECT Nome FROM Categoria_Prodotti WHERE 1");
    $queryCategorie2 = $mysqli->query("SELECT Nome FROM Categoria_Prodotti WHERE 1");


    ?>
    <html>
    <body>
    <form action="visualizzafatture.php" method="POST">
    <center><h1>Visualizza le fatture:</h1></center>

    <a href="gestioneprodotti.php">Gestisci i prodotti</a>
    <br>
    <a href="gestioneclientiefornitori.php">Gestisci clienti e fornitori</a>
    <hr />
    <center><h2>Visualizza le fatture di vendita</h2></center>

    <label for="FromDate">Enter a Date:</label>
    <br>

    da: <input type="date" name="fromDate" value="2018-01-01" />
    a: <input type="date" name="toDate" value="2018-12-09" />

    <select name="categoria">
    <option>Tutte le categorie</option>
    <?php

    while ($row = $queryCategorie->fetch_row()) {
    if(
    $_POST['categoria'] == $row[0]){
    echo
    '<option selected="selected">'.$row[0].'</option>';
    }
    else{
    echo
    '<option>'.$row[0].'</option>';
    }

    }

    ?>

    </select>

    <input type="submit" name="cerca_vendite" value="Cerca vendite" />
    <br>

    <hr />


    <table style="width:100%" border="1">
    <tr>
    <th>Data</th><th>Codice Cliente</th> <th>Nickname</th> <th>Codice Fattura</th> <th>Importo</th>
    </tr>
    <?php
    if (isset($_POST["cerca_vendite"]) || $_SESSION['cerca_vendite'] == true){

    if (!isset(
    $_SESSION['cerca_vendite'])) {
    $_SESSION['cerca_vendite'] = true;
    }

    $total = 0;
    while (
    $row = $query->fetch_row()) {
    echo
    '<tr>'.'<td>'.$row[0].'</td>'.'<td>'.$row[1].'</td>'.'<td>'.$row[2].'</td>'.'<td>'.$row[3].'</td>'.'<td>'.$row[4].'</td>'.'</tr>';
    $total+=$row[4];
    }
    if(!(
    $query->num_rows)>0){
    echo
    "Non ci sono fatture in queste date.";
    }
    }

    echo
    '<tr><td></td><td></td><td></td><td></td><th>Totale</th></tr>';

    echo
    '<tr><td></td><td></td><td></td><td></td><td>'.$total.'</td></tr>';


    ?>

    </table>
    <br>
    <hr />
    <center><h2>Visualizza le fatture di acquisto</h2></center>

    da: <input type="date" name="fromDateA" value="2018-01-01" />
    a: <input type="date" name="toDateA" value="2018-12-09" />

    <select name="categoriaA">
    <option>Tutte le categorie</option>
    <?php

    while ($row = $queryCategorie2->fetch_row()) {
    if(
    $_POST['categoriaA'] == $row[0]){
    echo
    '<option selected="selected">'.$row[0].'</option>';
    }
    else{
    echo
    '<option>'.$row[0].'</option>';
    }

    }

    ?>

    </select>

    <input type="submit" name="cerca_acquisti" value="Cerca acquisti" />
    <br>

    <hr />


    <table style="width:100%" border="1">
    <tr>
    <th>Data</th><th>Codice Fornitore</th> <th>Nickname</th> <th>Codice Fattura</th> <th>Importo</th>
    </tr>
    <?php
    if (isset($_POST["cerca_acquisti"]) || $_SESSION['cerca_acquisti'] == true){

    if (!isset(
    $_SESSION['cerca_acquisti'])) {
    $_SESSION['cerca_acquisti'] = true;
    }

    $total = 0;
    while (
    $row = $query2->fetch_row()) {
    echo
    '<tr>'.'<td>'.$row[0].'</td>'.'<td>'.$row[1].'</td>'.'<td>'.$row[2].'</td>'.'<td>'.$row[3].'</td>'.'<td>'.$row[4].'</td>'.'</tr>';
    $total+=$row[4];
    }

    if(!(
    $query2->num_rows)>0){
    echo
    "Non ci sono fatture in queste date.";
    }
    }

    echo
    '<tr><td></td><td></td><td></td><td></td><th>Totale</th></tr>';

    echo
    '<tr><td></td><td></td><td></td><td></td><td>'.$total.'</td></tr>';


    ?>

    </table>
    <br>
    <hr />

    <input type="submit" name="logout" value="logout" />

    </form>


    </body>


    </html>

  12. #12
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    Se invece entro con utente comune gli errori sono questi

    Notice: Undefined index: categoria in /membri/progettoditelematica2019/InVendita.php on line 34

    Notice: Undefined variable: mysqli in /membri/progettoditelematica2019/InVendita.php on line 35

    Fatal error: Call to a member function query() on null in /membri/progettoditelematica2019/InVendita.php on line 35



    Codice PHP:
    <?php
    include 'connessione.php';
    include
    'Prodotto.php';

    session_start();

    if (!isset(
    $_SESSION["nickname"])){ //se risulta già un cookie loggato, entra
    header("location: index.php");
    exit;
    }
    else if (
    $_SESSION["nickname"]!='root' && $_SESSION["fornitore"] == true){
    header("location: fornitore.php");
    exit();
    }


    echo
    '<center><h1>Ciao ' . $_SESSION["nickname"] . ', trova con noi le offerte migliori</h1></center>';

    if (isset(
    $_POST["logout"])){
    $_SESSION = [];
    if (isset(
    $_COOKIE[session_name()])){
    setcookie(session_name(),'',time()-50000);
    }

    session_destroy();

    header("Location: index.php");
    exit;
    }

    $nomeDaCercare="";

    if(empty(
    $_POST['nomeDaCercare'])){
    $categoria = $_POST["categoria"];
    $query= $mysqli->query("SELECT Prodotto.Cod_Prodotto, Prodotto.Cod_Categoria, Prodotto.Nome, Prodotto.Prezzo_Vendita, Prodotto.Scorte_Magazzino FROM Prodotto
    join Categoria_Prodotti on Categoria_Prodotti.Cod_Categoria = Prodotto.Cod_Categoria
    WHERE Categoria_Prodotti.Nome = '
    $categoria'");

    if(!(
    $query->num_rows)>0){//se non esiste query con codice categoria, utilizzo questa query per far stampare tutti i prodotti
    $query = $mysqli->query("SELECT Cod_Prodotto, Cod_Categoria, Nome, Prezzo_Vendita, Scorte_Magazzino FROM Prodotto WHERE 1");

    }
    }
    else {
    $categoria = $_POST["categoria"];
    $nomeDaCercare = $_POST['nomeDaCercare'];
    $query = $mysqli->query("SELECT Prodotto.Cod_Prodotto, Prodotto.Cod_Categoria, Prodotto.Nome, Prodotto.Prezzo_Vendita, Prodotto.Scorte_Magazzino FROM Prodotto
    join Categoria_Prodotti on Categoria_Prodotti.Cod_Categoria = Prodotto.Cod_Categoria
    WHERE LOCATE('
    $nomeDaCercare',Prodotto.Nome) AND Categoria_Prodotti.Nome = '$categoria'");

    if(!(
    $query->num_rows)>0){//se non trova in quella categoria, cerca in tutte le altre
    $query = $mysqli->query("SELECT Cod_Prodotto, Cod_Categoria, Nome, Prezzo_Vendita, Scorte_Magazzino FROM Prodotto WHERE LOCATE('$nomeDaCercare',Prodotto.Nome) ");
    echo
    '<p>Non è stato trovato nulla nella categoria selezionata</p>';

    }
    }

    $queryCategorie = $mysqli->query("SELECT Nome FROM Categoria_Prodotti WHERE 1");
    $NickS = $_SESSION['nickname'];
    //$queryCarrello = $mysqli->query("SELECT Carrello FROM Utenti WHERE Nickname = '$NickS'");
    $num_rows = $query->num_rows;
    $products = array();
    $product = null;
    $productsInCarrello = array();

    $oggettiGiustoOrdine = array();

  13. #13
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Vediamo uno per uno gli errori:
    Notice: A session had already been started - ignoring session_start() in /membri/progettoditelematica2019/fornitore.php on line 5
    Come dice il messaggio, stai avviando una sessione benché questa sia già attiva. L'interprete PHP ti sta segnalando che è una cosa inutile. Probabilmente ti conviene utilizzare il file sessioni.php che ho visto citato nel codice: avvii la sessione una sola volta all'interno di quel file e lo includi (con require_once, mi raccomando) nelle pagine in cui serve.

    Notice: Undefined variable: mysqli in /membri/progettoditelematica2019/fornitore.php on line 30
    Fatal error: Call to a member function query() on null in /membri/progettoditelematica2019/fornitore.php on line 30
    La variabile $mysqli non esiste nel contesto indicato, come conseguenza l'invocazione del metodo query produce il secondo errore. Modifica come fatto in index.php, ovvero dichiarando e inizializzando $mysqli = connect(); prima del suo utilizzo.

    Notice: Undefined index: categoria in /membri/progettoditelematica2019/visualizzafatture.php on line 30
    Notice: Undefined index: fromDate in /membri/progettoditelematica2019/visualizzafatture.php on line 31
    Notice: Undefined index: toDate in /membri/progettoditelematica2019/visualizzafatture.php on line 32
    Notice: Undefined index: categoriaA in /membri/progettoditelematica2019/visualizzafatture.php on line 34
    Notice: Undefined index: fromDateA in /membri/progettoditelematica2019/visualizzafatture.php on line 35
    Notice: Undefined index: toDateA in /membri/progettoditelematica2019/visualizzafatture.php on line 36
    Nel codice assumi che arrivino via POST tutti quei parametri, ma non arrivano. Che ci vuoi fare, così va il mondo.
    Dovresti assicurarti che quel prezzo di codice venga eseguito solo a condizione che quei dati siano arrivati, oppure prevedere dei valori di default. Dipende molto da come decidi di gestire quella pagina. Potrebbe anche essere che non c'è corrispondenza tra il nome del parametro nello script PHP (es. "categoria") e il nome dello stesso nel form da cui è inviato (es. "Categoria" con la "C" maiuscola).

    Notice: Undefined variable: mysqli in /membri/progettoditelematica2019/visualizzafatture.php on line 39
    Fatal error: Call to a member function query() on null in /membri/progettoditelematica2019/visualizzafatture.php on line 39
    Discorso analogo alla pagina del fornitore.

    Notice: Undefined index: categoria in /membri/progettoditelematica2019/InVendita.php on line 34
    Anche qui un parametro che dai per scontato arrivare tramite POST, e invece non arriva. Stesso discorso dell'altra pagina.

    Notice: Undefined variable: mysqli in /membri/progettoditelematica2019/InVendita.php on line 35
    Fatal error: Call to a member function query() on null in /membri/progettoditelematica2019/InVendita.php on line 35
    Stesso discorso delle altre pagine.

    Alcune osservazioni generali:
    • a meno che le query non siano hard-coded, usa prepared statement; lo stai facendo correttamente in index.php, ma dovresti applicarlo a tutte le pagine per prevenire SQL Injection
    • usa require/include[_once] in modo opportuno: se uno script è necessario per il funzionamento di un altro (es. la connessione alla base di dati) usa require, se non è strettamente necessario (es. l'inclusione di uno script che incorpori un foglio di stile) una include; se lo script contiene dichiarazioni di funzioni o classi (o in generale qualsiasi entità che debba esistere in singola istanza) usa il suffisso _once, altrimenti puoi farne a meno
    • usa error_reporting(E_ALL); per mostrare tutti i messaggi di errore: è stato quello a far "comparire" tutti i messaggi che hai visto; questo vuol dire che prima il codice conteneva tutti quegli errori, ma nessuno se n'era accorto...

    I suggerimenti che do più spesso:


  14. #14
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    Interessante molto, sai spiegare molto bene.
    Ti ringrazio ancora molto per gli aiuti che mi stai dando.

    Io ho fatto tutto come hai detto e ora sono spariti tutti gli errori fatal che bloccano ma ne è comparso un altro guarda ti giro il codice di visualizzafatture.php , questo errore lo da con tutti i tipi di utenti con cui faccio l'accesso, cioè root, utenti comuni e fornitore.

    ecco l'ultimo mio amico è questo:

    Parse error: syntax error, unexpected '$categoria' (T_VARIABLE) in /membri/progettoditelematica2019/visualizzafatture.php on line 30

    Codice PHP:
    <?php
    include 'connessione.php';
    //require_once 'sessioni.php';
    //session_start();
    if (!isset($_SESSION["nickname"])){
    header("location: index.php");
    exit();
    }
    else if (
    $_SESSION["nickname"]!='root' && $_SESSION["fornitore"] == false){
    header("location: InVendita.php");
    exit();
    }
    else if (
    $_SESSION["nickname"]!='root' && $_SESSION["fornitore"] == true){
    header("location: fornitore.php");
    exit();
    }

    if (isset(
    $_POST["logout"])){
    $_SESSION = [];
    if (isset(
    $_COOKIE[session_name()])){
    setcookie(session_name(),'',time()-50000);
    }

    session_destroy();

    header("Location: index.php");
    exit;
    }
    $mysqli = connect()
    $categoria = $_POST['categoria'];
    $fromDate = $_POST['fromDate'];
    $toDate = $_POST['toDate'];

    $categoriaA = $_POST['categoriaA'];
    $fromDateA = $_POST['fromDateA'];
    $toDateA = $_POST['toDateA'];

    if(
    $categoria != 'Tutte le categorie'){
    $query = $mysqli->query("SELECT Fattura_Al_Cliente.Data_Ordine, Fattura_Al_Cliente.Cod_Cliente, Utenti.Nickname, Fattura_Al_Cliente.ID_Fattura, Campionario_Prodotti.Prezzo_Totale
    FROM Fattura_Al_Cliente
    JOIN Utenti on Utenti.Cod_Cliente = Fattura_Al_Cliente.Cod_Cliente
    JOIN Campionario_Prodotti on Campionario_Prodotti.ID_Fattura = Fattura_Al_Cliente.ID_Fattura
    JOIN Prodotto on Prodotto.Cod_Prodotto = Campionario_Prodotti.Cod_Prodotto
    JOIN Categoria_Prodotti on Categoria_Prodotti.Cod_Categoria = Prodotto.Cod_Categoria
    WHERE (Fattura_Al_Cliente.Data_Ordine between '
    $fromDate' and '$toDate') AND Categoria_Prodotti.Nome = '$categoria'");
    }
    else{
    $query = $mysqli->query("SELECT Fattura_Al_Cliente.Data_Ordine, Fattura_Al_Cliente.Cod_Cliente, Utenti.Nickname, Fattura_Al_Cliente.ID_Fattura, Campionario_Prodotti.Prezzo_Totale
    FROM Fattura_Al_Cliente
    JOIN Utenti on Utenti.Cod_Cliente = Fattura_Al_Cliente.Cod_Cliente
    JOIN Campionario_Prodotti on Campionario_Prodotti.ID_Fattura = Fattura_Al_Cliente.ID_Fattura
    WHERE Fattura_Al_Cliente.Data_Ordine between '
    $fromDate' and '$toDate'");
    }


    if(
    $categoriaA != 'Tutte le categorie'){
    $query2 = $mysqli->query("SELECT Fattura_Dal_Fornitore.Data_Ordine, Fornitore.Cod_Fornitore, Fornitore.Nickname, Fattura_Dal_Fornitore.ID_Fattura, Fattura_Dal_Fornitore.Totale
    FROM Fattura_Dal_Fornitore
    JOIN Fornitore on Fornitore.Cod_Fornitore = Fattura_Dal_Fornitore.Cod_Fornitore
    JOIN Fornitura on Fornitura.ID_Fattura = Fattura_Dal_Fornitore.ID_Fattura
    JOIN Prodotto on Prodotto.Cod_Prodotto = Fornitura.Cod_Prodotto
    JOIN Categoria_Prodotti on Categoria_Prodotti.Cod_Categoria = Prodotto.Cod_Categoria
    WHERE (Fattura_Dal_Fornitore.Data_Ordine between '
    $fromDateA' and '$toDateA') AND Categoria_Prodotti.Nome = '$categoriaA'");
    }
    else{
    $query2 = $mysqli->query("SELECT Fattura_Dal_Fornitore.Data_Ordine, Fornitore.Cod_Fornitore, Fornitore.Nickname, Fattura_Dal_Fornitore.ID_Fattura, Fattura_Dal_Fornitore.Totale
    FROM Fattura_Dal_Fornitore
    JOIN Fornitore on Fornitore.Cod_Fornitore = Fattura_Dal_Fornitore.Cod_Fornitore
    JOIN Fornitura on Fornitura.ID_Fattura = Fattura_Dal_Fornitore.ID_Fattura
    JOIN Prodotto on Prodotto.Cod_Prodotto = Fornitura.Cod_Prodotto
    JOIN Categoria_Prodotti on Categoria_Prodotti.Cod_Categoria = Prodotto.Cod_Categoria
    WHERE (Fattura_Dal_Fornitore.Data_Ordine between '
    $fromDateA' and '$toDateA')");
    }



    $queryCategorie = $mysqli->query("SELECT Nome FROM Categoria_Prodotti WHERE 1");
    $queryCategorie2 = $mysqli->query("SELECT Nome FROM Categoria_Prodotti WHERE 1");


    ?>
    <html>
    <body>
    <form action="visualizzafatture.php" method="POST">
    <center><h1>Visualizza le fatture:</h1></center>

    <a href="gestioneprodotti.php">Gestisci i prodotti</a>
    <br>
    <a href="gestioneclientiefornitori.php">Gestisci clienti e fornitori</a>
    <hr />
    <center><h2>Visualizza le fatture di vendita</h2></center>

    <label for="FromDate">Enter a Date:</label>
    <br>

    da: <input type="date" name="fromDate" value="2018-01-01" />
    a: <input type="date" name="toDate" value="2018-12-09" />

    <select name="categoria">
    <option>Tutte le categorie</option>
    <?php

    while ($row = $queryCategorie->fetch_row()) {
    if(
    $_POST['categoria'] == $row[0]){
    echo
    '<option selected="selected">'.$row[0].'</option>';
    }
    else{
    echo
    '<option>'.$row[0].'</option>';
    }

    }

    ?>

    </select>

    <input type="submit" name="cerca_vendite" value="Cerca vendite" />
    <br>

    <hr />


    <table style="width:100%" border="1">
    <tr>
    <th>Data</th><th>Codice Cliente</th> <th>Nickname</th> <th>Codice Fattura</th> <th>Importo</th>
    </tr>
    <?php
    if (isset($_POST["cerca_vendite"]) || $_SESSION['cerca_vendite'] == true){

    if (!isset(
    $_SESSION['cerca_vendite'])) {
    $_SESSION['cerca_vendite'] = true;
    }

    $total = 0;
    while (
    $row = $query->fetch_row()) {
    echo
    '<tr>'.'<td>'.$row[0].'</td>'.'<td>'.$row[1].'</td>'.'<td>'.$row[2].'</td>'.'<td>'.$row[3].'</td>'.'<td>'.$row[4].'</td>'.'</tr>';
    $total+=$row[4];
    }
    if(!(
    $query->num_rows)>0){
    echo
    "Non ci sono fatture in queste date.";
    }
    }

    echo
    '<tr><td></td><td></td><td></td><td></td><th>Totale</th></tr>';

    echo
    '<tr><td></td><td></td><td></td><td></td><td>'.$total.'</td></tr>';


    ?>

    </table>
    <br>
    <hr />
    <center><h2>Visualizza le fatture di acquisto</h2></center>

    da: <input type="date" name="fromDateA" value="2018-01-01" />
    a: <input type="date" name="toDateA" value="2018-12-09" />

    <select name="categoriaA">
    <option>Tutte le categorie</option>
    <?php

    while ($row = $queryCategorie2->fetch_row()) {
    if(
    $_POST['categoriaA'] == $row[0]){
    echo
    '<option selected="selected">'.$row[0].'</option>';
    }
    else{
    echo
    '<option>'.$row[0].'</option>';
    }

    }

    ?>

    </select>

    <input type="submit" name="cerca_acquisti" value="Cerca acquisti" />
    <br>

    <hr />


    <table style="width:100%" border="1">
    <tr>
    <th>Data</th><th>Codice Fornitore</th> <th>Nickname</th> <th>Codice Fattura</th> <th>Importo</th>
    </tr>
    <?php
    if (isset($_POST["cerca_acquisti"]) || $_SESSION['cerca_acquisti'] == true){

    if (!isset(
    $_SESSION['cerca_acquisti'])) {
    $_SESSION['cerca_acquisti'] = true;
    }

    $total = 0;
    while (
    $row = $query2->fetch_row()) {
    echo
    '<tr>'.'<td>'.$row[0].'</td>'.'<td>'.$row[1].'</td>'.'<td>'.$row[2].'</td>'.'<td>'.$row[3].'</td>'.'<td>'.$row[4].'</td>'.'</tr>';
    $total+=$row[4];
    }

    if(!(
    $query2->num_rows)>0){
    echo
    "Non ci sono fatture in queste date.";
    }
    }

    echo
    '<tr><td></td><td></td><td></td><td></td><th>Totale</th></tr>';

    echo
    '<tr><td></td><td></td><td></td><td></td><td>'.$total.'</td></tr>';


    ?>

    </table>
    <br>
    <hr />

    <input type="submit" name="logout" value="logout" />

    </form>


    </body>


    </html>

  15. #15
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Alla riga 29 manca il punto e virgola dopo la connessione:
    Codice PHP:
    $mysqli = connect()
    deve diventare
    Codice PHP:
    $mysqli = connect();

    I suggerimenti che do più spesso:


  16. #16
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    che stupido che sono, hai ragione.

    Funziona tutto e ti ringrazio però è tutta una caccia ad errori, sembro tom e jerry mamma mia che faticaccia non hai idea.

    Allora, entro dentro con i vari tipi di login e fa tutto quello che deve fare, vedo le pagine e le tabelle pero sono comparsi una marea di ''Notice: '' che non sono errori pero sono imprecisioni.
    Il punto è che da come ho capito da te che quella riga di codice error_reporting(E_ALL); li mostra tutti, ma non capisco come mai è commentata in tutti i file ma appaiono lo stesso non dovrebbero comparire.
    Mi interessa almeno farli sparire altrimenti qui non ci salto più fuori.

    Te li pubblico a malincuore ma guarda, ogni volta ne spunta uno di nuovo.


    Notice: Undefined index: categoria in /membri/progettoditelematica2019/InVendita.php on line 34

    Notice: Use of undefined constant bottone - assumed 'bottone' in /membri/progettoditelematica2019/InVendita.php on line 149

    Notice: Use of undefined constant bottone_carrello - assumed 'bottone_carrello' in /membri/progettoditelematica2019/InVendita.php on line 216




    InVendita.php
    (non pubblico tutto il codice per ottimizzare un po)
    (ho messo le righe che danno errore)

    Codice PHP:

    $nomeDaCercare
    ="";
    $mysqli = connect();
    if(empty(
    $_POST['nomeDaCercare'])){
    $categoria = $_POST["categoria"]; // riga 34
    $query= $mysqli->query("SELECT Prodotto.Cod_Prodotto, Prodotto.Cod_Categoria, Prodotto.Nome, Prodotto.Prezzo_Vendita, Prodotto.Scorte_Magazzino FROM Prodotto
    join Categoria_Prodotti on Categoria_Prodotti.Cod_Categoria = Prodotto.Cod_Categoria
    WHERE Categoria_Prodotti.Nome = '
    $categoria'");

    if(!(
    $query->num_rows)>0){//se non esiste query con codice categoria, utilizzo questa query per far stampare tutti i prodotti
    $query = $mysqli->query("SELECT Cod_Prodotto, Cod_Categoria, Nome, Prezzo_Vendita, Scorte_Magazzino FROM Prodotto WHERE 1");

    }
    }
    else {
    $categoria = $_POST["categoria"];
    $nomeDaCercare = $_POST['nomeDaCercare'];
    $query = $mysqli->query("SELECT Prodotto.Cod_Prodotto, Prodotto.Cod_Categoria, Prodotto.Nome, Prodotto.Prezzo_Vendita, Prodotto.Scorte_Magazzino FROM Prodotto
    join Categoria_Prodotti on Categoria_Prodotti.Cod_Categoria = Prodotto.Cod_Categoria
    WHERE LOCATE('
    $nomeDaCercare',Prodotto.Nome) AND Categoria_Prodotti.Nome = '$categoria'");

    if(!(
    $query->num_rows)>0){//se non trova in quella categoria, cerca in tutte le altre
    $query = $mysqli->query("SELECT Cod_Prodotto, Cod_Categoria, Nome, Prezzo_Vendita, Scorte_Magazzino FROM Prodotto WHERE LOCATE('$nomeDaCercare',Prodotto.Nome) ");
    echo
    '<p>Non è stato trovato nulla nella categoria selezionata</p>';

    }
    }

    //..
    //..
    //..

    if(isset($_POST[bottone])){ // riga 149
    $carrelloBottone = $_POST[bottone];

    if (!isset(
    $_SESSION['prodottoInCarrello'])) {//costruisce il carrello
    $_SESSION['prodottoInCarrello'] = array();
    }

    $y = 0;
    for(
    $x=0;$x<$query->num_rows; $x++){

    if(
    $carrelloBottone[$x] == 'Aggiungi'){

    $product = $products[$x];
    $productsInCarrello[] = $product;

    if(!
    in_array($product,$_SESSION['prodottoInCarrello'])){//vede se esiste già un oggetto product
    array_push($_SESSION['prodottoInCarrello'],$product);//costruisce il carrello
    echo 'Il prodoto "'.$products[$x]->getNome_prodotto().'" è stato aggiunto al carrello';


    $carrello = $_SESSION['prodottoInCarrello'];//qui creo il mio array di oggetti "carrello" che successivamente verrà salvato nel database come query

    //genero la query che salverà il carrello dell'utente
    $carrelloInDB = "SELECT Cod_Prodotto, Cod_Categoria, Nome, Prezzo_Vendita, Scorte_Magazzino FROM Prodotto WHERE ";
    for (
    $y = 0; $y<count($carrello);$y++){
    if (
    $y<count($carrello)-1){
    $carrelloInDB .= "Cod_Prodotto = " . $carrello[$y]->getCod_prodotto() . " OR ";
    }
    else {
    $carrelloInDB .= "Cod_Prodotto = " . $carrello[$y]->getCod_prodotto() . " ";//lo spazio finale è importante
    }
    }

    //echo $carrelloInDB;
    $nickSessione = $_SESSION["nickname"];//solo per la query

    //------//Mi servono solo per verificare di non stare sovrascrivendo un carrello precedentemente memorizzato
    $queryCarrello2 = $mysqli->query("SELECT Carrello FROM Utenti WHERE Nickname = '$NickS'");
    $carrelloSalvato2 = $queryCarrello2->fetch_row();
    //------//


    //memorizzo il carrello nel database
    if($carrelloSalvato2[0][0]!='S'){
    $queryCambiamento = $mysqli->query("UPDATE Utenti SET Carrello = '$carrelloInDB' WHERE Nickname = '$nickSessione'");
    }

    else{
    //
    $carrelloSalvato2[0] .= "OR Cod_Prodotto = " . $product->getCod_prodotto() . " ";//lo spazio finale è importante
    $queryCambiamento2 = $mysqli->query("UPDATE Utenti SET Carrello = '$carrelloSalvato2[0]' WHERE Nickname = '$nickSessione'");
    }

    }
    else{
    echo
    'Il prodoto "'.$products[$x]->getNome_prodotto().'" è già presente nel carrello';

    }

    echo
    '<br>';
    break;
    }
    }

    }
    //..
    //..
    //..

    $mysqli = connect();
    if(isset(
    $_POST[bottone_carrello])){ // riga 216

    $nickSessione = $_SESSION["nickname"];//solo per la query

    $queryCarrello3 = $mysqli->query("SELECT Carrello FROM Utenti WHERE Nickname = '$nickSessione'");
    $carrelloSalvato = $queryCarrello3->fetch_row();

    $ottengoCarrello2 = $mysqli->query($carrelloSalvato[0]);


    while (
    $row = $ottengoCarrello2->fetch_row()) {

    $prodottoNelCarrello = new Prodotto($row[0], $row[1], $row[2], $row[3], $row[4]);
    $oggettiGiustoOrdine[]=$prodottoNelCarrello;//un array che segna gli oggetti nel giusto ordine del carrello
    }

    $carrelloBottoneElimina = $_POST[bottone_carrello];


    $carrelloPulito = array();
    for(
    $x = 0; $x < count($oggettiGiustoOrdine); $x++){
    if(
    $carrelloBottoneElimina[$x] == 'Rimuovi'){

    echo
    "Hai rimosso dal carrello: " . $oggettiGiustoOrdine[$x]->getNome_prodotto();

    for(
    $y = 0; $y < count($oggettiGiustoOrdine); $y++){
    if(
    $oggettiGiustoOrdine[$y] != $oggettiGiustoOrdine[$x]){
    $carrelloPulito[]=$oggettiGiustoOrdine[$y];
    }
    }

    $oggettiGiustoOrdine = $carrelloPulito;

    $_SESSION['prodottoInCarrello'] = $oggettiGiustoOrdine;//è importante aggiornare il valore dei prodotti in carrello, ordinandola di nuovo

    //creo e aggiorno la nuova query:
    $carrelloInDB = "SELECT Cod_Prodotto, Cod_Categoria, Nome, Prezzo_Vendita, Scorte_Magazzino FROM Prodotto WHERE ";


    for (
    $y = 0; $y<count($oggettiGiustoOrdine);$y++){
    $carrelloInDB .= "Cod_Prodotto = " . $oggettiGiustoOrdine[$y]->getCod_prodotto() . " OR ";
    }

    if(
    count($oggettiGiustoOrdine)==0){
    echo
    '<br>';
    echo
    "Il tuo carrello è al momento vuoto!\n";
    }

    $carrelloInDB .= "Cod_Prodotto = 0 "; //non esistono prodotti con chiave 0, lo utilizzo per terminare la query

    $queryCambiamento = $mysqli->query("UPDATE Utenti SET Carrello = '$carrelloInDB' WHERE Nickname = '$nickSessione'");


    }
    }


    }
    Ultima modifica di progettoditelematica2019 : 25-07-2019 alle ore 23.45.36

  17. #17
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    se entro con root non ne parliamo mamma mia mamma mia la mia testa esplode

    Notice: Undefined index: categoria in /membri/progettoditelematica2019/visualizzafatture.php on line 31

    Notice: Undefined index: fromDate in /membri/progettoditelematica2019/visualizzafatture.php on line 32

    Notice: Undefined index: toDate in /membri/progettoditelematica2019/visualizzafatture.php on line 33

    Notice: Undefined index: categoriaA in /membri/progettoditelematica2019/visualizzafatture.php on line 35

    Notice: Undefined index: fromDateA in /membri/progettoditelematica2019/visualizzafatture.php on line 36

    Notice: Undefined index: toDateA in /membri/progettoditelematica2019/visualizzafatture.php on line 37



    Notice: Undefined index: cerca_vendite in /membri/progettoditelematica2019/visualizzafatture.php on line 129

    Notice: Undefined variable: total in /membri/progettoditelematica2019/visualizzafatture.php on line 147



    Notice: Undefined index: cerca_acquisti in /membri/progettoditelematica2019/visualizzafatture.php on line 189

    Notice: Undefined variable: total in /membri/progettoditelematica2019/visualizzafatture.php on line 208



    se clicco su gestioneclientiefornitori


    Warning: include(Fornitore.php): failed to open stream: No such file or directory in /membri/progettoditelematica2019/gestioneclientiefornitori.php on line 4

    Warning: include(): Failed opening 'Fornitore.php' for inclusion (include_path='.:') in /membri/progettoditelematica2019/gestioneclientiefornitori.php on line 4

    Fatal error: Class 'Fornitore' not found in /membri/progettoditelematica2019/gestioneclientiefornitori.php on line 335


    file visualizzafatture.php
    Codice PHP:
    <?php
    //..
    //..
    //..
    $mysqli = connect(); // riga 30
    $categoria = $_POST['categoria']; // riga 31
    $fromDate = $_POST['fromDate']; // riga 32
    $toDate = $_POST['toDate']; // riga 33

    $categoriaA = $_POST['categoriaA']; // riga 35
    $fromDateA = $_POST['fromDateA']; // riga 36
    $toDateA = $_POST['toDateA']; // riga 37
    //..
    //..
    //..
    <table style="width:100%" border="1">
    <
    tr>
    <
    th>Data</th><th>Codice Cliente</th> <th>Nickname</th> <th>Codice Fattura</th> <th>Importo</th>
    </
    tr>
    <?
    php
    if (isset($_POST["cerca_vendite"]) || $_SESSION['cerca_vendite'] == true){ //riga 129

    if (!isset($_SESSION['cerca_vendite'])) {
    $_SESSION['cerca_vendite'] = true;
    }

    $total = 0;
    while (
    $row = $query->fetch_row()) {
    echo
    '<tr>'.'<td>'.$row[0].'</td>'.'<td>'.$row[1].'</td>'.'<td>'.$row[2].'</td>'.'<td>'.$row[3].'</td>'.'<td>'.$row[4].'</td>'.'</tr>';
    $total+=$row[4];
    }
    if(!(
    $query->num_rows)>0){
    echo
    "Non ci sono fatture in queste date.";
    }
    }

    //.
    //..

    echo '<tr><td></td><td></td><td></td><td></td><th>Totale</th></tr>';

    echo
    '<tr><td></td><td></td><td></td><td></td><td>'.$total.'</td></tr>'; //riga 147
    //.
    //..
    <table style="width:100%" border="1">
    <
    tr>
    <
    th>Data</th><th>Codice Fornitore</th> <th>Nickname</th> <th>Codice Fattura</th> <th>Importo</th>
    </
    tr>
    <?
    php
    if (isset($_POST["cerca_acquisti"]) || $_SESSION['cerca_acquisti'] == true){ //riga 189

    //.
    //..

    if(!($query2->num_rows)>0){
    echo
    "Non ci sono fatture in queste date.";
    }
    }

    echo
    '<tr><td></td><td></td><td></td><td></td><th>Totale</th></tr>';

    echo
    '<tr><td></td><td></td><td></td><td></td><td>'.$total.'</td></tr>'; //riga 208
    gestioneclientifornitori.php non l'ho messo volutamente, vediamo pian piano, scusami se ti sto stressando intanto è partito ed è qualcosa e ti ringrazio infinitamente!!!
    Ultima modifica di progettoditelematica2019 : 25-07-2019 alle ore 23.55.29

  18. #18
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Vediamo uno per uno gli errori:

    Nel codice assumi che arrivino via POST tutti quei parametri, ma non arrivano. Che ci vuoi fare, così va il mondo.
    Dovresti assicurarti che quel prezzo di codice venga eseguito solo a condizione che quei dati siano arrivati, oppure prevedere dei valori di default. Dipende molto da come decidi di gestire quella pagina. Potrebbe anche essere che non c'è corrispondenza tra il nome del parametro nello script PHP (es. "categoria") e il nome dello stesso nel form da cui è inviato (es. "Categoria" con la "C" maiuscola).


    queste cose me le hai già spiegate, pero perchè non spariscono togliendo dal codice error_reporting(E_ALL); ??

    EDIT

    domattina provo a controllare parametro per parametro se esiste corrispondenza
    Ultima modifica di progettoditelematica2019 : 26-07-2019 alle ore 00.00.36

  19. #19
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    queste cose me le hai già spiegate, pero perchè non spariscono togliendo dal codice error_reporting(E_ALL); ??
    Probabilmente ne è rimasto uno da qualche parte, magari in un file PHP che viene incluso (per esempio connessione.php) e quindi lo attiva ovunque.
    Ovviamente la cosa più saggia è correggere tutti gli errori, uno per uno anche perché perlopiù si tratta di sviste e cose rapide da sistemare.

    Oltre agli undefined index di cui abbiamo già discusso, ci sono:
    Notice: Use of undefined constant bottone - assumed 'bottone' in /membri/progettoditelematica2019/InVendita.php on line 149
    Hai scritto
    Codice PHP:
    if(isset($_POST[bottone])){
    anziché
    Codice PHP:
    if(isset($_POST['bottone'])){
    Notice: Undefined variable: total in /membri/progettoditelematica2019/visualizzafatture.php on line 147
    La variabile $total non è definita. Se guardi il codice:
    Codice PHP:
    if (isset($_POST["cerca_vendite"]) || $_SESSION['cerca_vendite'] == true) {
    ...
    $total = 0;
    ...
    }
    ...
    echo
    '<tr><td></td><td></td><td></td><td></td><td>' . $total . '</td></tr>';
    noterai che la variabile viene creata dentro al corpo dell'if, quindi quando questo non viene eseguito $total non esiste, eppure la usi comunque in una stampa.

    Warning: include(Fornitore.php): failed to open stream: No such file or directory in /membri/progettoditelematica2019/gestioneclientiefornitori.php on line 4
    Warning: include(): Failed opening 'Fornitore.php' for inclusion (include_path='.:') in /membri/progettoditelematica2019/gestioneclientiefornitori.php on line 4
    Fatal error: Class 'Fornitore' not found in /membri/progettoditelematica2019/gestioneclientiefornitori.php on line 335
    Probabilmente il percorso del file è sbagliato, quindi non viene incluso, e la classe Fornitore risulta non definita.

    I suggerimenti che do più spesso:


  20. #20
    Data registrazione
    21-07-2019
    Messaggi
    13

    Predefinito

    OK perfetto di tutti gli aiuti sei stato gentilissimo.
    Avevo finito questo progetto ieri mattina, non era ancora perfetto ma andava bene cosi.
    L'ho consegnato ieri pomeriggio insieme a una relazione cosi ho chiuso la materia e ho preso 26.
    Ti ringrazio ancora se non era per te ci avrei messo chissa quanto tempo in più.
    Ciao grazie ancora!! potete chiudere il post

  21. #21
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Figurati ! Complimenti per il voto!

    I suggerimenti che do più spesso:


Tags for this Thread

Regole di scrittura

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