Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: Query per una textarea

  1. #1
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854

    Query per una textarea

    Salve ragazzi...non so come realizzare una query così strutturata:
    1. ho un form con una textarea;
    2. all'interno di questa metto delle parole, una per ogni riga
    3. devo far in modo da leggere ciascuna riga e confrontarla con una tabella del db per verificare se già esiste o meno...
    Come fare?

    Supponiamo che faccio la query che legge tutti i campi presente nella tabella desiderata,
    facci un mysql_fech_array, metto un while e scansione elemento per elemento...

    Ma come faccio a leggere i campi della textarea riga per riga e a far il confronto?

    Grazie!

  2. #2
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    Ragazzi nessun aiutino?
    Secondo voi e' fattibile o no?

    Grazie!

  3. #3
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    non è chiaro quello che ti serve..
    3. devo far in modo da leggere ciascuna riga e confrontarla con una tabella del db per verificare se già esiste o meno...
    che significa?

  4. #4
    non è complicato

    prendi il valore che ti arriva dall'array $_POST, lo scomponi usando explode("\n", $_POST['textarea']) e poi cicli il tutto in un foreach o in un while

    codice:
    foreach($row in explode("\n", $_POST['textarea']))
    {
      $row = trim($row);
      
      // fai la query, verifichi l'esistenza, e decidi che fare
    }
    o, MOLTO meglio, ti crei un elenco di confronti da fare e lo fai in una sola botta! E' una soluzione leggermente più pesante, anche se in modo praticamente impercettibile, per una o due righe, ma se si hanno più righe si risparmiano parecchie query


    codice:
    $elenco = array()
    foreach($row in explode("\n", $_POST['textarea']))
    {
      $value = trim($row);
      $elenco[$value] = '\'' . $value . '\'';
    }
    
    $query = mysql_query("SELECT ..... FROM .... WHERE campo IN (" . implode(', ', $elenco) . ")");
    while($row = mysql_fetch_assoc($query))
    {
      // Verifica se la riga esiste
      if (isset($elenco[$row['campo']]) === true)
      {
        //
        // QUI: FAI LE OPERAZIONI CHE TI SERVONO SE LA RIGA ESISTE GIA' NEL DATABASE
        //
        
        // Elimino la riga appena acquisita
        unset($elenco[$row['campo']])
      }
    }
    
    // Liberi la memoria
    mysql_free_result($query);
    
    // Cicli le righe che non esistono
    foreach($row in $elenco)
    {
        //
        // QUI: FAI QUELLO CHE TI SERVE SE LA RIGA NON ESISTE!
        //
    }
    
    // Cicli l'elenco di campi che non hanno corrispondenze
    unset($elenco);
    cosi fai quello che devi fare

    Se ad esempio devi inserire le righe che non esistono nel database puoi usare un'unica insert con più valori e per prendere poi i relativi ID puoi estrarre le righe con quei campi come fatto prima

    quindi, con 1 query fai l'estrazione e sai quali sono presenti, con i relativi id, e quali non esistono mentre poi con altre 2 query fai l'eventuale inserimento in blocco, se ti serve, ed estrai i campi che ti servono.

    Se devi fare più di una query per volta (com'è probabile che sia), diciamo da 2 a salire, ti conviene quest'ultimo metodo e, in generale, se devi inserire le righe che non esistono e prendere l'id ti conviene anche questo metodo perché anche se è più complesso è anche più performante per inserire più di un termine per volta nel database

    Succo del discorso: se prevedi che difficilmente questa parte del tuo software sarà usata o che sarà usata poco puoi usare il sistema semplice, altrimenti ti conviene utilizzare questo sistema più evoluto, anche se più complesso

  5. #5
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    Ho fatto il seguente codice:

    Codice PHP:
    $elenco = array();
    $row=explode("\n"$_POST['textarea']);
       
        foreach(
    $row as $ciccio){
            
    $value trim($ciccio);   
            
    $elenco[$value] = '' $value '';

    Ma come faccio a scorrere il contenuto di $elenco?

  6. #6
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    Ragazzi..diciamo che ho quasi risolto, ma qualcosina ancora non va:
    se inserisco come prima voce un campo che e' già presente nel database mi dice che c'è ed è ok!
    Ma se inserisco 2 voci già presenti nel database, per la prima mi dice che c'è, mentre la seconda non riesce a trovarla?!?!

    Praticamente la query la faccio direttamente con il campo che ho inserito nella textarea,
    vi posto il codice:

    Codice PHP:
    $elenco = array();
    $array=explode(chr(13),$_POST['textarea']);

    foreach(
    $array as $row['campo'] ) {

    $campo=$row['campo'];
    echo 
    "- ".$campo."
    "
    ;
        
    $querymysql_query("SELECT email FROM email WHERE email='$campo' ");
            
    $email=mysql_fetch_array($query);
                if(
    $email[0]!=""){
                } else {
                    echo 
    $row['campo']." non c'è;
    "
    ;
                }
                
    unset(
    $campo);
    unset(
    $query);
    unset(
    $email);

    Grazie!

  7. #7
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    Ho capito ove sta il problema ma non so come risolverlo:

    $array=explode(chr(13),$_POST['textarea']);
    nel chr(13), stesso problema se metto "
    " oppure "\n".

    ed inserisco i campi nella textarea come:
    nome1
    nome2
    nome3

    se invece metto:
    $array=explode(";",$_POST['textarea']);
    ed inserisco nella textarea:
    nome1;nome2;nome3;
    funzia il tutto correttamente...

    come risolvere?

  8. #8
    pardon, scusa per il codice ... mi sono accorto solamente ora che nel foreach ho fatto un mix di php e C#

    come te ne sarai accorto da solo, al posto di in scrivi as

    la riga
    $array=explode(chr(13),$_POST['textarea']);

    trasformala in
    $array=explode("\r\n", $_POST['textarea']);

  9. #9
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Originariamente inviato da daniele_dll
    pardon, scusa per il codice ... mi sono accorto solamente ora che nel foreach ho fatto un mix di php e C#

    come te ne sarai accorto da solo, al posto di in scrivi as

    la riga
    $array=explode(chr(13),$_POST['textarea']);

    trasformala in
    $array=explode("\r\n", $_POST['textarea']);
    Stavo per dirlo anche io però mi chiedo ancora una cosa, quel costrutto è valido solo su Windows, *nix usa solo \n e i vecchi Mac \r funziona lo stesso?
    Forse sì perché probabilmente gli basta trovare anche uno solo dei due caratteri oppure no perché cerca la stringa completa?

    Altra cosa: spero vivamente che tu non faccia una cosa del genere vero?
    Codice PHP:
    $array=explode(chr(13),$_POST['textarea']) 
    ma fai prima un controllo di quanto inserito, sarò banale e petulante ma se il PHP fosse un pelino più sicuro avremmo oggi forse meno rotture di ...

  10. #10
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    Ragazzi, ho risolto.

    Posto l'intero codice magari possa servire a qualcuno.

    Codice PHP:
    $elenco = array();
    $array=explode("\r\n",$_POST['textarea']);

    $count=0;

    foreach(
    $array as $row['campo'] ) {

    $campo=$row['campo'];
        
    $querymysql_query("SELECT email FROM email WHERE email='$campo' ");
            
    $email=mysql_fetch_array($query);
            
    //echo $email[0]."+++++++++++++
    ";
                if(
    $email[0]!=""){
                } else {
                    echo 
    $row['campo']."";
                    
    $a=mysql_query("INSERT INTO email (emailVALUES(\"$campo\")") or die (mysql_error());
                    
    $count=$count+1;
                }        
    unset(
    $campo);
    unset(
    $query);
    unset(
    $email);


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.