Ciao a tutti, ho un problema che non so come risolvere.
Sto scrivendo tramite pagine php dei dati su MySql, la scrittura e la lettura funzionano perfettamente, ma non riesco a modificare o cancellare un singolo campo nella tabella.
Grazie
Ciao a tutti, ho un problema che non so come risolvere.
Sto scrivendo tramite pagine php dei dati su MySql, la scrittura e la lettura funzionano perfettamente, ma non riesco a modificare o cancellare un singolo campo nella tabella.
Grazie
Mostra le parti rilevanti del codice che hai provato a scrivere per cancellazione e modifica, così vediamo cosa c'è che non va.
I suggerimenti che do più spesso:
- Le funzioni mysql_* non fanno più parte di PHP. Usa PDO o MySQLi.
- Il supporto a PHP 5.x è cessato l'1 gennaio 2019, e con esso le funzioni mysql_*. Che ti piaccia o no.
- Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
- Indenta correttamente il codice e usa nomi significativi per gli identificatori.
Questo è il codice per la cancellazione:
Mentre per la modifica:Codice PHP:
<?php
$user = $_REQUEST["username"];
$psw = $_REQUEST["password"];
$mail = $_REQUEST["mail"];
$conn = mysql_connect("ftp.davideprogetti.altervista.org", "*****", "******");
mysql_select_db("my_davideprogetti");
$comando = "select email from _utenti where nome='$user'";
$risultato = mysql_query($comando);
$riga = mysql_fetch_assoc($risultato);
if($riga){
if ($riga["email"] == $mail){
$comando2 = "DELETE FROM `_utenti` WHERE `nome`='$user'";
$risultato2 = mysql_query($comando);
$riga2 = mysql_fetch_assoc($risultato);
$comando3 = "INSERT INTO _utenti (`nome`, `pass`, `email`) VALUES ('$user', '$psw', '$mail')";
mysql_close($conn);
}
}
?>
Codice PHP:
<?php
$user = $_REQUEST["username"];
$psw = $_REQUEST["password"];
$mail = $_REQUEST["mail"];
$conn = mysql_connect("ftp.davideprogetti.altervista.org", "*****", "******");
mysql_select_db("my_davideprogetti");
$comando = "select email from _utenti where nome='$user'";
$risultato = mysql_query($comando);
$riga = mysql_fetch_assoc($risultato);
if($riga){
if ($riga["email"] == $mail){
$comando2 = "UPDATE `_utenti` SET `pass`='$pass' WHERE `nome`='$user'";
$risultato2 = mysql_query($comando);
$riga2 = mysql_fetch_assoc($risultato);
mysql_close($conn);
}
}
?>
Ultima modifica di alemoppo : 12-01-2021 alle ore 20.58.57 Motivo: +tag [php]
Le funzioni mysql_* non fanno più parte del linguaggio da diversi anni, e sono deprecate da 6-7 anni. Se sei agli inizi con PHP e SQL ti conviene cominciare seguendo guide più aggiornate, cercane che usino mysqli o PDO.
Riguardo alla cancellazione: dal codice sembra tu intenda cancellare le righe in cui nome = $user, ma solo a condizione che email = $mail. Puoi unire queste due clausole in un'unica query:
Dopo l'esecuzione della query, di cui dovresti controllare il valore di ritorno, stai usando un fetch_assoc: questo è sbaglio, le operazioni di DELETE non restituiscono risultati, quindi non c'è nulla da restituire tramite fetch.Codice PHP:
$comando2 = "DELETE FROM `_utenti` WHERE `nome`='$user' AND `email`='$mail'";
Non è chiaro quale sia lo scopo di $comando3: intendi reinserire un utente dopo averlo cancellato?
Le stesse osservazioni valgono per la modifica: puoi usare un'unica query per modifica solo l'utente con nome e email indicati:
Anche in questo caso usi un fetch_assoc che non serve a niente, le UPDATE non restituiscono risultati.Codice PHP:
$comando2 = "UPDATE `_utenti` SET `pass`='$pass' WHERE `nome`='$user' AND `email`='$mail'";
Una cosa molto importante è controllare sempre i valori restituiti dalle query, possono indicarti se ci sono errori. Se hai bisogno di una mano su questo, scegli uno tra mysqli e PDO e possiamo vedere insieme il codice relativo.
Il codice al momento è vulnerabile a SQL Injection, dovresti usare prepared statement, ma per il momento va bene così. Una cosa alla volta.
I suggerimenti che do più spesso:
- Le funzioni mysql_* non fanno più parte di PHP. Usa PDO o MySQLi.
- Il supporto a PHP 5.x è cessato l'1 gennaio 2019, e con esso le funzioni mysql_*. Che ti piaccia o no.
- Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
- Indenta correttamente il codice e usa nomi significativi per gli identificatori.