Visualizzazione risultati 1 fino 8 di 8

Discussione: [php] Modificare campi del database: SELECT e UPDATE

  1. #1
    Guest

    Predefinito [php] Modificare campi del database: SELECT e UPDATE

    Ciao a tutti.
    Vorrei modificare una pagina che preleva dal database dei dati contenuti in una tabella.

    Quindi prima effettuo il select e poi faccio l'update.
    Il select mi serve per far stampare nel form i dati che precedentemente erano stati inviati.

    Select
    Codice PHP:
    <?php
    if (!isset ($_GET['campo'])) { $_GET['campo'] = -1; }
    $campo= mysql_escape_string ($_GET['campo']);
    ?>

    <?php
    include "file_funzioni.php";

    // chiamata alla funzione di connessione
    $data->connetti();

    $sql = $data->query("SELECT * FROM table WHERE campo = '$campo'");

    if {
    //blablabla
    }
    ?>
    Update
    Codice PHP:
    <?php
    session_start
    ();
    if(isset(
    $_POST['submit'])&&($_POST['submit']=="Scrivi")){

    if(isset(
    $_POST['titolo'])){
    $titolo = addslashes(filter_var($_POST['titolo'], FILTER_SANITIZE_STRING));
    }

    if(isset(
    $_POST['contenuto'])){
    $contenuto = addslashes(filter_var($_POST['contenuto'], FILTER_SANITIZE_STRING));
    }

    $sql = $data->query("UPDATE table SET titolo='$titolo', contenuto='$contenuto' WHERE campo = '$campo'");

    // disconnessione
    $data->disconnetti();

    }
    ?>
    Form
    Codice HTML:
    <form action="modifica.php" method="post">
    Titolo<br>
    <input name="titolo" type="text" value="<?php echo $titolo; ?>"><br />
    Contenuto:<br/>
    <textarea name="contenuto" cols="35" rows="10"><?php echo $contenuto; ?></textarea><br />
    <input name="submit" type="submit" value="Scrivi">
    </form>
    
    <?
    }
    ?>
    Appena invio il form, ricevo pagina bianca e il database rimane invariato.
    Dove sbaglio?
    Ultima modifica di musicanapoli : 12-06-2011 alle ore 20.46.55

  2. #2
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    1-Ti da errore?
    2-Se esegui la query direttamente in mysql con dati di prova funziona?
    3-Fai una stampa della query.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  3. #3
    Guest

    Predefinito

    Allora, il select funziona, nel senso che quando apro la pagina, nel form vengono estrapolati e stampati tutti i dati che richiamo dal database.

    Ho provato a lanciare questa query direttamente nel database:
    Codice:
    UPDATE table SET campo = 'frase da cambiare' WHERE id = 1
    Il campo viene modificato normalmente.

    Il primo script per il select è quello che utilizzo di solito per stampare i dati in una pagina e quindi quello funziona.
    Il form è semplice.
    Per lo script dell'update, ho provato diversi script e dicono che l'update è stato eseguito. Invece nel database non viene modificato nulla.
    Ultima modifica di musicanapoli : 13-06-2011 alle ore 17.33.26

  4. #4
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    No spetta ....
    ma sei sicuro che la connessione non sia chiusa?
    Prova a non eseguire la select ma compilare i campi a mano.
    Ultima modifica di binarysun : 14-06-2011 alle ore 09.27.18
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  5. #5
    Guest

    Predefinito

    Ho pulito un po' il codice:
    Codice PHP:
    <?php

    if (!isset ($_GET['campo']))
    {
    $_GET['campo'] = -1;
    }

    $_GET['campo'] = mysql_escape_string($_GET['campo']);

    include
    "file_funzioni.php";

    // chiamata alla funzione di connessione
    $data->connetti();

    $sql = $data->query("SELECT * FROM table WHERE campo = '{$_GET['campo']}'");

    if {
    //blablabla
    }
    ?>

    <?php

    session_start
    ();

    if(isset(
    $_POST['submit']))
    {
    if (!!
    $_POST['titolo']) # !! è uguale a !empty()
    {
    $_POST['titolo'] = addslashes(filter_var($_POST['titolo'], FILTER_SANITIZE_STRING));
    }

    if (!!
    $_POST['contenuto'])
    {
    $_POST['contenuto'] = addslashes(filter_var($_POST['contenuto'], FILTER_SANITIZE_STRING));
    }

    $sql = $data->query("UPDATE table SET titolo='{$_POST['titolo']}', contenuto='{$_POST['contenuto']}' WHERE campo = '$campo'");

    // disconnessione
    $data->disconnetti();
    }

    ?>
    Ma non capisco: $sql come viene valorizzata? Con l'ID della risorsa, con un valore booleano, con i risultati della query o cosa?
    Non vedo niente che faccia queste cose per poter gestire i risultati delle query.
    Dovresti postare il metodo query().

    Poi non capisco il perché del mysql_real_escape_string() e poi di add_slashes() e filter_var(); al massimo fai una funzione per pulire in modo uguale le variabili.


  6. #6
    Guest

    Predefinito

    Ma non capisco: $sql come viene valorizzata?
    Nell'if di cui ho omesso il codice (?):
    Codice PHP:
    if(mysql_num_rows($sql) > 0){
    // estrazione dei record
    $post_obj = $data->estrai($sql);
    $campo = $post_obj->campo;
    $titolo = $post_obj->titolo;
    }
    Lo script per il select funziona.

    Forse non riesce a prendere le variabili, mi spiego meglio.
    Ho provato a lanciare uno script senza form, scrivendo i dati chiari senza variabili:
    Codice PHP:
    $sql = 'UPDATE table
    SET titolo="Ciao!!!"
    WHERE campo=1'
    ;
    Ed il campo sul database viene modificato.

    Io in pratica avrei un url di questo tipo:
    nomesito.it/edit.php?campo=1

    e per esempio voglio modificare solo il campo "titolo":
    Codice HTML:
    <form action="modifica.php" method="post">
    Titolo:<input name="titolo" type="text" value="<?php echo $titolo; ?>"><input name="submit" type="submit" value="Scrivi">
    </form>
    Comunque grazie per aver sistemato il codice, l'ho rimpiazzato, ma non cambia nulla.

    Poi non capisco il perché del mysql_real_escape_string() e poi di add_slashes() e filter_var();
    Intendi il mysql_escape_string() del primo script?...
    Ho visto che è deprecato. Ed effettivamente prima non lo utilizzavo prima, quindi lo avrò aggiunto nel corso del tempo, copiandolo da qualche esempio. Elimino tutto questo?
    Codice PHP:
    $_GET['campo'] = mysql_escape_string($_GET['campo']);
    al massimo fai una funzione per pulire in modo uguale le variabili.
    addslashes() e filter_var() non vanno bene scritte in questo modo? Tu dici di creare una funzione che faccia tutto in una volta? Esempio?
    Ultima modifica di musicanapoli : 14-06-2011 alle ore 20.18.45

  7. #7
    Guest

    Predefinito

    Ma scusa, prima parli di "campo" ed ora di "id"; non è che stai confondendo e sbagli la query per la modifica?


  8. #8
    Guest

    Predefinito

    No, ho sbagliato a scrivere "id" al posto di "campo", ma solo qui, ora ho editato il post precedente. I dati inseriti negli script sono corretti.

    Edit.

    Ho trovato il problema. Non rileva il campo "campo".
    Quando scrivo:
    Codice PHP:
    ("UPDATE table SET titolo='{$_POST['titolo']}' WHERE campo = '$campo'");
    non modifica.
    Se invece scrivo esattamente:
    Codice PHP:
    ("UPDATE table SET titolo='{$_POST['titolo']}' WHERE campo =1");
    Il campo "titolo" viene modificato.


    Edit. 2

    ^_^'
    Ho risolto inviando tramite form anche il campo "campo":
    Codice HTML:
    <form action="modifica.php" method="post">
    <input name="campo" type="text" value="<?php echo $campo; ?>"><br />
    Titolo<br>
    <input name="titolo" type="text" value="<?php echo $titolo; ?>"><br />
    Contenuto:<br/>
    <input name="submit" type="submit" value="Scrivi">
    </form>
    Ultima modifica di musicanapoli : 14-06-2011 alle ore 21.32.53

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
  •