Semplicemente perché esegui due volte la query, ovvero richiami il metodo "query" due volte:
Ciao!Codice PHP:
$result = $conn->query($sql);
if ($conn->query($sql) === TRUE) {
Semplicemente perché esegui due volte la query, ovvero richiami il metodo "query" due volte:
Ciao!Codice PHP:
$result = $conn->query($sql);
if ($conn->query($sql) === TRUE) {
regolamento altervista_______________ regolamento forum
Il problema è qui:
Stai eseguendo la query due volte di fila.Codice PHP:
$sql="update $table SET quantita=quantita-1 WHERE codicef=255";
$result = $conn->query($sql);
if ($conn->query($sql) === TRUE) {
Modifica in:
[php]
Codice PHP:
$sql = "UPDATE $table SET quantita = quantita - 1 WHERE codicef = 255";
$result = $conn->query($sql);
if ($result === TRUE) {
il mio prof mi ha dato una pagina da login da studiare capite le condizioni in cui stiamo messi(mi scuso in anticipo se non l'ho fatto interamente io ma prendevo spunto qua e la)volevo spiegate meglio alcune cose cosi da capirlo e in seguito provarci a farlo io
questo è il codice:
perchè se nel post mettiamo invia e non username quando schiaccio login(con campi inseriti giusti) non entra resta sulla pagina?Codice PHP:
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<?php
require('db.php');
session_start();
if(isset($_POST['username']))
{
$username = $con->escape_string( $_POST['username'] );
$password = $con->escape_string( $_POST['password'] );
$query = "SELECT * FROM utenti WHERE username='$username' and password='$password'";
$result = mysqli_query($con,$query) or die(mysql_error());
$rows = mysqli_num_rows($result);
if($rows==1){
$_SESSION['username'] = $username;
header("Location: index.php");
}else{
echo "<div class='form'>
<h3>Username/password is incorrect.</h3>
<br/>Click here to <a href='login.php'>Login</a></div>";
}
}else{
?>
<div class="form">
<h1>Log In</h1>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
<input type="text" name="username" placeholder="Username" required />
<input type="password" name="password" placeholder="Password" required />
<input type="submit" name="invia" value="Login" />
</form>
<p>Non sei registrato? <a href='registrazione.php'>registrati</a></p>
</div>
<?php } ?>
</body>
</html>
perchè se usavo $result = $conn->query($sql) mi dava errore e dovevo mettere $result mysqli_query($con,$query) or die(mysql_error());
da $rows fino alla chiusura del php non ho capito bene cosa faccia...
GRAZIE PER LE EVENTUALI RISPOSTE![]()
Controlla bene. Sostituendoperchè se nel post mettiamo invia e non username quando schiaccio login(con campi inseriti giusti) non entra resta sulla pagina?
conCodice PHP:
if(isset($_POST['username']))
funziona allo stesso modo.Codice PHP:
if(isset($_POST['invia']))
MySQLi e relative funzioni esistono in due "versioni", una orientata ad oggetti ed una procedurale.perchè se usavo $result = $conn->query($sql) mi dava errore e dovevo mettere $result mysqli_query($con,$query) or die(mysql_error());
Un esempio della prima "versione" è proprio $conn->query($sql), in cui invochi il metodo query sull'oggetto $conn. Un esempio "versione" procedurale è invece il mysqli_query($con, $query) che stai usando: in questo caso non invochi un metodo, ma chiami una funzioni a cui passi due parametri, uno dei quali rappresenta la connessione alla base di dati.
Come forse avrai intuito, le due "versioni" sono equivalenti, ciò che si può fare con l'una può essere realizzato anche con l'altra, MA non sono intercambiabili e non si possono mescolare.
In termini concreti, se hai effettuato la connessione alla base di dati usando la "versione" procedurale (come è nel tuo caso), per eseguire le query non puoi usare la "versione" ad oggetti, bensì continuare con la procedurale mysqli_query, e viceversa.
Suggerisco di riscrivere quel blocco di codice con una formattazione adeguata:da $rows fino alla chiusura del php non ho capito bene cosa faccia...
come prima cosa, in $rows viene inserito il numero di righe ottenute mediante la query: quando usi SELECT stai estraendo delle righe da una tabella, con quell'istruzione non fai altro che "contare" quante righe hai estratto.Codice PHP:
$rows = mysqli_num_rows($result);
if ($rows == 1) {
$_SESSION['username'] = $username;
header("Location: index.php");
}
else {
echo "<div class='form'>
<h3>Username/password is incorrect.</h3>
<br/>
Click here to <a href='login.php'>Login</a>
</div>";
}
Dopodiché, se il numero di righe è uguale ad 1 entri nel corpo dell'if. Se il numero di righe è uguale ad 1, significa che nella tabella c'è esattamente una riga che risponde alla condizione che hai posto durante la SELECT, ovvero c'è esattamente una riga con il nome utente e la password indicati, quindi si può dedurre che la procedura di autenticazione sia avvenuta correttamente.
In questo caso il nome utente viene memorizzato nella sessione, e l'utente viene reindirizzato alla pagina index.php.
Altrimenti, se il numero di righe estratte è diverso da 1 (per come è impostata la tabella, tale numero se non è 1 allora è necessariamente 0), significa che l'autenticazione non è andata a buon fine. Può darsi che il nome utente inserito sia sbagliato, oppure il nome utente sia corretto ma la password sbagliata. In questo caso vengono mostrati un messaggio d'errore ed un collegamento verso la pagina login.php in modo da poter ritentare la procedura.
Occhio ad una "sottigliezza" su cui è bene soffermarsi. La pagina è strutturata in questo modo:
ovvero c'è del codice HTML all'interno di un else di PHP. Il codice HTML in questione verrà considerato solo quando il ramo else viene eseguito. In questo caso, significa che il form di autenticazione verrà mostrato solo a condizione che $_POST['username'] non sia impostato.Codice:[intestazioni HTML] if (isset($_POST['username'])) { [controlli ed operazioni PHP] } else { [blocco HTML] } [altro HTML]
Se hai altri dubbi, chiedi.
l'immagine se uso background nel body verra sempre ripetuta,senza il css si puo mettere l'immagine full screen?
Forse, con una svalangata di codice HTML di dubbia qualità. Meglio usare CSS.
salve vorrei aumentare la sicurezza del mio sito perchè quando vado nella pagina login(chiamata index.php)perchè se vado a fare il login funziona ma se nella barra oltre al nome del sito metto /ciao.php(reinderizzamento fatto il login) va lo stesso saltando il login come posso fare?
Ultima modifica di esami : 23-03-2018 alle ore 18.02.36
dentro "ciao.php" devi controllare se l'utente è loggato. (quindi se esiste la sessione, del tipo:
)Codice PHP:
is(!isset($_SESSION['nome_che_hai_scelto']))
{
//se entra qui, o mostri un errore dicendo che l'utente non è loggato, oppure lo rimandi alla schermata di login etc etc
}
Ciao!
regolamento altervista_______________ regolamento forum
cosi o intendevi altro?Codice PHP:
<?php
if(!isset($_SESSION['username']))
{
echo 'non sei loggato ritorna a '.'<a href="index.php">login</a>';
}
?>
Sì, però poi interrompi il flusso della pagina con exit() dopo la echo, altrimenti la pagina continuerà a processarsi.
Ciao!
regolamento altervista_______________ regolamento forum
adesso quando faccio il login mi spunta solo quello nell'echo
Hai aperto prima la sessione con session_start()? (devi sempre usare quella funzione quando vuoi anche solamente leggere le sessioni).
Ricorda di usare quella funzione prima di qualsiasi carattere html (anche spazi) in uscita: mettila sempre come prima istruzione e non sbagli mai (assicurati che non ci sia nessun carattere prima di "<?php", nemmeno uno spazio).
Ciao!
regolamento altervista_______________ regolamento forum
fatto il login mi deve andare sulla pagina ciao.php sei sei loggato ti deve spuntare una cosa se invece salti il login mettendo /ciao.php nella barra mi dovrebbe uscire che non è loggato il codice cosi?
Codice PHP:
<?php
session_start();
if(isset($_SESSION['username']))
{
echo 'non sei loggato ritorna a '.'<a href="index.php">login</a>';
}
exit()
?>
<html>
<head>
</head>
<body>
<a href="logout.php">logout</a>
</body>
</html>
La exit va messa dentro al corpo dell'if.
Codice PHP:
<?php
session_start();
if (isset($_SESSION['username']))
{
echo 'non sei loggato ritorna a '.'<a href="index.php">login</a>';
exit();
}
?>
<html>
<head>
</head>
<body>
<a href="logout.php">logout</a>
</body>
</html>
non vede html quando faccio il login vede quella nell'echo
Ultima modifica di esami : 24-03-2018 alle ore 17.30.28
Ah certo, mi era sfuggita una cosa: nella guardia dell'if devi valutare se l'utente non è autenticato, ed in quel caso mostrare l'echo e la exit. Quindi la condizione da utilizzare è la negazione di quella che stai utilizzando tu:
Nota il "!" prima di isset.Codice PHP:
<?php
session_start();
if (!isset($_SESSION['username']))
{
echo 'non sei loggato ritorna a '.'<a href="index.php">login</a>';
exit();
}
?>
<html>
<head>
</head>
<body>
<a href="logout.php">logout</a>
</body>
</html>
risalve rieccomi qui con una domanda,
stavo studiando un po di css e mi sono inbattuto in questo codice
vorrei capire come funziona questo tasto cercaCodice PHP:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
* {box-sizing: border-box;}
body {
margin: 0;
font-family: Arial, Helvetica, sans-serif;
}
.topnav {
overflow: hidden;
background-color: #e9e9e9;
}
.topnav a {
float: left;
display: block;
color: black;
text-align: center;
padding: 14px 16px;
text-decoration: none;
font-size: 17px;
}
.topnav a:hover {
background-color: #ddd;
color: black;
}
.topnav a.active {
background-color: #2196F3;
color: white;
}
.topnav .search-container {
float: right;
}
.topnav input[type=text] {
padding: 6px;
margin-top: 8px;
font-size: 17px;
border: none;
}
.topnav .search-container button {
float: right;
padding: 6px 10px;
margin-top: 8px;
margin-right: 16px;
background: #ddd;
font-size: 17px;
border: none;
cursor: pointer;
}
.topnav .search-container button:hover {
background: #ccc;
}
@media screen and (max-width: 600px) {
.topnav .search-container {
float: none;
}
.topnav a, .topnav input[type=text], .topnav .search-container button {
float: none;
display: block;
text-align: left;
width: 100%;
margin: 0;
padding: 14px;
}
.topnav input[type=text] {
border: 1px solid #ccc;
}
}
</style>
</head>
<body>
<div class="topnav">
<a class="active" href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
<div class="search-container">
<form action="/action_page.php">
<input type="text" placeholder="Search.." name="search">
<button type="submit"><i class="fa fa-search"></i></button>
</form>
</div>
</div>
<div style="padding-left:16px">
<h2>Responsive Search Bar</h2>
<p>Navigation bar with a search box and a submit button inside of it.</p>
<p>Resize the browser window to see the responsive effect.</p>
</div>
</body>
</html>
In che senso come funziona?
È settato il simbolo \f002 tramite CSS con:
Comunque, apri una nuova discussione perché si tratta di un argomento diverso.Codice:.fa-search:before { content: "\f002"; }
Ciao!
regolamento altervista_______________ regolamento forum
Salve,vi domando se è possibile fare login inserendo email o username inserendoli nello stesso input type ho provato cosi ma se non dichiaro email mi da errore,il campo email c'è,come posso fare?Codice PHP:
<!DOCTYPE html>
<html>
<head>
<link href="stile2.css" rel="stylesheet" type="text/css">
<title>Login</title>
</head>
<body>
<?php
require('db.php');
session_start();
if(isset($_POST['username']))
{
$username = $con->escape_string( $_POST['username'] );
$password = $con->escape_string( $_POST['password'] );
$email = $con->escape_string( $_POST['email'] );
$query = "SELECT * FROM utenti WHERE username='$username' or email='$email' and password='$password'";
$result = mysqli_query($con,$query) or die(mysql_error());
$rows = mysqli_num_rows($result);
if($rows==1){
$_SESSION['username'] = $username or $_SESSION['email'] = $email;
header("Location: ecommerce.php");
}else{
echo "<div class='form'>
<h3>Username/password errate.</h3>
<br/>clicca qui per il <a href='index.php'>Login</a></div>";
}
}else{
?>
<div class="form">
<audio controls loop autoplay>
<source src="inno.mp3" type="audio/mp3">
</audio>
<br><br><br><br><br><br><br><br><br><br>
<center><h3>Log In</h3></center>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
<center><table bgcolor="silver">
<tr><td>username o email</td></tr>
<tr><td><input type="text" name="username" placeholder="Username" /></tr></td>
<tr><td>password</td></tr>
<tr><td><input type="password" name="password" placeholder="Password" required /></tr></td>
<tr><td><center><input type="submit" name="invia" value="Login" /></center></tr></td>
</table></center>
</form>
<center>Non sei registrato? <a href='registrazione.php'>registrati</a></center>
</div>
<?php } ?>
Ultima modifica di esami : 29-04-2018 alle ore 19.44.14
Sbaglio o vedo che non esiste alcun input con name="email"? se ho ben capito, dovresti usare "$username" sa per la ricerca di 'username' che per 'email', una cosa del tipo:Codice PHP:
$_SESSION['email']
(anche se a questo punto cambierei il nome della variabile che può trarre in inganno).Codice PHP:
$query = "SELECT * FROM utenti WHERE username='$username' or email='$username' and password='$password'";
- Per come è fatta la query, io aggiungerei una parentesi per stare sicuro in questo modo:
Senza parentesi, se per sbaglio venisse interpretato in questo modo:Codice:WHERE (contizione1 or condizione2) and condizione3
un utente potrebbe effettuare il login tramite la condizione1 senza utilizzare la password corretta!Codice:WHERE contizione1 or (condizione2 and condizione3)- la funzione session_start() va richiamata prima di qualsiasi output HTML: puoi aprire più volte il tag <?php ... ?>, quindi richiama quella funzione prima di qualsiasi carattere HTML.
- Lato html non utilizzare <center> ed evita di usare tabelle per posizionare contenuti della pagina.
Ciao!
regolamento altervista_______________ regolamento forum
grazie mille funziona![]()
salve torno a rompervi i ...... questa volta volevo sapere come fare uno script per un "aggiungi al carrello" senzs javascript,avevo pensato ad un semplice php ma mi mostrerebbe solo l'oggetto quando schiaccio il tasto,poi ho pensato che li inserivo in una tabella e poi quando schiaccio carrello(in una barra)mi viene mostrato quello che ho aggiunto attraverso un select il problema e che non so fare che quando schiaccio "elimina o un tasto"mi elimina quella riga
Per eliminare un elemento dal carrello, devi generare tanti form (o uno solo, vedi tu) inviando allo script l'id della riga da eliminare. Poi procedi con la query DELETECiao!Codice:DELETE FROM tabella WHERE id=57
regolamento altervista_______________ regolamento forum
ma cosi mi elimina la query dove c'è il campo id 57,se tipo ho un ogetto che non ha quell'id?(probabilmente non ho capito,devo generare tanti form perchè aggiungo vari oggetti)
57 era un esempio, alla fine sarà una cosa del tipo:
Il dato POST "id_da_form" verrà da un form dove l'utente seleziona l'oggetto da eliminare.Codice PHP:
if(isset($_POST['id_da_form']))
{
$id_da_eliminare = $_POST['id_da_form'];
//controlli vari di $id_da_eliminare (esempio escape_string o controllo che sia effettivamente un numero)
$mysqli->query('DELETE FROM tabella WHERE id='.$id_da_eliminare);
}
Ciao!
Ultima modifica di alemoppo : 08-05-2018 alle ore 22.01.05
regolamento altervista_______________ regolamento forum
$id_da_eliminare gli posso mettere un campo che voglio eliminare?
Salve,
sono un utente di altervista da diversi anni e mi trovo veramente bene.
Tempo fa ho creato un sito qui su altervista http://estractorevolution.altervista.org a cui ho connesso alcuni miei software (si collegano in ftp e fanno upload e download di piccoli files).
E' successo che a fronte di una mia formattazione del pc ho perso i dati di login,la password e cosi ho fatto il reset della password senza pensare che poi i miei software avrebbero smesso di connettersi visto che la password era cambiata.
La mia domanda è questa:
E' possibile ripristinare la password precedente a quella attuale (per l' utente estractorevolution) ? Ne ho sincero bisogno perchè non ho altro modo di far connettere questi miei programmi se non ripristinando la vecchia password per l' accesso al sito e al ftp.
Spero proprio si possa fare !!!
Cordiali Saluti,
Sergio Cionini
http://estractorevolution.altervista.org
Lo prelevi dal form inviato, come vedi da $_POST['id_da_form'].
@estractorevolution: apri una tua discussione, qui non centra nulla. Comunque puoi modificare la password dal pannello di controllo->profilo (scorri in basso).
Ciao!
regolamento altervista_______________ regolamento forum
questo è il carrello http://esami.altervista.org/ciao/eco...va2/prova1.php ad ogni riga devo mettere qualcosa dove la toglie,il isset form quindi lo devo mettere su prova1.php,? scusa l'ignoranza a capire ci sto tanto...
La cosa più facile è così: in quella tabella, aggiungi una nuova colonna e ci inserisci un link per eliminare l'oggetto.
(Piuttosto del form che ti avevo suggerito prima, è sufficiente e forse più facile impostare un link con un parametro GET)
Un link di questo tipo:
Dove $row è la variabile che cicla le righe del database (non so come l'hai chiamata quella variabile).Codice PHP:
echo '<a href="paginachevuoi.php?elimina='.$row['id'].'"> elimina </a>';
Poi la pagina "paginachevuoi.php" avrà dentro il codice che ti avevo mostrato prima, però invece di $_POST['...'] sarà:
Ciao!Codice PHP:
$id_da_eliminare = $_GET['elimina'];
regolamento altervista_______________ regolamento forum