Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di ispuk
    Registrato dal
    Jan 2009
    Messaggi
    1,026

    problema con Form e refresh pagina

    ciao

    questo è il codice:

    Codice PHP:
    <form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
    [b]Il tuo nome[/b]
    <input type="text" name="mittente">
    [b]La tua e-mail[/b] <input type="text" name="emailmittente">


    <div id="testo">[b]Testo[/b]</div>

    <textarea name="testo" rows="7" cols="70"></textarea>

    <input type="submit" value="Invia"> 
    <input type="reset" value="cancella">


    [b] Email[/b]

    <input type="text" name="indirizzo">

    <input type="submit" name="inserisci" value="Inserisci">

    <input type ="text" name"indirizzo_canc" >

    <input type="submit" name="cancella" value="Cancella email">
    </form>
    [b]Email Destinatari[/b]
     
    <?php
    //Variabili Globali
    $mittente=$_POST['mittente'];
    $emailmittente=$_POST['emailmittente'];
    $indirizzo=$_POST['indirizzo'];
    $testo=$_POST['testo'];
    include(
    "db_connect.php");
    ?>


    <?php

    //Inserimento manuale email da Form
    include("db_connect.php");

    if(isset(
    $inserisci) and  ($indirizzo =""));
    {
    $query_insert mysql_query("INSERT INTO users(email) VALUES ('$indirizzo')") or die(mysql_error());}

    //Estrazione email da MYSQL

    $query_select mysql_query("SELECT email FROM users");
    while(
    $mailmysql_fetch_array($query_select))
    {
    extract($mail);
     echo 
    "
    $email
    "
    ;}
     
     
    //Cancella email dal DB
     
    if(isset($cancella))
    {
    $query_cancellamysql_query("DELETE FROM users WHERE $mail = '$indirizzo_canc'") or die(mysql_error());};

    ?>


    ho questi problemi:
    1- se non scrivo niente e clikko su il pulsante($inserisci) mi inserisce righe vuote nel DB,forse sbaglio qualcoisa nel controllo della variabile?

    2-la $query_cancella non funziona, mi inserisci righe vuote in più e non cancella niente

    aiutoooooo :rollo:

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    intanto se clicchi "inserisci" chiaramente ottieni inserimenti di record con campi vuoti perchè non fai controlli in merito... tu verifichi solo che sia "premuto" quel tasto, non che l'utente abbia compilato gli altri campi...

    ti conviene chiamare tutti i pulsanti con lo stesso nome, per esempio:

    Codice PHP:
    <input type="submit" name="azione" value="Inserisci">
    <
    input type="submit" name="azione" value="Cancella"
    inoltre <input type="submit" value="Invia"> mi pare non serva a nulla

    A questo punto puoi usare
    Codice PHP:
    $azione = ((isset($_POST['azione'])?($_POST['azione']):('')); 
    che sarà inizializzato con il value del tasto usato per l'invio.
    Successivamente puoi fare uno switch su tale variabile per decidere le operazioni:

    Codice PHP:
    $azione strtolower($azione);
    switch (
    $azione) {
      case 
    'inserisci':
        ... 
    procedura inserimento ...
      break;
      case 
    'cancella':
        ... 
    procedura cancellazione ...
      break;  
    }; 
    inoltre nel tuo script ci sono alcuni errori logici che mi pare di notare (non ho fatto un test di esecuzione, comunque):
    - dopo if(isset($inserisci) and ($indirizzo ="")) non ci vuole il ";": in partica questo if ha un corpo vuoto per cui sia che sia verificato o meno non esegue alcuna azione
    - il blocco di inserimento non è condizionato dall'if (per il fatto precedente) e quindi è sempre eseguito (anche se premi "cancella" quindi)

    ricorda infine per capire cosa succede veramente di stampare a video le query prima di eseguirle.

  3. #3
    Utente di HTML.it L'avatar di ispuk
    Registrato dal
    Jan 2009
    Messaggi
    1,026
    ciao,che dire ,grazie mille della risposta

    però ho ancora un problema sul tasto $cancella


    funziona tutto tranne quello ti faccio vedere come sto risolvendo

    Codice PHP:
    <input type="text" name="indirizzo">

    <input type="submit" name="inserisci" value="Inserisci">

    <input type="text" name="indirizzo_canc">

    <input type="submit" name="cancella" value="Cancella email">

    </form>

    ------------------------------------------------------------
    //EMAIL MYSQL
    include("db_connect.php");

    $indirizzo=$_POST['indirizzo'];
    $indirizzo_canc=$_POST['indirizzo_canc'];
    //Pulsanti
    $inserisci=$_POST['inserisci'];
    $cancella=$_POST['cancella'];


    //Inserimento manuale email da Form
    include("db_connect.php");

    if(isset($inserisci) and  ($indirizzo !=""))
    {$query_insert = mysql_query("INSERT INTO users(email) VALUES ('$indirizzo')") or die(mysql_error());}

    //Estrazione email da MYSQL

    $query_select = mysql_query("SELECT email FROM users");
    while($mail= mysql_fetch_array($query_select))
    {extract($mail);
     echo "
    $email
    ";}
    ?>
                                                            
    ----------PARTE CHE NON FUNZIONA--!!!
    <?php
    //Cancella email dal DB
    include("db_connect.php");

    if(isset(
    $cancella) and ($indirizzo_canc !=""))
    {
    $query_cancellamysql_query("DELETE FROM pippo WHERE email = '$indirizzo_canc'") or die(mysql_error());}

    ?>

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    vedo che per l'inserimento fai un doppio controllo, mentre questo non avviene per la cancellazione: in questo caso c'è un errore logico in quanto tu prima assegni il dato postato a una nuova variabile e poi ne verifichi l'esistenza, dovresti invece fare:

    Codice PHP:
    $cancella=((isset($_POST['cancella']))?($_POST['cancella']):('')); 
    e lo stesso per inserisci... poi nel controllo fai:

    Codice PHP:
    if ($cancella!='') { ... 
    idem per inserisci

  5. #5
    Utente di HTML.it L'avatar di ispuk
    Registrato dal
    Jan 2009
    Messaggi
    1,026
    ferrrrrrrrrmi tutti!

    funziona tutto adesso


    unico problema ,che ad ogni refresh della pagina la query di estrazione(query_select) mi si aggiunge a quella del refresh precedente ,

    per intenderci se inserisco una email nel db,poi la query select me la fa vedere subito ,ma al refresh la vedo doppiamente:

    giusto,refresh:

    EMAIL=pippo

    sbagliato,refresh:

    EMAIL=pippo pippo


    spero di essere stato chiaro

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ma funziona perchè? quali cambiamenti hai fatto?

    per la SELECT... dove stampi il risultato? inoltre l'unica SELECT postata è senza WHERE, quindi tira fuori tutti i record... riesci a definire meglio la situazione?

  7. #7
    Utente di HTML.it L'avatar di ispuk
    Registrato dal
    Jan 2009
    Messaggi
    1,026
    ok,scusa ma avrei dovuto magari farti vedere la form da un link per capire meglio ,purtroppo però potrò metetrla on line solo dal pomeriggio,

    In poche parole sto costruendo una form complessa,ancora non molto,per poter inviare email multiple, storate nel db

    oltre alla possibilità di poterle inserire e cancellare dalla form,sotto ,in un div ,appaiono le stampe dal db di TUTTE le email inserite ,quindi se ne cancello una lo script mi stampa TUTTE le email inserite tranne ovviamente quella che ho cancellato


    il problema è che però la query di stampa(query_select) viene eseguita ogni volta che aggiorno la pagina,quindi se ho inserito "pippo" ,al momento dell'inserimento nel div mi appare "pippo",ma se aggiorno la pagina mi appare "pippo pippo"


    capito in che senso?


  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    forse sto capendo... un problema di cache-refresh del browser... cioè tu hai uno script che effettua un'azione su DB... se fai refresh l'azione viene ripetuta... questo si può ovviare in vari modi.

    Solitamente si crea uno script "intermedio", cioè avresti questa situazione:

    script con il form (es. form.php)
    script di esecuzione azioni sul db (es. db.php)

    form.php richiama db.php che fa le operazioni desiderate e poi reindirizza l'utente su una pagina di servizio (anche la stessa form.php): se a questo punto esegui un refresh questo ricarica la pagina attuale (form.php) e non quella delle azioni sul db evitando "doppie azioni".

  9. #9
    Utente di HTML.it L'avatar di ispuk
    Registrato dal
    Jan 2009
    Messaggi
    1,026
    si ,avevo pensato anche ad una cosa cosi fatta

    ma mi viene più semplice usare una sola pagina a cui magari si accede tramite una pagina di amministratore,era per non creare troppe pagine.

    e comunque riguardando anche nel db noto che non è la select ma è l'insert che ogni volta che aggiorno mi re-inserisce il dato che ho postato prima,questo però solo quando aggiorno la pagina,se invece clikko su inserisci con il campo indirizzo vuoto non mi inserisce niente(giustamente)

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    sì... però può essere un problema anche seccante... chiaramente se tu inerisci un dato completo la pagina viene richiamata con tutti i parametri... quando fai REFRESH la pagina è richiamata con gli stessi parametri e l'inserimento in questo caso è effettuato nuovamente... puoi anche provare a gestire i meta tag HTML, ma per esperienza posso dirti che l'uso di file differenti come suggerivo è la soluzione più adatta... potresti anche usare altri stratagemmi:

    - verificare che un dato non sia già presente nel db (se non possono esserci "duplicati")
    - memorizzare in un'area apposita un log delle azioni (tipo id sessione dell'utente/mail inserita) e impedire un doppio inserimento
    - usare le sessioni

    tutte cose però secondo me più complicate... usare un semplice script aggiuntivo mi pare più lineare come soluzione. Sempre che ti serva risolvere questo "problema".

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.