Ciao a tutti, mi chiamo Antonio (delle volte mi chiamo anche da solo) e non uso SQL dall'epoca degli estintori a forma di asteroide. Però mi sono fatto delle domande sul uèb trepuntozzero.

Devo fare due pagine web:
- pagina di login con email nome e cognome;
- una privata con le informazioni e il pulsante di logout.


Se poteste evitare di fare gli esempi con nomi inglesi e generici, tipo "user" e "database" non li confonderei con eventuali comandi.

Esempio da non fare:
database.connection("tuoip")
Che non si capisce di chi è l'IP, se "database" è un nome a scelta e che minchia metterci dentro a "tuoip" se il mio client o mio server, oppure un IP del server del database qualora si trovasse fuori dal sito di antoniobianco.altervista (dove farò i miei test)

Esempio da fare:
#dichiara la variabile "dbclienti" di tipo database
#ip del server in cui si trova fisicamente il database e nome del database a cui connettersi
dbclienti = database.connection(http://123.456.789.001.clienti)

Al momento mi serve la procedura più snella possibile, quindi niente captcha e robe simili.

io non ho idea come si fa a fare quello che vuoi fare, ma se trovi qualcuno che sa dirti come fare quello che vuoi fare, qualcosa che insomma faccia al caso tuo, son contento. ciao.


mah per fare una cosa trash non ci vuole molto.. per fare una cosa sicura il discorso cambia ;D

Devi rubare le credenziali di qualcuno?

No, non devo fare una cosa sicura. Mi serve solo l'essenziale per capire come si fa. Della sicurezza vi chiederò dopo.
E non devo rubare la credenziali a nessuno. Sono un tecnico, me le danno di loro spontanea volontà XD

esempio:
nel computer dove gira il server web c'è anche un database sql chiamato IlMioPrimoDatabase con all'interno una tabella Utenti: ID, User, Pwd

html semplice semplice della pagina "login.html"

<form action="check.php" method="post">
<input type="text" name="user">
<input type="password" name="pwd">
<input type="submit" value="Login" name="Login">
</form>


a questo punto check.php potrebbe essere una cosa del tipo:

<?php
$user
=$_POST['user'];
$pwd=$_POST['pwd'];
$indirizzo_ip_del_server_dove_si_trova_il_database 'localhost';
$nome_del_database 'ilMioPrimoDatabase';
$nome_utente_per_accedere_al_database 'root';
$password_di_accesso_al_database 'toor';
$db = new PDO('mysql:host='.$indirizzo_ip_del_server_dove_si_trova_il_database.',dbname='.$nome_del_database,$nome_utente_per_accedere_al_database,$password_di_accesso_al_database);
$sql "SELECT ID FROM Utenti WHERE User=:username AND Pwd=:password";
$query $db->prepare($sql);
$query->bindParam('username',$user);
$query->bindParam('password',$pwd);
$query->execute();
if(
$query->fetch()) {
    echo 
'ok!';
} else {
    echo 
'ko!';
}
?>


ho scritto senza testare, spero vada bene  ;D

Credo che vada bene, mi ricorda l'accesso al db con java ai tempi della scuola.
Lo vedrò una volta tornato a casa, cioè, domani mattina.

Sto facendo la prova su Altervista, ho scritto tutta la configurazione lì.

Mi restituisce sempre ko

Cicciacaccola verdognolo :rp: :rp: :rp: :rp:
K, fottiti
Fai contenta la tua tosse, fuma una sigaretta

da una ricerca google, sembra che pdo sia supportato su altervista solo per sqlite.
J:
unita' 4/1981
comp: 7.99%

in teoria il campo username andrebbe messo, nella query, tra apici.

$sql = "SELECT ID, User, Pwd FROM Utenti WHERE User=:username";

non so se la funzione bindParam li aggiunga da sola, io comunque ti consiglio di fare un echo della stringa sql che stai mandando al server. puoi provare ad aggiungere questa riga prima di $query->execute();

var_dump($query);

per vedere cosa mostra

edit: sei sicuro, genno? mi pare di aver usato i pdo su altervista, in passato, ed io ho sempre usato solo mysql
スニャブロ ufficiale del forum
pulsantoni pulsantosi per greasemonkey: http://bubs.altervista.org/index.php?topic=4.msg183#msg183
script greasemonkey anti-ads: http://bubs.altervista.org/index.php?topic=6.msg2581#msg2581

I miei vaneggi pseudodisegnosi: http://sgnafp.deviantart.com/

"Speed never killed anyone, suddenly becoming stationary, that's what gets you."

J:
unita' 4/1981
comp: 7.99%

Ho stampato il dump tra prepare ed execute ed anche alla fine della query. Sembra che non bindaparamma nulla. (Ciao Buntolo :lki:)

<?php
$user
=$_POST['user'];
$pwd=$_POST['pwd'];
$indirizzo_ip_del_server_dove_si_trova_il_database 'localhost';
$nome_del_database 'my_antoniobianco';
$nome_utente_per_accedere_al_database 'antoniobianco';
$password_di_accesso_al_database 'NO.';
$db = new PDO('mysql:host='.$indirizzo_ip_del_server_dove_si_trova_il_database.',dbname='.$nome_del_database,$nome_utente_per_accedere_al_database,$password_di_accesso_al_database);
$sql "SELECT ID, User, Pwd FROM Utenti WHERE User = :username";
$query $db->prepare($sql);
$query->bindParam(':username',$user);
var_dump($query);
echo 
'<br>';
$query->execute();
if(
$query->fetch()) {
    echo 
'ok!';
} else {
    echo 
'ko!';
}
echo 
'<br>';
var_dump($query);
?>

http://antoniobianco.altervista.org/test/db/login.html

#14 24 Novembre 2014, 08:26:21 Ultima modifica: 24 Novembre 2014, 08:51:30 di zeek
il comando corretto dovrebbe essere

<?php
$query
->bindParam('username',$user);
?>


tu hai fatto il bindparm su ':username'. Riprova e fammi sapere  ;D - questo forse non c'entra una tuba :falsofalso:

edit:
per vedere eventuali errori puoi modificare la chiamata all'oggetto PDO in questo modo:

<?php
$db 
= new PDO('mysql:host='.$indirizzo_ip_del_server_dove_si_trova_il_database.',dbname='.$nome_del_database,$nome_utente_per_accedere_al_database,$password_di_accesso_al_database, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
?>


così dovrebbe darti degli errori se sbagli qualcosa.

prova anche a trimmare i campi user e password - si sa mai che arriva qualcosa di strano.
$user=trim($_POST['user']);
e nel database cerca trimmando il campo utente - SELECT ID FROM Utenti WHERE TRIM(User)=:username

$query->bindParam('username',$user);
Ho aggiunto i duepunti perché avevo già il problema e volevo provare. Ora li tolgo.

Ho fatto tutte le modifiche, puoi vedere una copia del php nella stessa pagina

Citazione di: Outputobject(PDOStatement)#2 (1) { ["queryString"]=> string(55) "SELECT ID, User, Pwd FROM Utenti WHERE User = :username" }

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in /membri/antoniobianco/test/db/check.php:14 Stack trace: #0 /membri/antoniobianco/test/db/check.php(14): PDOStatement->execute() #1 {main} thrown in /membri/antoniobianco/test/db/check.php on line 14

Mi pare strano che non trovi il database, il nome è quello.

Credenziali di accesso al DB di Altervista

Hostname/server: localhost
Username: antoniobianco
Password:  :lkof:
Database: my_antoniobianco

aehm... errore mio xD

la stringa giusta per collegarsi al database:

$db = new PDO('mysql:host='.$indirizzo_ip_del_server_dove_si_trova_il_database.';dbname='.$nome_del_database,$nome_utente_per_accedere_al_database,$password_di_accesso_al_database, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));


sorry  :-[

No problema. Leggiti questo! :asd:

CitazioneVastissime catene di condizioni astratte e requisiti vengono giornalmente analizzate in vano per scoprire che, semplicemente, non funzionavano perché mancava una virgola.
fonte: http://valeriopierbattista.com/blog/programmare-fa-schifo/

Ora va tutto bene
object(PDOStatement)#2 (1) { ["queryString"]=> string(55) "SELECT ID, User, Pwd FROM Utenti WHERE User = :username" }
ok!
object(PDOStatement)#2 (1) { ["queryString"]=> string(55) "SELECT ID, User, Pwd FROM Utenti WHERE User = :username" }

Se carchi il dito sul pulsante bbottonoso ti mostra tuttalatabbella :mki:

<?php
$db_server 
'localhost';
$database 'my_antoniobianco';
$db_user 'antoniobianco';
$db_password '';
mysql_connect($db_server,$db_user,$password);
@
mysql_select_db($database) or die( "Impossibile connettersi al database");
$query="SELECT * FROM Utenti";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();
echo 
'<html>';
echo 
'<head>';
echo 
'<meta charset="UTF-8">';
echo 
'</head>';
echo 
'<body>';
echo 
'<table border=1>';
echo 
'<tr><td><strong>ID</strong></td><td><strong>User</strong></td><td><strong>Password</strong></td></tr>';
$i=0;
while (
$i $num)
{
  
$field_ID=mysql_result($result$i"ID");
  
$field_User=mysql_result($result$i"User");
  
$field_Password=mysql_result($result$i"Pwd");
  echo 
'<tr><td>',$field_ID,'</td><td>',$field_User,'</td><td>',$field_Password,'</td></tr>';
  
$i++;
}
echo 
'</table>';

# Primo test con PDO. Non funziona un cazzo, in compenso è pieno di nabbitudine allo stato puro.
#$db = new PDO('mysql:host='.$db_server.';dbname='.$database,$db_user,$db_password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
#$sql = "SELECT * FROM Utenti";
#$query = $db->prepare($sql);
#$query->execute();
#$result = $query->fetch();
#echo '<html>';
#echo '<head>';
#echo '<meta charset="UTF-8">';
#echo '</head>';
#echo '<body>';
#if($result)
#{
#  echo '<table border=1>';
#  echo '<tr><td><strong>ID</strong></td><td><strong>User</strong></td><td><strong>Password</strong></td></tr>';
#  for($i=0;$i<count($result);$i++)
#  {
#    echo '<tr><td>',$result["ID"][$i],'</td><td>',$result["User"][$i],'</td><td>',$result["Pwd"][$i],'</td></tr>';
#  }
#  echo '</table>';
#}
#else
#{
#  echo "L'utente che stai cercando attualmente non esiste e non esisterà mai. E non ho nemmeno voglia di andare a cercartelo.<br><strong>Cazzi tuoi.</strong>";
#}
echo '</body>';
echo 
'</html>';
?>

#19 09 Dicembre 2014, 23:49:03 Ultima modifica: 10 Dicembre 2014, 01:33:48 di TonyWhite
Aggiornamento
http://antoniobianco.altervista.org/test/db/index.php

Codice (index.php) Seleziona
<?php
echo '<html>';
echo 
'<head>';
echo 
'<meta charset="UTF-8">';
echo 
'</head>';
echo 
'<body>';

echo 
'<form action="index.php" method="post">';
echo 
'<table>';
echo 
'<tr><td>User</td><td><input type="text" name="user"></td></tr>';
echo 
'<tr><td>Password</td><td><input type="password" name="pwd"></td></tr>';
echo 
'</table>';
echo 
'<input type="submit" name="registra" value="Registra"> <input type="submit" name="cerca" value="Cerca utente"> <input type="submit" name="elimina" value="Elimina"> <input type="submit" name="tutti" value="Tutti">';
echo 
'</form>';
echo 
'<hr>';

# Individua il comando richiesto
if (isset($_POST['registra']))
{
  
addRecord();
}
else if (isset(
$_POST['cerca']))
{
  
getRecord();
}
else if (isset(
$_POST['elimina']))
{
  
removeRecord();
}
else if (isset(
$_POST['tutti']))
{
  
showAllRecords();
}
else
{
  
# Nessuna richiesta, nessun risultato;
}
echo 
'</body>';
echo 
'</html>';

# Rimuove un utente dal database
function removeRecord()
{
  
# Legge le informazioni
  
$user=trim($_POST['user']);
  
$pwd=trim($_POST['pwd']);
  
  
# Connetti al database
  
$db_server 'localhost';
  
$database 'my_antoniobianco';
  
$db_user 'antoniobianco';
  
$db_password '';
  
mysql_connect($db_server,$db_user,$password);
  @
mysql_select_db($database) or die( "Impossibile connettersi al database");
  
  
# Crea la query
  
$query="SELECT * FROM Utenti WHERE User='$user' AND Pwd='$pwd'";
  
$result=mysql_query($query);
  
mysql_close();
  
  
# Visualizza il risultato
  
$num=mysql_numrows($result);
  if (
$num == 1)
  {
    
# Rimuove l'utente dal database
    
if ($pwd == mysql_result($result0"Pwd"))
    {
      
# Connetti al database
      
$db_server 'localhost';
      
$database 'my_antoniobianco';
      
$db_user 'antoniobianco';
      
$db_password '';
      
mysql_connect($db_server,$db_user,$password);
      @
mysql_select_db($database) or die( "Impossibile connettersi al database");
      
      
# Crea la query
      
$query="DELETE FROM Utenti WHERE User='$user' AND Pwd='$pwd';";
      
$result=mysql_query($query);
      
mysql_close();
      
      if (
$result)
      {
echo "L'utente $user è stato cancellatoammazzatobrasatoeliminatoaccoppato correttamente. Una cosa pulita.";
      }
      else
      {
echo "L'utente $user è ancora vivo. #fottiti";
      }
    }
    else
    {
      echo 
"Il nome che hai scelto è libero, ma la prossima volta prova a scegliere anche una password. Nel frattempo un altro utente potrebbe averti fottuto il nome. Minchione.";
    }
    
  }
  else
  {
    
# Manda a fanculo
    
echo "L'utente '$user' non esiste. Minchione.";
  }
}

# Aggiunge un nuovo utente al database
function addRecord()
{
  
# Legge le informazioni
  
$user=trim($_POST['user']);
  
$pwd=trim($_POST['pwd']);
  
  
# Connetti al database
  
$db_server 'localhost';
  
$database 'my_antoniobianco';
  
$db_user 'antoniobianco';
  
$db_password '';
  
mysql_connect($db_server,$db_user,$password);
  @
mysql_select_db($database) or die( "Impossibile connettersi al database");
  
  
# Crea la query
  
$query="SELECT * FROM Utenti WHERE User='$user'";
  
$result=mysql_query($query);
  
mysql_close();
  
  
# Visualizza il risultato
  
$num=mysql_numrows($result);
  if (
$num == 0)
  {
    
# Aggiunge l'utente al database
    
if ($pwd != '')
    {
      
# Connetti al database
      
$db_server 'localhost';
      
$database 'my_antoniobianco';
      
$db_user 'antoniobianco';
      
$db_password '';
      
mysql_connect($db_server,$db_user,$password);
      @
mysql_select_db($database) or die( "Impossibile connettersi al database");
      
      
# Crea la query
      
$query="INSERT INTO Utenti (User, Pwd) VALUES ('$user', '$pwd');";
      
$result=mysql_query($query);
      
mysql_close();
      
      if (
$result)
      {
echo 'I risultati ci sono. Pompimenti!';
      }
      else
      {
echo 'I risultati non ci sono. #fottiti';
      }
    }
    else
    {
      echo 
"Il nome che hai scelto è libero, ma la prossima volta prova a scegliere anche una password. Nel frattempo un altro utente potrebbe averti fottuto il nome. Minchione.";
    }
    
  }
  else
  {
    
# Manda a fanculo
    
echo "Scegli un altro username.";
  }
}

function 
getRecord()
{
  
# Legge le informazioni
  
$user=trim($_POST['user']);
  
$pwd=trim($_POST['pwd']);
  
  
# Connetti al database
  
$db_server 'localhost';
  
$database 'my_antoniobianco';
  
$db_user 'antoniobianco';
  
$db_password '';
  
  
# Crea la query
  
$db = new PDO('mysql:host='.$db_server.';dbname='.$database,$db_user,$db_password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
  
$sql "SELECT ID, User, Pwd FROM Utenti WHERE User=:username";
  
$query $db->prepare($sql);
  
$query->bindParam('username',$user);
  
$query->execute();
  
$result $query->fetch();
  
  
# Visualizza il risultato
  
if($result)
  {
    echo 
'<table border=1>';
    echo 
'<tr><td><strong>ID</strong></td><td><strong>User</strong></td><td><strong>Password</strong></td></tr>';
    echo 
'<tr><td>',$result["ID"],'</td><td>',$result["User"],'</td><td>',$result["Pwd"],'</td></tr>';
    echo 
'</table>';
  }
  else
  {
    echo 
"L'utente che stai cercando non esiste e non esisterà mai.<br>E non ho nemmeno voglia di andare a cercartelo.<br><strong>Cazzi tuoi.</strong>";
  }
}

function 
showAllRecords()
{
  
# Connetti al database
  
$db_server 'localhost';
  
$database 'my_antoniobianco';
  
$db_user 'antoniobianco';
  
$db_password '';
  
mysql_connect($db_server,$db_user,$password);
  @
mysql_select_db($database) or die( "Impossibile connettersi al database");
  
  
# Crea la query
  
$query="SELECT * FROM Utenti";
  
$result=mysql_query($query);
  
mysql_close();
  
  
# Visualizza il risultato
  
$num=mysql_numrows($result);
  echo 
'<table border=1>';
  echo 
'<tr><td><strong>ID</strong></td><td><strong>User</strong></td><td><strong>Password</strong></td></tr>';
  
$i=0;
  while (
$i $num)
  {
    
$field_ID=mysql_result($result$i"ID");
    
$field_User=mysql_result($result$i"User");
    
$field_Password=mysql_result($result$i"Pwd");
    echo 
'<tr><td>',$field_ID,'</td><td>',$field_User,'</td><td>',$field_Password,'</td></tr>';
    
$i++;
  }
  echo 
'</table>';
}
?>


Ci son 2 coccodrilli 4 pulsanti che funzionano tutti. Ovviamente senza nessun controllo sulle injection perché prima devo fare ordine nelle cose basilari. Vedi questi 4 punti.

1) Il codice PHP non è ancora modulare
2) È meglio usare il PDO?
3) Col PDO non sono riuscito a mostrare più di 1 risultato
4) Il login è un'accozzaglia che si trova dappertutto. Dapper tutto. Ubuntu Dapper tutto. Esce dalle fottute pareti! Dovrei isolarlo per bene (PDO o non PDO?) e poi dovrei chiudere la connessione al database automaticamente evitando l'errore umano.

Un esempio per il punto 4. Dovrei fare una cosa del genere, per non dover aprire e chiudere sempre il database.
Oppure sarebbe meglio tenere aperto il database il minor tempo possibile, aprendolo e chiudendolo ogni volta?

Codice (cueri.php) Seleziona
<?php
function connettiDatabase()
{
  
bla bla bla;
}

function 
disconnettiDatabase()
{
  
bla bla bla;
}

function 
aggiungiRecord()
{
  
bla bla bla;
}

function 
cercaRecord()
{
  
bla bla bla;
}

$user=trim($_POST['user']);
$pwd=trim($_POST['pwd']);
$eccetera=trim($_POST['eccetera']);
connettiDatabase();
cercaRecord();
aggiungiRecord();
rimuoviRecord();
disconnettiDatabase();
?>