PDA

View Full Version : PHP - Login


fale
06-12-2006, 22:29
:cry: :cry: :cry: :cry: :cry: Non ho assolutamente capito come farlo funzionare (non ho ancora ben capito il rapporto php - sql )

Function login:
print ('<head>');
print ('<link href="/skin/default/style.css" rel="stylesheet" type="text/css">');
print ('<title>..:: Login ::.. </title>');
print ('</head>');
print ('<table height="100%" width="100%" border="0">');
print ('<tr>');
print ('<td align="center" valign="center">');
print ('<form id="post" name="form1" method="post" action="login.php">');
print ('<table border="0">');
print ('<tr>');
print ('<td colspan="2" align="center" valign="center">');
print ('<b>Login:</b>');
print ('</td>');
print ('</tr>');
print ('<tr>');
print ('<td align="center" valign="center">');
print ('Username:<br>');
print ('</td>');
print ('<td align="center" valign="center">');
print ('<input name="user" type="text"><br>');
print ('</td>');
print ('</tr>');
print ('<tr>');
print ('<td align="center" valign="center">');
print ('Password:<br>');
print ('</td>');
print ('<td align="center" valign="center">');
print ('<input name="pass" type="password"><br>');
print ('</td>');
print ('</tr>');
print ('<tr>');
print ('<td colspan="2" align="center" valign="center">');
print ('<input type="submit" name="Submit" value="Invia" />');
print ('</td>');
print ('</tr>');
print ('</table>');
print ('</form>');
print ('</td>');
print ('</tr>');
print ('</table>');
print ('<center>');
print ('<a href=index.php?cmd=registrati"> Non ti sei ancora registrato? Cosa attendi?</a>');
print ('<br /><br /></center>');


file login.php
require ('settings.php');
$user = $_POST['user'];
$pass = $_POST['pass'];
mysql_select_db($db_database,$connessione) or die ("Errore nella selezione del db:" . mysql_error());
$query="SELECT ID, username, password FROM $db_tabella_users";
$risultato=mysql_query($query,$connessione) or die ("Errore nella query:" . mysql_error());
while($db=mysql_fetch_array($risultato))
{
if ($user == $db[username] & $pass == $db[password])
{
session_start();
$id=$db['ID']-1;
$_SESSION['id'] = $id;
$_SESSION['user'] = $db['username'];
$_SESSION['pass'] = $db['password'];
header("Location: personale.php?cmd=per_news");
setcookie("sav_user",$cok,time()+31536000);
print ('Redirect in corso');
$a = 1;
}
}
if ($a != 1)
print ('Nome utente o password sbagliata');

file settings.php$db_host='localhost';
$db_user='fale';
$db_password='***';
$db_database='fale';
$db_tabella_users='users';
$site='127.0.0.1';
$lang='it';

//ATTENZIONE
//Non modificare nulla sotto a questa riga
$connessione=mysql_connect($db_host,$db_user,$db_password) or die ("Errore nella connessione al Mysql:" . mysql_error());

funziona solo con un campo della tabella (nella tabella funziona coì:)
| ID | username | password |

grazie a tutti coloro che si cimenteranno nel mio problema
(doppio grazie a chi mi posta un possibile soluzione)
[triplo a chi mi posta la soluzione esatta]

Grazie..

vizzz
06-12-2006, 22:42
cosa non hai capito/non funziona?
ad occhio ti serve un server mysql con un database chiamato "fale" con una tabella "users" che contenga un campo id, username,pass

fale
06-12-2006, 22:45
vizzz, sei il mio salvatore

allora:
ho apache + mysql + tabelle con campi giusti

-- phpMyAdmin SQL Dump
-- version 2.9.1.1-Debian-1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generato il: 06 Dic, 2006 at 10:45 PM
-- Versione MySQL: 5.0.27
-- Versione PHP: 5.2.0-7
--
-- Database: `assosecco`
--

-- --------------------------------------------------------

--
-- Struttura della tabella `users`
--

CREATE TABLE `users` (
`ID` int(11) NOT NULL auto_increment,
`username` tinytext NOT NULL,
`password` tinytext NOT NULL,
`mail` tinytext NOT NULL,
`socio` tinyint(1) NOT NULL,
`admin` tinyint(1) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Dump dei dati per la tabella `users`
--

INSERT INTO `users` (`ID`, `username`, `password`, `mail`, `socio`, `admin`) VALUES
(1, 'fale', 'prova', 'fabiolocati', 1, 1),
(2, 'asd', 'asd', 'asd', 1, 1),
(3, 'prova', 'asd', '', 0, 0);

questo è il codice sql della tabella
quando uso
- user: fale
- pass: prova

va tutto... ma negli altri due casi non va... mi da "Nome utente o password sbagliata"

vizzz
06-12-2006, 22:54
prova a fare un po di debug, visualizzando cosa leggi da db nel ciclo while

if (($user == $db[username]) && ($pass == $db[password]))

e questo lo metterei così con la doppia &&

fale
06-12-2006, 22:58
il problema, per quanto mi sembra di capire, è nella query che controlla i dati...
...ma come ho detto sono un po' "lento" a capire, e quindi le prime 2-3 volta che faccio una cosa, non ci capisco assolutamente nulla.

PS: anche con la doppia, il risultato non cambia

vizzz
06-12-2006, 23:04
non so se può essere questo ma da manuale dice:

while ($riga = mysql_fetch_array($risultato, MYSQL_ASSOC)) {
printf ("ID: %s Nome: %s", $riga["id"], $riga["name"]);

quindi prova:
if (($user == $db["username"]) && ($pass == $db["password"]))
la query mi pare ok

fale
07-12-2006, 09:30
il risultato di questo:

while ($riga = mysql_fetch_array($risultato, $connessione)) {
print ('<br>ID: ');
print ($riga['ID']);
print ('<br>Nome: ');
print ($riga['username']);
print ('<br>Password: ');
print ($riga['password']);
}

è questo:

ID: 1
Nome: fale
Password: prova
ID: 2
Nome: asd
Password: asd
ID: 3
Nome: prova
Password: asd


quindi mi sa proprio che sia un problema di IF...

fale
07-12-2006, 09:46
scusate per il monologo...


....ma





FUNZIONA :D :D :D :D :D :D :D :D :D






ora, però avrei un altra domanda (è la prima volta che uso le sessioni...)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php
session_start();
require ('modules.php');
?>
<head>
<title>Assosecco - Pagina associati</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="keywords" content="">
<meta name="robots" content="INDEX,FOLLOW">
<meta name="resource-type" content="document">
<meta http-equiv="expires" content="0">
<meta name="author" content="Fabio Alessandro Locati">
<meta name="copyright" content="Copyright (c) 2006 by Assosecco">
<meta name="revisit-after" content="1 days">
<meta name="distribution" content="Global">
<meta name="rating" content="General">
<link rel="StyleSheet" title="default" href="skin/default/style/home.css" type="text/css">
</head>
<body>
<table cellpadding="0" cellspacing="0" width="98%" border="0" align="center">
<tr>
<td colspan="3" bgcolor="#FFFFFF" valign="top" align="center">
<?php
intestazione();
?>
</td>
</tr>
<tr>
<td width="150" bgcolor="#FFFFFF" valign="top" align="center">
<?php
col_sinistra();
?>
</td>
<td width="*" bgcolor="#FFFFFF" valign="top" align="center">
<?php
col_centrale();
?>
</td>
<td width="150" bgcolor="#FFFFFF" valign="top" align="center">
<?php
col_destra();
?>
</td>
</tr>
<tr>
<td colspan="3" bgcolor="#FFFFFF" valign="top" align="center">
<?php
piede();
?>
</td>
</tr>
</table>
</body>
con sto codice, mi da il seguente errore:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/assosecco/personale.php:2) in /var/www/assosecco/personale.php on line 3

fale
07-12-2006, 10:24
W il monologo...

cmq

ho risolto togliendo il DOCTYPE...

kk3z
07-12-2006, 11:13
W il monologo...

cmq

ho risolto togliendo il DOCTYPE...
Bastava mettere il session_start() prima del doctype :)