Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454

    [PHP Mysql] Backup selettivo fatto da me

    Salve a tutti!!!

    Vengo subito al sodo VVoVe:

    Ho provato a fare una pagina che va a leggere le tabelle del database, prende solo quelle che cominciano per "for" (che sarebbero poi vari forum) e dovrebbe poi creare il dumb per l'inserimento dei dati esistenti. Un backup delle tabelle. Ma del tutto dinamico così se si aggiunge una tabella forum non si deve fare altro.

    Diciamo che sono riuscito nel mio intento, a metà.. o qualcosina di più.

    In ratica l'errore è questo, anche se mi cambia il nome della tabella e prende i nomi giusti delle colonne, va a prendere cmq sempre i dati della stessa tabella (e vi assicuro che i dati delle varie tabelle sono diversi tra loro ).

    Mi sono scervellato e non ci arrivo proprio al problema. Magari qualcun'altro lo vede subito

    Potete dare un'occhiata al codice?

    Eccolo:
    Codice PHP:
    <?
    include_once('includes/config.inc.php');
    ///////////prendiamo tutte le tabelle e teniamo quelle dei forum///////////////
    $tbls mysql_list_tables($dbname);
    $num_rows mysql_num_rows($tbls);
    $arrtbl=array();
    for (
    $i 0$i $num_rows$i++){
    $tblname=mysql_tablename($tbls$i);
    //visualizziamo i nomi e creiamo array con nomi delle tabelle forum
    if(substr($tblname,0,3)=="for"){
    echo 
    "Tabella: ".$tblname."
    "
    ;
    $arrtbl[]=$tblname;
    }
    }
    mysql_free_result($tbls);

    //////////////inizio lavoro per ogni tabella!!!!!!///////////////////////

    $tottext="";

    for(
    $z=0;$z<=count($arrtbl)-1;$z++){
    $tblatt=$arrtbl[$z];
    $sqlfields="";
    //estrapoliamo i nomi delle colonne della tabella
    $docols mysql_query("SHOW COLUMNS FROM ".$tblatt);

    $arrcols=array();
    if (
    mysql_num_rows($docols) > 0) {
    //mettiamo tutte le collone in un array
       
    while ($row=mysql_fetch_assoc($docols)) {
          
    $arrcols[]=$row;
       }
    }
    //fine if
    mysql_free_result($docols);
    //mettiamo tutti i campi in una variabile che metteremo poi nella query
    for($t=0;$t<=count($arrcols)-1;$t++){
    $sqlfields.=$arrcols[$t]['Field'];
    if(
    $t!=count($arrcols)-1){//mettiamo la virgola tranne se è l'ultimo
    $sqlfields.=",";
    }
    }
    //fine secondo for


    ///////prendiamo i dati dalla tabella attuale
    $sqldati="SELECT * FROM ".$tblatt;
    $dodati=mysql_query($sqldati,$conn);

    //dobbiamo mettere tutte le righe in un array, come facciamo?
    while ($datu mysql_fetch_row($dodati)) {
    $arrvals[]=$datu;
    }
    mysql_free_result($dodati);
    $vals="";
    $testovals="";

    for(
    $g=0;$g<=count($arrvals)-1;$g++){//per ogni riga trovata
    $testovals="(";//apro parentesi che va dopo VALUES 

    for($s=0;$s<=count($arrcols)-1;$s++){//per ogni campo
    $testovals.="'".$arrvals[$g][$s]."',";
    }

    $testovals=substr($testovals,0,-1)."),";//chiudo ) e metto , per la prossima riga
    $vals.=$testovals;//riga completa
    $testovals="";
    }



    //creiamo il testo che va all'inizio con l'insert ecc
    $testofile="#\n#Dumb della tabella ".$tblatt."\n#\nINSERT INTO ".$tblatt." (".$sqlfields.") VALUES ";
    //tolgo l'ultima virgola
    $tottext.=htmlentities($testofile.substr($vals,0,-1)).";\n\n\n";

    }
    //fine primo for

    echo $tottext;
    ?>
    Grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    UP

  3. #3
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Proprio nessuno ci capisce??

  4. #4
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Ok, ieri sera mi sa chero un po' fuso, il problema c'è ma è leggermente diverso.

    Non è che prende sempre i dati della prima tabella, prende i dati della prima e ci aggiunge quelli della seconda, nella terza prende i primi, i secondi e ci aggiunge i terzi dati... va a concatenare il testo dopo ogni ciclo in pratica:

    codice:
    Query creata1:
    INSERT INTO... VALUES (dai prima tabella)
    
    Query creata2:
    INSERT INTO... VALUES (dai prima tabella),(dati seconda tabella)
    
    Query creata3:
    INSERT INTO... VALUES (dai prima tabella),(dati seconda tabella),(dati terza tabella)
    Capito il problema?

    dato che è in un array ecc ho provato a resettare tutte le variabili alla fine di ogni ciclo, ma il problema rimane. Vi riposto il codice con il reset delle varie variabili... aiutatemiiiiii
    Codice PHP:
    include_once('includes/config.inc.php');
    ///////////prendiamo tutte le tabelle e teniamo quelle dei forum///////////////
    $tbls mysql_list_tables($dbname);
    $num_rows mysql_num_rows($tbls);
    $arrtbl=array();
    for (
    $i 0$i $num_rows$i++){
    $tblname=mysql_tablename($tbls$i);
    //visualizziamo i nomi e creiamo array con nomi delle tabelle forum
    if(substr($tblname,0,3)=="for"){
    echo 
    "Tabella: ".$tblname."
    "
    ;
    $arrtbl[]=$tblname;
    }
    }
    mysql_free_result($tbls);

    //////////////inizio lavoro per ogni tabella!!!!!!///////////////////////

    $tottext="";

    for(
    $z=0;$z<=count($arrtbl)-1;$z++){
    $tblatt=$arrtbl[$z];
    $sqlfields="";
    //estrapoliamo i nomi delle colonne della tabella
    $docols mysql_query("SHOW COLUMNS FROM ".$tblatt);

    $arrcols=array();
    if (
    mysql_num_rows($docols) > 0) {
    //mettiamo tutte le collone in un array
       
    while ($row=mysql_fetch_assoc($docols)) {
          
    $arrcols[]=$row;
       }
    }
    //fine if
    mysql_free_result($docols);
    //mettiamo tutti i campi in una variabile che metteremo poi nella query
    for($t=0;$t<=count($arrcols)-1;$t++){
    $sqlfields.=$arrcols[$t]['Field'];
    if(
    $t!=count($arrcols)-1){//mettiamo la virgola tranne se è l'ultimo
    $sqlfields.=",";
    }
    }
    //fine secondo for


    ///////prendiamo i dati dalla tabella attuale
    $sqldati="SELECT * FROM ".$tblatt;
    $dodati=mysql_query($sqldati,$conn);

    //dobbiamo mettere tutte le righe in un array, come facciamo?
    while ($datu mysql_fetch_row($dodati)) {
    $arrvals[]=$datu;
    }
    mysql_free_result($dodati);
    $vals="";
    $testovals="";

    for(
    $g=0;$g<=count($arrvals)-1;$g++){//per ogni riga trovata
    $testovals="(";//apro parentesi che va dopo VALUES 

    for($s=0;$s<=count($arrcols)-1;$s++){//per ogni campo
    $testovals.="'".$arrvals[$g][$s]."',";
    }

    $testovals=substr($testovals,0,-1)."),";//chiudo ) e metto , per la prossima riga
    $vals.=$testovals;//riga completa
    $testovals="";
    }



    //creiamo il testo che va all'inizio con l'insert ecc
    $testofile="#\n#Dumb della tabella ".$tblatt."\n#\nINSERT INTO ".$tblatt." (".$sqlfields.") VALUES ";
    //tolgo l'ultima virgola
    $tottext.=htmlentities($testofile.substr($vals,0,-1)).";\n\n\n


    "
    ;
    $vals="";
    reset($arrvals);
    }
    //fine primo for

    echo $tottext

  5. #5
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454

  6. #6
    se ti può essere d'aiuto dai un occhio al sorgente della mia classe ^^

    www.phpsoft.it/downloads.php

    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Ora la guardo, grazie daniè

  8. #8
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Ooooooooook ce l'ho fattaaaa

    Mancava un
    Codice PHP:
    $arrcols=array(); 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.