• User

    @Blancks said:

    Prova a stampare la query sql a schermo, così controlli se la variabile $id contiene effettivamente qualcosa, se è quello che ti aspettavi di trovare ed.. in caso.. copiarla nella finestra delle query del phpMyAdmin per vedere cosa ti dice il manager del database.

    Sul tuo vecchio server probabilmente nel php.ini erano disabilitati gli E Warning, per questo non visualizzavi l'errore.

    Mmhmhhm.. non mi è chiaro cosa intendi con i passaggi "stampare la query sql a schermo" e in secundis "copiarla nella finestra delle query del phpMyAdmin per vedere cosa ti dice il manager del database". Riusciresti a spiegarmi i passaggi?

    E terzo.. se il server vecchio non mi visualizzava gli E Warning, possibile che comunque funzionasse?

    Grazie davvero!


  • User

    Non mi veniva altro termine per indicarti di fare una cosa del genere:
    [PHP]echo $sql;[/PHP]

    A questo punto logicamente visualizzerai nella pagina la query sql eseguita, in questo modo potrai verificare se risulta essere scritta come ti aspettavi.

    Se il problema era semplicemente l'id penso che dovresti saper trovare infretta l'errore che chiaramente è altrove..

    Se non è così accedi al phpMyAdmin o a qualunque altro software di gestione del database e delle tabelle ivi conservate ed esegui la query mostrata nella pagina direttamente nella zona dedita che si chiama, perl'appunto, finestra delle query.


  • User

    Ok.. era una banalità, scusami. Non ne avevo capito il senso.
    Bene, ho provato a stampare a schermo e mi restituisce:

    SELECT title FROM pagine WHERE id=''
    ```E anche qui è molto strano: l'url della mia pagina è dominio.it/pagina.php?id=nome_campo
    Possibile che stampando la query non mi prenda la variabile indicata nell'URL?
    
    Secondo: da phpmyadmin ho eseguito la query di cui sopra specificando un id che avevo nella tabella: il risultato è INSIEME VUOTO.. peccato che nella tabella il valore ci sia!! Ho controllato molto bene!!
    title è un varchar(100) latin1_swedish_ci.
    Il problema potrebbe essere l'uso dell'underscore?
    
    Mistero..

  • User

    Affatto, non recuperi l'id usando l'array superglobale $_GET.

    In sostanza, prova aggiungendo la seguente riga subito prima della query:
    [php]$id = $_GET['id'];[/php]Inoltre, se ti aspetti sempre e solo un dato numerico filtra l'id forzando il dato come intero, ovvero in questa maniera:
    [php]$id = (int)$_GET['id'];[/php]In questo modo ti proteggi da eventuali sql injection.

    :ciauz:


  • User

    GRANDE!!
    Risolto il problema.. pensa che nel frattempo avevo aperto un ticket e il capoccia dell'hosting mi ha chiamato su Skype per risolvere assieme il problema.. stavamo smanettando sui DUMP del MySql quando è arrivata la tua risposta e ha risolto tutto 😉
    Devo ancora studiarmi bene PHP.. questo è stato un esempio eclatante!

    Sui server di Aruba ho avuto la conferma che gli E Warning non vengono visualizzati.

    Ti devo una birra ;), quando vieni a Milano chiamami 😄

    Alessandro


  • User

    Volentieri 😄


  • User

    Ci risiamo.. oggi mi si è presentato un altro problema simile a questo, ma di cui non riesco a capirne la causa.

    Ho progettato questo pannello di controllo che serve ad aggiornare le pagine di un sito web: in sostanza richiamo i campi del mio DB MySql e utilizzo un form per aggiornarli.
    Sul precedente server non ho mai avuto problemi con l'aggiornamento dei dati, ora si.
    Nel momento in cui passo i dati tramite il metodo POST del form, richiamo nella pagina successiva conferma_pagina.php tutte le variabili e le inserisco nel DB:

    [PHP]include("../connessione.php");
    $id = $_GET['id'];
    $testo = $_GET['testo'];
    $titolo = $_GET['titolo'];
    $descrizione = $_GET['descrizione'];
    $sql="UPDATE pagine SET code='$testo' WHERE id='$id'";
    if (!mysql_query($sql,$connessione)) {
    echo"<h1>Errore, modifica della pagina non eseguita. Contattare <a href="mailto:[email protected]">Alessandro Modena</a></h1><br />";
    exit;
    } else {
    echo"<h2>La pagina $id è stata modificata correttamente. <br /><br /><a href="../pagina.php?id=$id">Vai alla pagina</a> appena modificata, oppure torna al <a href="index.php">Pannello di Controllo</a>.<br /></h2>";
    }
    $sql="UPDATE pagine SET title='$titolo' WHERE id='$id'";
    $testosidebar=mysql_query($sql,$connessione);
    $sql="UPDATE pagine SET description='$descrizione' WHERE id='$id'";
    $testosidebar=mysql_query($sql,$connessione);
    mysql_close($connessione);[/PHP]

    Utilizzando quello che ho capito ieri dopo la spiegazione di Blanks, ho richiamato i dati con l'array superglobale GET.
    In sostanza ora le variabili sono VUOTE e quindi mi aggiorna il record del DB cancellando tutte le informazioni precedentemente inserite!

    Qualcuno sa dirmi come mai?

    Grazie.. Ale


  • User

    Se il form ha il metodo post, le variabili passate tramite esso non le richiami più con l'array superglobale $_GET, bensì $_POST 😉

    Inoltre fai ben tre query di update quando, in questo caso, puoi riassumere tranquillamente tutto in una:
    [PHP]$sql="UPDATE pagine SET title='$titolo', code='$testo', description='$descrizione' WHERE id='$id'";[/PHP]

    Fammi sapere come va 😉


  • User

    Ehm.. 🙂
    Avevo avuto questa intuizione, ma passando la variabile id direttamente nell'url [PHP]conferma_pagina.php?id=<?php echo $id; ?>[/PHP] pur cambiando il $_GET in $_POST, non passava id e quindi non funzionava nulla ;).

    Ora ovviamente tutto ok 😉 Grazie ancora.

    E siamo a 2 birre..!


  • User

    Ci si può fare un po di confusione inizialmente, per cui meglio specificare nel qual caso altri utenti rischino di incappare nello stesso problema e trovare questo topic 😉

    L'array superglobale $_GET lo si utilizza per il recupero di dati da url o da form con method impostato, ovviamente, su get.

    L'array superglobale $_POST invece per il recupero di informazioni passate da form con il method impostato su post.

    Lieto di esserti stato nuovamente d'aiuto :ciauz: