Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [phpfree] Generare forum con ciclo for

    Salve a tutti, sono un neofita sia nella programmazione che in PHP;
    il problema é questo:
    in questo script dovrebbero essere generati, tramite un ciclo for, un numero di form ($numf) postato da una precedente pagina di codice.
    La precedente pagina di codice contiene solo un form in cui viene indicato il numero di elementi da aggiungere a una tabella mysql.

    Il problema é che, qualora io esegua lo script della precedente pagina per inviare il numero di elementi (e quindi di form) da generare,e ancora prima che io inserisca i dati ($nom,$cognom) nel form(che poi non verranno registrati), nella tabella mysql vengono inserite tante righe quante indicate ma con valore nullo per ogni campo.

    Qualcuno di voi avrebbe idea del perché e di come si possa rimediare a questo problema?
    Grazie in anticipo...!!

    Codice PHP:
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>&Auml;ndern</title>
    </head>
    <body>



    </p>

      <?php
    mysql_connect
    ("localhost""root") or die(mysql_error()); 
    mysql_select_db("progetto") or die(mysql_error());
    $numf $_POST['a'];
    if (
    $numf 0) {
    for (
    $x=1$x<=$numf$x++)
    {
    ?>
    <form method="post" action= '<?php echo $PHP_SELF?>'>
    <h3>Aggiungi: </h3>

    </p>


    Nome e cognome    
      <input type= "text" name="nome<?php echo $x;?>" value = "" >
      <input type= "text" name="cognome<?php echo $x;?>" value = "" >
    </p>
     <input name="submit1" type="submit" value="Aggiungi">
    </p>
    </form>


    <?php
    if ($_POST['Aggiungi']) {
    $nom $_POST['nome'.$x];
    $cognom $_POST['cognome'.$x];
    $insert "INSERT INTO base (Nome, Cognome)
        VALUES ('"
    .$nom."','".$cognom."')";
        
    $add_member mysql_query($insert) or die (mysql_error());
    if (
    $add_member) {
    echo 
    "Articolo Inserito<hr>" ;
    } else { echo 
    "Fehler: kein Insert"; }
    }
    else { echo 
    "Fehler: kein Submit"; }
    }}

    ?>
    </body>
    </html>

  2. #2
    Credo che l'errore stia nel fatto che la condizione
    Codice PHP:
    if ($_POST['Aggiungi']) 
    sia sempre verificata. Quindi lo script esegue il relativo codice ma, non essendo ancora stati inseriti i valori, crea dei record vuoti.
    Però non riesco a capire da dove salti fuori quel "$_POST['Aggiungi']"...
    Se il tuo intento è quello di verificare se l'utente ha premuto il pulsante submit dovresti scrivere:
    Codice PHP:
    if ($_POST['submit1'] == "Aggiungi") { ...tuo codice... } 
    Spero di esser stato utile ^^

  3. #3
    Innanzitutto grazie per la risposta.

    Esatto, volevo proprio fare in modo di far verificare al codice se l´utente avesse giá inserito o meno i dati nel form.

    Ho provato ora ad apportare le modifiche, purtroppo pero´ non é cambiato molto, passando dalla pagina iniziale, quella con il numero di form da inserire, a quella che vi ho postato, mi compare subito dopo ogni form vuoto per l´inserimento dei dati, giá il messaggio

    Codice PHP:
    { echo "Fehler: kein Submit"; } 
    ,il che significa che la mia condizione

    Codice PHP:
    if ($_POST['submit1'] == "Aggiungi"
    viene in qualche modo saltata. E compaiono tante righe vuote quanti form...

  4. #4
    MMh... possibilissimo... io personalmente non ho mai verificato il valore di un submit
    Io farei in questo modo:
    Codice PHP:
    if ($_POST['nome'.$x] != "") { ...tuo codice... } 
    In questo modo verifichi che se, al momento del caricamento della pagina, la variabile $_POST['nome'.$x] è diversa dalla stringa vuota (quindi controlli se è stato inserito un valore).
    Se invece sei proprio deciso a controllare il valore del submit non saprei xD
    PS il codice sopra lo ho provato più volte quindi, se anche così non funziona, vuol dire che c'è un altro errore ^^
    Ad ogni modo, usando questo metodo (ma anche quello che volevi usare te), la prima volta che viene caricata la pagina comparirà, sotto al form di inserimento dati, il messaggio:
    "Fehler: kein Insert". Questo perché quando carichi la pagina per la prima volta la condizione
    if ($_POST[etc] != "")
    risulta false e quindi viene eseguito il codice relativo al blocco else e cioè:
    Codice PHP:
    ...

    else { echo 
    "Fehler: kein Submit"; } 
    }} 
    ?> 
    Ti consiglio di eliminare quel pezzo. Il codice si presenterebbe quindi così:
    Codice PHP:
    <?php 
    if ($_POST['Aggiungi']) { 
    $nom $_POST['nome'.$x]; 
    $cognom $_POST['cognome'.$x]; 
    $insert "INSERT INTO base (Nome, Cognome) 
        VALUES ('"
    .$nom."','".$cognom."')"
        
    $add_member mysql_query($insert) or die (mysql_error()); 
    if (
    $add_member) { 
    echo 
    "Articolo Inserito<hr>" 
    } else { echo 
    "Fehler: kein Insert"; } 
    }}
    In questo modo compare l'errore solo quando l'operazione di inserimento del record nella tabella non ha avuto successo.

  5. #5
    Nono assolutamente, a me non cambia nulla per il POST del submit o il POST del nome: l unica cosa che importa e´che registri i dati con i form...

    Provando ad eliminare l´else, e poi formulando l´ if per il $_POST['nome'.$x] != "" ,
    non sono putroppo ancora riuscito a registrare i dati nella tabella del Database.

    Anche se compilo il Form ed invio i dati infatti, non mi compare nulla nella tabella "base"

    Hai altre idee percaso??

  6. #6
    Ok... ultima idea che mi viene in mente:
    La prima volta che si apre la pagina viene posta la variabile $numf = a $_POST['a']. Quindi lo script funziona correttamente. Dopo aver inviato i valori però, la pagina viene ricaricata e questa volta la variabile $_POST['a'] non ha valora, quindi la condizione
    Codice PHP:
    if ($numf 0
    risulta false e il relativo blocco di codice non viene eseguito.
    Ecco come correggerei il codice:
    Codice PHP:
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <title>&Auml;ndern</title> 
    </head> 
    <body> 


     
    </p>
     
      <?php 
    mysql_connect
    ("localhost""root") or die(mysql_error()); 
    mysql_select_db("progetto") or die(mysql_error()); 
    $numf $_POST['a']; 
    if (
    $numf 0

        echo 
    "<form method=\"post\" action= '<?php echo $PHP_SELF; ?>'>";
        
    //il ciclo for crea nella pagine tutti i form che sono stati selezionati. Vengono anche
            //aggiunti in singolo pulsante si submit 
        //e un valore di tipo hidden che serve per inviare alla nuova pagina il valore si $numf
        
    for ($x=1$x<=$numf$x++) 
        { 
        
    ?>
        <h3>Aggiungi: </h3> 
        
        </p> 
        

    Nome e cognome     
        <input type= "text" name="nome<?php echo $x;?>" value = "" > 
        <input type= "text" name="cognome<?php echo $x;?>" value = "" > 
        </p>
        
     
        <?php
        
    }
        echo 
    "<input type=\"hidden\" name=\"a\" value=\"$_numf\">";
        echo 
    "
    <input name=\"submit1\" type=\"submit\" value=\"Aggiungi\">"
    ;
        echo 
    "</form>";
    }
    //controllo se è stato compilato il primo form. In caso affermativo si procede all'inserimento 
    //dei record nella tabella
    if (($_POST['nome1'] != "") && ($_POST['cognome1'] != "")

        
    //questa veriabile serve a controllare quanti record sono stati inseriti con successo
        
    $_checked 0;
        
    //Questa volta $numf è definita poichè il valore $_POST['a'] è stato inviato 
            //nuovamente 
        
    for ($x=1$x<=$numf$x++)
        {
            
    //controlla di volta in volta che il form corrispondente all'attuale valore $x sia 
                    //stato compilato e, in caso
            //affermativo inserisce il record nella tabella
            
    if (($_POST['nome'.$x] != "") && ($_POST['cognome'.$x] != ""))
            {
                
    $nom $_POST['nome'.$x]; 
                
    $cognom $_POST['cognome'.$x]; 
                
    $insert "INSERT INTO base (Nome, Cognome) 
                    VALUES ('"
    .$nom."','".$cognom."')"
                    
    $add_member mysql_query($insert) or die (mysql_error()); 
                if (
    $add_member
                { 
                    
    //se il record è stato inserito con successo incrementa di uno il 
                                    //valore di $_checked
                    
    $_checked++ ; 
                } 
            }
        }
        
    //se $_checked è uguale a $numfvuol dire che tutti i valori sono stati inseriti con 
            //successo
        
    if ($numf == $_checked)
        {
            echo 
    "Tutti gli articoli sono stati inseriti correttamente";
        }
        
    //se $_checked diverso da 0 vuol dire che almeno un valore è stato inserito con 
            //successo.
        
    elseif ($_checked != 0)
        {
            echo 
    "Sono stati inseriti $_checked articoli su $numf";
        }
        
    //altrimenti visualizza un errore
        
    else
        {
            echo 
    "Fehler: kein Submit";
        }
    }
    ?> 
    </body> 
    </html>
    Faccio presente che spesso commetto qualche errore di distrazione :master: . Quindi se qualcosa non funziona controlla che parentesi e punti e virgola siano tutti al posto giusto xD

    PS Spero si capisca qualcosa nel codice... non sono un asso nel commentare

  7. #7
    Allora, innanzitutto sei un grande e ti ringrazio per il tempo dedicatomi!!!!!
    In realtá manca davvero poco!!!
    perché:

    se eseguivo il programma non scriveva nel db, ma mi compariva "Tutti gli articoli sono stati inseriti correttamente", e provando a scrivere la variabile $_numf lí affianco, mi compariva vuota.
    Allora ho provato a ridichiarare $_numf con il numero di form che mi sarebbero serviti, cosí:

    Codice PHP:
     //questa veriabile serve a controllare quanti record sono stati inseriti con successo 
        
    $_checked 0
        
    $_numf 2// il numero di form che volevo avere 
    E cosí funzia!!!!!!!!!!!!! Mi sembrava infatti giusto che dovesse, perché in effetti il tuo codice mi sembrava formalmente corretto e dettagliato per le varie situazioni

    Ora l unico piccolo problema rimane, quello di far dipendere la variabile $_numf dal $_POST['a'] iniziale: probabilmente cambiata dall´hidden, non contiene piú il valore precedente.

    Ho provato a dichiarare un´altra variabile iniziale dal valore $_numd = $_POST['a'],
    per sostituirla nel secondo ciclo, ma non ho ottenuto nessun risultato....

  8. #8


    Te lo avevo detto che facevo errori di distrazione ^^
    Se guardi quando scrivo
    Codice PHP:
    echo "<input type=\"hidden\" name=\"a\" value=\"$_numf\">"
    L'errore è li...
    infatti io come valore ho messo la variabile $_numf. Ma la tua variabile è $numf (senza il trattino basso xD)

  9. #9
    .....Ed infatti !!!!!!!

    Sei stato davvero gentilissimo,

    tutto risolto e il programma funziona a meraviglia.

    Ti auguro allora un grande anno, e a presto!!!!!!

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.