Visualizzazione risultati 1 fino 15 di 15

Discussione: Non si inseriscono nuove righe tabella database

  1. #1
    Data registrazione
    27-06-2018
    Messaggi
    9

    Predefinito Non si inseriscono nuove righe tabella database

    buona sera

    premetto che ho già realizzato su Altervista un paio di siti Html/PHP/MySQL regolarmente funzionanti.

    Ne sto testando uno nuovo e mi trovo di fronte ad un problema inatteso.

    Ho caricato il database composto da più tabelle - le posso interrogare ma non riesco ad inserire nuovi record attraverso pagine php. L'operatività tramite phpmyadmin è invece regolare.

    La pagina di invio dati (….INSERT INTO ….) finisce il ciclo regolarmente senza errori ma la riga in tabella non viene scritta. Ho messo vari flag per essere sicuro del funzionamento e quindi sono certo che la routine è corretta. Anche perché nella versione WAMP in "locale" tutto funziona.

    Cosa è cambiato? occorre dare qualche abilitazione all'editing delle tabelle?
    Help me please!!

    saluti
    Franco

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    No in generale non è necessaria alcuna strana operazione per poter scrivere nel database.
    Fai un po' di debug: lo script si connette correttamente al database? La query cosa restituisce? Il codice ritorna qualche errore? Ci sono controlli?

    Ciao!

  3. #3
    Data registrazione
    27-06-2018
    Messaggi
    9

    Predefinito

    IMPORTANTE - L'applicazione in locale (WAMP sever) funziona

    Come le altre volte ho caricato file e database su Altervista.
    Tutto funziona senza dare errori … le query cercano i dati, li leggono e li stampano a video … unica cosa che non funziona è l'inserimento di una nuova riga in tabella. Ho fatto debug, modifiche, prove, ho messo flag di controllo passaggio etc..
    La funzione finisce - esco dalla pagina di inserimento senza errori e torno alla pagina Home … TUTTO OK!

    però il database non si è modificato

    ciao

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Sì ma in locale potrebbero esserci impostazioni meno stringenti rispetto AlterVista.

    Cosa ritorna il metodo query() quando effettui la INSERT? Puoi mostrare un po' di codice?
    Se la stessa identica query funziona da phpMyAdmin, allora c'è qualche problema nel PHP: anche phpMyAdmin utilizza PHP per interagire con il database proprio come la tua pagina.

    Ciao!

  5. #5
    Data registrazione
    27-06-2018
    Messaggi
    9

    Predefinito

    Codice PHP:
    .
    .
    .

    if ( (
    $metodo_ID=="") or ($data=="") or ($risorsa_ID=="") or ($sottocat_ID==""))
    {
    echo
    "<b><font size='4' color='#FF0000'>ERRORE INSERIMENTO - DATI NON MEMORIZZATI - RIPETERE OPERAZIONE</font></b>";
    }
    else
    {
    $query = mysql_query("INSERT INTO movimenti
    ( data,attivita,metodo,risorsa,contatto,categoria,sottocategoria,costo,importo,descrizione,saldato)
    values ('"
    .$data."','".$attivita."','".$metodo_ID."','".$risorsa_ID."','".$contatto_ID."','".$categoria_ID."','".$sottocat_ID."','".$costi_ID."','".$spesa."','".$descriz."','".$saldo."')");
    echo
    $spesa.'<br>';
    }
    mysql_close($link);// chiusura di MySQL

    $link = "new_uscita.php";
    echo
    "<meta http-equiv="refresh" content="4;url=$link" /> ";

    echo
    "<html>
    <head>
    <title>memorizza nuova uscita</title>
    </head>
    </html>"
    NOTA : solo alla prima chiamata appare il messaggio DEPRECATED.... per via della chiamata mysql
    però tutto sembra funzionare … nessun allarme … la pagina di trasferimento dati si chiude dopo 4 sec e si torna alla pagina principale
    ...ma la riga non è stata scritta

    ciao
    Ultima modifica di alemoppo : 24-07-2018 alle ore 10.04.51 Motivo: +tag [php]

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Come dicevo, guarda cosa ritorna la query. In caso di errore stampa il messaggio; una cosa del tipo:
    Codice PHP:
    <?php
    if ( ($metodo_ID=="") or ($data=="") or ($risorsa_ID=="") or ($sottocat_ID==""))
    {
    echo
    "<b><font size='4' color='#FF0000'>ERRORE INSERIMENTO - DATI NON MEMORIZZATI - RIPETERE OPERAZIONE</font></b>";
    }
    else
    {
    $query = mysql_query("INSERT INTO movimenti (data,attivita,metodo,risorsa,contatto,categoria,sottocategoria,costo,importo,descrizione,saldato) values ('".$data."','".$attivita."','".$metodo_ID."','".$risorsa_ID."','".$contatto_ID."','".$categoria_ID."','".$sottocat_ID."','".$costi_ID."','".$spesa."','".$descriz."','".$saldo."')");
    echo
    $spesa.'<br>';
    if(
    $query === FALSE)
    echo
    'Errore mysql: '.mysql_error();
    }
    mysql_close($link);// chiusura di MySQL

    $link = "new_uscita.php";
    echo
    "<meta http-equiv="refresh" content="4;url=$link" /> ";

    echo
    "<html>
    <head>
    <title>memorizza nuova uscita</title>
    </head>
    </html>"
    Altri piccoli appunti:
    • Come hai detto tu stesso, stai utilizzando funzioni obsolete. Dovresti passare a mysqli o PDO.
    • Per controllare se le stringhe sono vuote, andrebbe usata empty()
    • Il tag <font> è obsoleto; a maggior ragione le varie sue proprietà (color, etc)
    • Potenzialmente, lo script scrive codice HTML prima dell'apertura di <html> (le echo a riga7, riga14).
    • <meta> andrebbe tra <head>, e non prima di <html>.


    Ciao!
    Ultima modifica di alemoppo : 24-07-2018 alle ore 10.19.57

  7. #7
    Data registrazione
    27-06-2018
    Messaggi
    9

    Predefinito

    ti ringrazio per le note e i suggerimenti

    diciamo che ho tentato di tener buona una struttura collaudata da tempo, ma penso che dovrò rassegnarmi a studiare nuove soluzioni (mysqli)

    ciao

    franco

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Hai provato con mysql_error() per vedere un eventuale errore della query?
    Comunque mysqli in procedurale è molto simile a mysql, vedi l'esempio (quello sotto, procedurale).

    Ciao!

  9. #9
    antoninom90 non è connesso Utente giovane
    Data registrazione
    09-01-2015
    Messaggi
    33

    Predefinito

    Citazione Originalmente inviato da gestionecontofamiglia Visualizza messaggio
    Codice PHP:
    .
    .
    .

    if ( (
    $metodo_ID=="") or ($data=="") or ($risorsa_ID=="") or ($sottocat_ID==""))
    {
    echo
    "<b><font size='4' color='#FF0000'>ERRORE INSERIMENTO - DATI NON MEMORIZZATI - RIPETERE OPERAZIONE</font></b>";
    }
    else
    {
    $query = mysql_query("INSERT INTO movimenti
    ( data,attivita,metodo,risorsa,contatto,categoria,sottocategoria,costo,importo,descrizione,saldato)
    values ('"
    .$data."','".$attivita."','".$metodo_ID."','".$risorsa_ID."','".$contatto_ID."','".$categoria_ID."','".$sottocat_ID."','".$costi_ID."','".$spesa."','".$descriz."','".$saldo."')");
    echo
    $spesa.'<br>';
    }
    mysql_close($link);// chiusura di MySQL

    $link = "new_uscita.php";
    echo
    "<meta http-equiv="refresh" content="4;url=$link" /> ";

    echo
    "<html>
    <head>
    <title>memorizza nuova uscita</title>
    </head>
    </html>"
    NOTA : solo alla prima chiamata appare il messaggio DEPRECATED.... per via della chiamata mysql
    però tutto sembra funzionare … nessun allarme … la pagina di trasferimento dati si chiude dopo 4 sec e si torna alla pagina principale
    ...ma la riga non è stata scritta

    ciao
    Prova così:

    $query = mysql_query("INSERT INTO movimenti (data,attivita,metodo,risorsa,contatto,categoria,s ottocategoria,costo,importo,descrizione,saldato) values ('".$data."','".$attivita."','".$metodo_ID."','".$ risorsa_ID."','".$contatto_ID."','".$categoria_ID. "','".$sottocat_ID."','".$costi_ID."','".$spesa."' ,'".$descriz."','".$saldo."')") or die('Errore durante una richiesta a MySQL: '.mysql_error());
    Ti dovrebbe restituire a schermo l'errore che è stato riscontrato durante l'esecuzione della query.

    Ciao!

  10. #10
    Data registrazione
    27-06-2018
    Messaggi
    9

    Predefinito

    Come avevo promesso mi sono impegnato a passare alla versione my_sqli
    e quasi ci sono arrivato - ora sono fermo su questo scoglio:

    Questa applicazione non funziona
    il suo print_screen è:
    --------------------------------
    Connectedsuccessfully
    Clara
    22

    e il programma non termina
    --------------------------------

    sembra quindi che la riga
    while ($row = mysqli_fetch_array($ris))

    tenga bloccato l'avanzamento


    Codice PHP:
    <?php

    include "connessione.php";

    $my_db = new mysqli('localhost','gestionecontofamiglia','','my_gestionecontofamiglia');
    if(!
    $my_db ) {
    die(
    'Could not connect: ' . mysqli_error());
    }
    echo
    'Connected successfully<br>'; //flag verifica

    $contatto = 'Clara';
    echo
    $contatto.'<br>'; //flag verifica

    $sql = "SELECT * from contatti where contatto = $contatto";
    $ris = mysqli_query($my_db, $sql);
    echo
    "22".'<br>'; //flag verifica
    while ($row = mysqli_fetch_array($ris))
    {
    echo
    "33".'<br>'; //flag verifica
    $contatto_ID = $row['ID_contatto'];
    }

    $query = "INSERT INTO movimenti (contatto) VALUES ('$contatto_ID')";


    if (!
    $my_db->query($query)) {
    die(
    $mysqli->error);
    };

    mysqli_close($my_db);

    echo
    " <html>
    <head>
    <title>memorizza nuova uscita</title>
    </head>"
    ;

    $link = "new_uscita.php";
    echo
    "<meta http-equiv=\"refresh\" content=\"4;url=$link\" /> ";
    echo
    " </html>";

    ?>

    Basta cambiare nella riga SELECT la variabile $contatto con il testo corrispondente

    $sql = "SELECT * from contatti where contatto = 'Clara'";

    e il programma termina regolarmente
    con la scrittura del record e il cambio pagina

    il suo print_screen è:

    --------------------------------
    Connectedsuccessfully
    Clara
    22
    33

    --------------------------------


    ho tentato in tutti i modi di trovare la soluzione cercando esempi in rete
    e leggendo il manuale MYSQLI ma senza risultato
    Qualcuno sa indicarmi il modo corretto per chiamare la variabile?

    grazie
    Franco

  11. #11
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    La libreria mysqli è utilizzabile sia tramite programmazione ad oggetti sia procedurale.

    Nel codice hai utilizzato la programmazione ad oggetti; nella parte di esecuzione della query hai utilizzato "mysqli_query" e non "$my_db->query($query)" come hai fatto successivamente (che andrebbe usata).

    Ricapitolando,

    "mysqli_query", "mysqli_fetch_array", "mysqli_close" andrebbero tradotte nelle corrispettive ad oggetti (vedi appunto l'esempio qui, non confonderti con l'esempio sotto procedurale).

    Ciao!
    Ultima modifica di alemoppo : 27-07-2018 alle ore 19.19.42

  12. #12
    Data registrazione
    27-06-2018
    Messaggi
    9

    Predefinito

    Se ho capito bene ho fatto un mix tra prog. a oggetti e prog. procedurale

    siccome io la programmazione ad oggetti non la conosco e dovrei fare un grosso sforzo di apprendimento,
    pensavo di stare sulla seconda - quella PROCEDURALE
    ma evidentemente gli esempi in rete hanno aumentato la mia confusione.

    mi sai indicare un sito che riesca a chiarirmi le idee e a fornirmi esempi congrui?

    comunque resta il mistero del perché con una costante funzione e con una variabile no

    GRAZIE
    franco
    Ultima modifica di gestionecontofamiglia : 27-07-2018 alle ore 19.29.56

  13. #13
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Puoi trovare esempi procedurali sempre nel link che ti ho inviato (sotto quello ad oggetti).

    Comunque:
    Codice PHP:
    $contatto = 'Clara';
    ...
    $sql = "SELECT * from contatti where contatto = $contatto";
    la query sarebbe:
    Codice:
    SELECT * from contatti where contatto = Clara"
    Mentre a te funziona (giustamente) con gli apici nella stringa:
    Codice:
    SELECT * from contatti where contatto = 'Clara'
    Quindi dovrebbe essere:
    Codice PHP:
    $contatto = 'Clara';
    ...
    $sql = "SELECT * from contatti where contatto = '$contatto'";
    In ogni caso, quando ti capitano questi problemi stampa a video (nella pagina) la query, nel tuo caso echo $sql; poi copi la query stampata e incollala nel campo SQL di phpMyAdmin (dopo aver selezionato il database).

    Ciao!
    Ultima modifica di alemoppo : 27-07-2018 alle ore 20.18.33

  14. #14
    Data registrazione
    27-06-2018
    Messaggi
    9

    Predefinito

    $sql = "SELECT * from contatti where contatto = '$contatto'";

    ho messo gli apici e funziona - GRAZIE dell'aiuto.

    Esprimo ora una considerazione personale …
    OK che il mondo debba proseguire, ma non capisco il motivo per cui si debbano sconvolgere le regole precedenti.

    Mettere apici ad una variabile in altri tempi avrebbe causato allarmi e errori di sintassi a non finire.

    Perché non si pensa a sviluppare nuove prestazioni senza inficiare le precedenti.
    Per me va bene, sono un hobbista e posso anche perdere tempo e mi spiace di averne fatto perdere anche a te. Ma nel mondo aziendale la compatibilità all'indietro delle nuove release è un must inderogabile. Altrimenti ci si scopa fuori da soli dal mercato.

    Ancora grazie
    Franco

  15. #15
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Dalle prime versioni (credo, o comunque da molti anni) una stringa inserita nel database deve essere compresa tra apici. Il tuo era un problema MYSQL, lato php non c'era alcun errore: php quella query la tratta semplicemente come fosse una stringa, quindi per lui è indifferente il contenuto.

    Ciao!

Regole di scrittura

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