Visualizzazione risultati 1 fino 7 di 7

Discussione: Scipr di modifica ricorsiva in campi di database

  1. #1
    Guest

    Predefinito Scipr di modifica ricorsiva in campi di database

    tutto nel titolo, dovevo modificare dei campi in un database,
    volevo farlo ricorsivamente per tutti i campi ma ho dovuto refreshare la pagina perchè non ha ciclato su tutte le righe...
    come mai?

    Codice PHP:
    <?
    $conn
    = mysql_connect("localhost", "UN", "PW")
    or die(
    "Connessione non riuscita: " . mysql_error());
    mysql_select_db("my_lsdfreetime",$conn);

    $query="SELECT * FROM swgb";
    $res=mysql_query($query) or die (mysql_error());

    while (
    $row = mysql_fetch_array($res)){
    $email=trim($row['email']);
    $id=$row['id'];
    if(
    $email=="-"){
    $email="";
    $query="UPDATE swgb SET email='' WHERE id='".$id."'";
    $res=mysql_query($query);
    if(
    $res==true){
    echo
    "<font color='green'>modificato con successo il campo: $id, la mail nuova è: $email</font><br>";
    }
    else{
    echo
    "<font color='red'>NON modificato il campo: $id, la mail è: $email</font><br>";
    }
    }
    }
    ?>
    grazie.

  2. #2
    Guest

    Predefinito

    Difficile dare una risposta sicura, si dovrebbe testare il tutto e verificare ad ogni operazione i risultati sel db (cioè visitarlo).
    Cmq da quanto ho visto hai commesso qualche "errore", cioè sarebbe meglio adottare alcuni accorgimenti di base di programmazione.
    Mi riferisco soprattutto ai nomi delle variabili, ne hai usate un paio uguali per riferirti a cose diverse; molte volte è questa la causa di incoerenze e/o errori, come in questo caso ($email, $res, ecc.).
    Un'altra accortezza che dovresti prendere come abitudine è l'uso di LIMIT 1 nelle query che richiedono, appunto, di modificare (in questo caso, ma anche in altri, tipo DELETE ecc.) soltanto un record specifico, il LIMIT ti assicura al 1000x1000 di lavorare su un unico record, così se dovessi toppare qualcosa nello script, nel peggiore dei casi limiti i danni!


    Ciaoooooo!!!!!!

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da debug
    Difficile dare una risposta sicura, si dovrebbe testare il tutto e verificare ad ogni operazione i risultati sel db (cioè visitarlo).
    Cmq da quanto ho visto hai commesso qualche "errore", cioè sarebbe meglio adottare alcuni accorgimenti di base di programmazione.
    Mi riferisco soprattutto ai nomi delle variabili, ne hai usate un paio uguali per riferirti a cose diverse; molte volte è questa la causa di incoerenze e/o errori, come in questo caso ($email, $res, ecc.).
    Un'altra accortezza che dovresti prendere come abitudine è l'uso di LIMIT 1 nelle query che richiedono, appunto, di modificare (in questo caso, ma anche in altri, tipo DELETE ecc.) soltanto un record specifico, il LIMIT ti assicura al 1000x1000 di lavorare su un unico record, così se dovessi toppare qualcosa nello script, nel peggiore dei casi limiti i danni!


    Ciaoooooo!!!!!!
    il problema è esattamente questo!
    cioè si ferma al primo record che verifica la conizione, lo modifica e poi non va ai seguenti...
    $email non è una variablie doppia, la prendo, confornto col DB, la modifico e la rimetto dentro al recordset...
    grazie per il consiglio di LIMIT, ad ogni modo non capisco come possa essere fatto ricorsivamente.
    dovevo ricaricare la pagina perchè lo script passasse al record successivo, mentre io volevo che fosse in automatico per tutti i record...

  4. #4
    Guest

    Predefinito

    A parte il fatto che è inutile che imposti il valore di $email, perchè non ci fai nulla dopo (nella query infatti non passi questa variabile).
    Hai provato come ti ho suggerito?
    Basta dare un nome diverso ogni volta alle var che usi, per esempio:
    ....
    if($email=="-"){
    $email2="";
    ....

    ecc anche per le altre.


    ciaoooo!!!!

  5. #5
    Guest

    Predefinito

    davvero non ne vedo l'utilità: io devo sostituire un campo. email nel datbase contiene il valore - che volgio sostituire, ad ogni passaggio il codice:
    entra nella riga e controlla se email="-"
    se è così, nel record viene aggiornato il valore eliminando il campo.
    perchè dovrei usare una variabile diversa ogni volta?

  6. #6
    Guest

    Predefinito

    Non mi hai capito.
    Ti posto l'intero script come dovrebbe essere:
    Codice PHP:
    <?
    $conn
    = mysql_connect("localhost", "UN", "PW")
    or die(
    "Connessione non riuscita: " . mysql_error());
    mysql_select_db("my_lsdfreetime",$conn);

    $query="SELECT * FROM swgb";
    $res=mysql_query($query) or die (mysql_error());

    while (
    $row = mysql_fetch_array($res)){
    $email=trim($row['email']);
    $id=$row['id'];
    if(
    $email=="-"){
    $query="UPDATE swgb SET email='' WHERE id='".$id."'";
    mysql_query($query);
    echo
    "<font color='green'>modificato con successo il campo: $id, la mail nuova è: $email</font><br>";
    }else{
    echo
    "<font color='red'>NON modificato il campo: $id, la mail è: $email</font><br>";
    }
    }
    ?>
    Ora fai bene attenzione alle modifiche che ho fatto. Soprattutto nota che ho tolto $email="" perchè inutile (infatti non la usi da nessuna parte dopo l'assegnazione di valore ""), ma il discorso che avevo fatto è che se le assegnavi un valore particolare e la usavi, dovevi dargli un altro nome, per esempio $email_giusta="bla bla".

    Cmq puoi risparmiarti tutto questo e anche una query sostituendo il tuo con questo scriptino:

    Codice PHP:
    <?
    $conn
    = mysql_connect("localhost", "UN", "PW")
    or die(
    "Connessione non riuscita: " . mysql_error());
    mysql_select_db("my_lsdfreetime",$conn);

    $query="UPDATE swgb SET email='' WHERE email='-' ";
    mysql_query($query);
    ?>

    Ciaooooo!!!!!
    Ultima modifica di debug : 16-03-2006 alle ore 19.46.58

  7. #7
    Guest

    Predefinito

    azzo, grazie :D
    sono proprio niubbo :)

Regole di scrittura

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