Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Problema con la cancellazione di una riga in un database
Forum - PHP - Problema con la cancellazione di una riga in un database

Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 14:00
Martedì, 01/06/2010
stavo facendo esperimenti con la creazione di una semplice rubrica. ecco tutto il sorgente:

FILE lawl.php
Codice sorgente - presumibilmente PHP

  1. <html>
  2. <body>
  3.  
  4. <form action="lawl.php" method="post">
  5.  
  6. Nome: <input type="text" name="nome" />
  7. <br>Cognome: <input type="text" name="cognome" />
  8. <br>Numero di tel: <input type="text" name="tel" />
  9. <input type="submit" value="Salva" />
  10. </form>
  11.  
  12. </body>
  13. </html>
  14.  
  15.  
  16.  
  17. <?php
  18.  
  19. include "stampa.php";
  20. include "connetti_db.php";
  21.  
  22. loggadb(NULL);
  23.  
  24. //elimina
  25.  
  26. $elimina=$_GET['canc'];
  27. if($elimina)
  28. {
  29. $DBdrop='DELETE FROM mio_database.rubrica WHERE rubrica.ID_RUB='.$elimina;
  30. $uhm=mysql_query($DBdrop);
  31. }
  32.  
  33.  
  34.  
  35. //fine elimina
  36.  
  37.  
  38.  
  39.  
  40. if($_POST["nome"]==NULL||$_POST["cognome"]==NULL||$_POST["tel"]==NULL)
  41.    {
  42.    echo("Tutti i campi sono obbligatori");
  43.    stampa();
  44.    loggadb("chiudi");
  45.    die();
  46.    }
  47. $nome=$_POST["nome"];
  48. $cognome=$_POST["cognome"];
  49. $tel=$_POST["tel"];
  50.  
  51.  
  52.  
  53. //lista query
  54. $DB_crea=  "
  55.                                 CREATE TABLE IF NOT EXISTS Rubrica
  56.                   (
  57.                                     ID_RUB int(10) AUTO_INCREMENT,
  58.                    nome char(50),
  59.                    cognome char(50) ,
  60.                    numero int(15),
  61.                                         PRIMARY KEY(ID_RUB)
  62.                   )
  63.                         ";
  64.  
  65.  
  66. $DB_aggiungi="
  67.                         INSERT INTO mio_database.rubrica (
  68.                         ID_RUB ,
  69.                         nome ,
  70.                         cognome ,
  71.                         numero
  72.                         )
  73. VALUES (
  74. NULL , '".$nome."','".$cognome."','".$tel."'
  75.                         )";
  76.                          
  77.                        
  78.                        
  79.  
  80.  
  81.  
  82. // creo una rubrica.
  83. $uhm=mysql_query($DB_crea);
  84.                                
  85.  
  86. $uhm=mysql_query($DB_aggiungi);
  87.  
  88.  
  89. stampa();
  90.  
  91. loggadb("chiudi");
  92.  
  93.  
  94. ?>



FILE connetti_db.php
Codice sorgente - presumibilmente Php

  1. <?php
  2.  
  3. function loggadb($azione)
  4. {
  5.  
  6.  
  7. //dati del database
  8. $host="localhost";
  9. $username="root";
  10. $password="";
  11. $nome_db="mio_database";
  12.  
  13. $link = mysql_connect($host,$username,$password)
  14.     or die('Impossibile connettersi al database!: ' . msql_error($link));
  15.  
  16. mysql_select_db($nome_db, $link)
  17.     or die('Database Non Trovato!');
  18.        
  19.  
  20.         if($azione=="chiudi")  
  21.         mysql_close($link);
  22.        
  23.         }
  24.        
  25. ?>



FILE stampa.php

Codice sorgente - presumibilmente Python

  1. <?php
  2.  
  3. //stampa!
  4.  
  5. function stampa()
  6. {
  7. $DBnome=mysql_query('SELECT nome FROM mio_database.rubrica');
  8. $DBcognome=mysql_query('SELECT cognome FROM mio_database.rubrica');
  9. $DBtel=mysql_query('SELECT numero FROM mio_database.rubrica');
  10. $DBid=mysql_query('SELECT ID_RUB FROM mio_database.rubrica');
  11.  
  12. $i=0;
  13.  
  14.  
  15. if(!mysql_num_rows($DBnome))
  16.  die();
  17.  
  18. echo('<table border="3">');
  19. echo('<tr> <td> NOME </td> <td>COGNOME</td> <td>TELEFONO</td> <td>ELIMINA</td> </tr>');
  20. while($i<mysql_num_rows($DBnome))
  21. {
  22. echo ('<tr> <td>');
  23. echo (mysql_result($DBnome, $i).$i);
  24. echo ('</td> <td>');
  25. echo (mysql_result($DBcognome, $i).$i);
  26. echo ('</td> <td>');
  27. echo (mysql_result($DBtel, $i).$i);
  28. echo ('</td> <td>');
  29. echo ('<a href="lawl.php?canc='.mysql_result($DBid, $i).'"><center>x'.$i.'</center></a>');
  30. echo ('</td> </tr>');
  31. $i++;
  32. }
  33. echo('</table>');
  34. }
  35. ?>




finchè inserisco campi tutto va bene, dal momento in cui cancello un campo succede il finimondo:
cancello i campi e va tutto bene finchè non ne inserisco uno nuovo!
dal momento che inserisco un nuovo campo si crea una confusione con la chiave primaria che crea problemi quando vado a cancellare un ulteriore campo, ad esempio voglio eliminare il 1° e invece mi elimina il 3°.
se avete tempo di provarlo 5 secondi capirete che è + facile capire il problema che spiegarlo. chi mi dice dove sbaglio?
grazie in anticipo :)

Ultima modifica effettuata da NickoMaiden il 01/06/2010 alle 15:23
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:05
Martedì, 01/06/2010
sinceramente non riesco a trovare il problema pur avendo letto il sergente ben 3 volte.
ma posso dirti che vedo abbastanza chiasso nel codice.

ti direi semplicemente di provare a riscriverlo.

prova a rifarlo magari omettendo l'html e testando prima di tutto le query
cercando di capire dove sia il problema.

dalla forma delle query mi sembra di vedere l'output generato da phpmyadmin e non una query fatta manualmente.

personalmente farei connettere il database in anticipo prima che entri nella pagina
all'inizio della pagina in modo che rimanga sempre connesso per tutta la sessione.

Codice sorgente - presumibilmente Plain Text

  1. $host = 'localhost';
  2. $db = '';
  3. $user = '';
  4. $pass = '';
  5.  
  6. $connect = mysql_connect($host,$user,$pass);
  7. mysql_select_db($db,$connect);



prova ad usare una forma semplice di query

Codice sorgente - presumibilmente Plain Text

  1. mysql_query("INSERT INTO Rubrica (nome,cognome,numero) VALUES ('$nome','$cognome','$numero'");



almeno prova con una semplice query e controlla se tutto funziona bene.

magari semplifica un pò anche la query di stampa anziché usare quel metodo prova questo

Codice sorgente - presumibilmente PHP

  1. $sql = mysql_query("SELECT * FROM Rubrica");
  2.  
  3. echo "<table border='3'>";
  4. echo "<tr><td> NOME </td><td>COGNOME</td><td>TELEFONO</td><td>ELIMINA</td></tr>";
  5. while($row = mysql_fetch_array($sql)) {
  6.  
  7. echo "<tr><td>"; echo "$row[nome]";
  8. echo "<tr><td>"; echo "$row[cognome]";
  9. echo "<tr><td>"; echo "$row[telefono]";
  10. echo "<tr><td>";
  11. echo "$row[telefono]";
  12. echo "<a href='lawl.php?canc=$id'>Elimina</a>";
  13.  
  14. }
  15. }



prova a riscrivere tutto,
questo e un mio consiglio :)


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 15:35
Martedì, 01/06/2010
bhe si il codice è incasinato soprattutto perchè è la prima cosa che ho tentato di realizzare in php.
ora mi metto a riscriverlo comunque usando le indicazioni che mi hai dato.
le query le ho generate con phpmyadmin ma non perchè non conosco l'sql, ma per evitare di commettere errori.
non ho capito tanto bene la stampa che hai fatto tu:

Codice sorgente - presumibilmente PHP

  1. $sql = mysql_query("SELECT * from Rubrica");  
  2.  
  3. echo "<table border='3'>";
  4. echo "<tr><td> NOME </td><td>COGNOME</td><td>TELEFONO</td><td>ELIMINA</td></tr>";
  5.  
  6. // fin qui ci siamo
  7.  
  8. while($row = mysql_fetch_array($sql)) { // mi spieghi esattamente che fa qui che non riesco a capire? cioè non ci dovrebbe essere un indice per passare da riga a riga?
  9.  
  10. echo "<tr><td>"; echo "$row[nome]";
  11. echo "<tr><td>"; echo "$row[cognome]";
  12. echo "<tr><td>"; echo "$row[telefono]";
  13. echo "<tr><td>";
  14. echo "$row[telefono]";
  15. echo "<a href='lawl.php?canc=$id'>Elimina</a>";
  16.  
  17. }
  18. }


Ultima modifica effettuata da NickoMaiden il 01/06/2010 alle 15:37
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:53
Martedì, 01/06/2010
infatti il ciclo while fa tutto lui
non serve un indice perchè stampa a video tutto il contenuto riga per riga
poi se tu che in quella riga puoi scegliere anche quale campo vedere o non.


while($row = mysql_fetch_array($sql)) {

nella variabile $row và tutta la riga della tabella compreso nome,cognome,numero ecc. ecc.
quindi $row diventa un array come dice la sintassi stessa.

quindi recupero dall'array il valore della seguente riga

echo $row[nome];

successivamente se ci sono più righe il valore $row[nome] cambia :)
così eviti di farti tutto quel ciclo inutile

saluti


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 19:01
Martedì, 01/06/2010
Testo quotato

Postato originariamente da Thejuster:

infatti il ciclo while fa tutto lui
non serve un indice perchè stampa a video tutto il contenuto riga per riga
poi se tu che in quella riga puoi scegliere anche quale campo vedere o non.


while($row = mysql_fetch_array($sql)) {

nella variabile $row và tutta la riga della tabella compreso nome,cognome,numero ecc. ecc.
quindi $row diventa un array come dice la sintassi stessa.

quindi recupero dall'array il valore della seguente riga

echo $row[nome];

successivamente se ci sono più righe il valore $row[nome] cambia :)
così eviti di farti tutto quel ciclo inutile

saluti






ahhhhhhh capito grazie 1000 gentilissimo :D

PM Quote