• User

    Problema di sessioni?

    Salve,
    sono un super niubbo del php ma mi piace capire le cose e sperimentare.
    Volevo da voi un parere su un problema strano chemi sta capitando.
    Ho modificato uno script di inserimento annunci secondo le mie necessità, ha sempre funzionato tutto alla perfezione ma è da un po' di tempo che è comparso un problema strano, strano perchè compare da solo senza che nessuno modifichi nulla, dura X tempo (da parecchi minuti fino a un'ora).. poi sparisce e tutto torna nella norma.
    Il problema è questo:
    inserisco un annuncio trami un form che passa i valori con la funzione POST. Una volta compilato il form con i dati si inviano, il db li scrive e si arriva alla pagina con il sommario dei dati dove, dalla stessa, posso poi inserire le immagini.
    Quando capita il problema dopo aver compilato il form e premuto "invia".. fa un refresh della stessa pagina ... quindi non ha inviato nulla.
    Ho dato colpa alle sessioni perchè se provo e riprovo a ripetizione dà sempre errore, se faccio passare del tempo.. generalmente (ma non sempre) . l'annuncio viene inserito correttamente.
    Non posto il codice perchè mi piacerebbe avere una dritta generale sul problema secondo la vostra esperienza.
    Vi ringrazio.
    Andrea


  • User Attivo

    Ciao,
    potrebbe essere qualche variabile che viene memorizzata in sessione, poi se la sessione scade (ovvero se passa il tempo massimo di durata della sessione) la variabile in sessione viene persa e quindi tutto funziona. Però così senza informazioni supplementari è molto difficile dare una risposta giusta, come ho ipotizzato potrebbe essere una variabile mantenuta in sessione che magari memorizza un errore e che fa si che venga stampata sempre la stessa pagina e solo quando la sessione scade ti fa proseguire, ma potrebbero essere tante altre cose.

    Spero di essere stato chiaro.


  • User

    @codencode said:

    Ciao,
    potrebbe essere qualche variabile che viene memorizzata in sessione, poi se la sessione scade (ovvero se passa il tempo massimo di durata della sessione) la variabile in sessione viene persa e quindi tutto funziona. Però così senza informazioni supplementari è molto difficile dare una risposta giusta, come ho ipotizzato potrebbe essere una variabile mantenuta in sessione che magari memorizza un errore e che fa si che venga stampata sempre la stessa pagina e solo quando la sessione scade ti fa proseguire, ma potrebbero essere tante altre cose.

    Spero di essere stato chiaro.

    Ciao, grazie della risposta 🙂
    Nella mia ignoranza da niubbo ho pensato a qualcosa del genere però il problema avviene random e.. quando capita.. non ha tempistiche. Mi spiego.. che passino 10 secondi o 20 minuti nella sessione il problema avviene comunque. Non saprei. Sembra quasi che si """intasi""" qualcosa perchè, pare, avvenire più frequentemente quando si inseriscono tante schede in poco tempo.. dopo un po' avviene il problema.


  • User Attivo

    Ciao,
    allora sarà qualche problema relativo a qualche controllo, verifica il codice e testalo in varie situazioni, ovvero sia quando riempi tutti i campi sia quando ne lasci qualcuno vuoto, potrebbe infatti essere che qualche campo non viene valorizzato.


  • User

    @codencode said:

    Ciao,
    allora sarà qualche problema relativo a qualche controllo, verifica il codice e testalo in varie situazioni, ovvero sia quando riempi tutti i campi sia quando ne lasci qualcuno vuoto, potrebbe infatti essere che qualche campo non viene valorizzato.

    Grazie della risposta e della pazienza.
    Ho provato, ma non cambia nulla.
    Ti dirò un'altra cosa strana che è successa.

    Per accedere la pannello di controllo (pannello.php) si deve fare il login (login.php).
    Ora da "login.php" non accetta i dati inseriti, clicco su "ok" e fa solo un refresh, mentre se vado direttamente "pannello.php" (da non loggato), mi ripropone il login ma sempre su "pannello.php" e da lì accetta tranquillamente i dati inseriti e si procede.
    E ultima cosa... con IE non riesco più a fare nessun login, nè in questo sistema nè in joomla.Ho già disinstallato e reinstallato Java, IE, ma senza risultato... boh


  • User Attivo

    Ciao,
    così senza osservare il codice non mi viene nulla da poterti suggerire, al limite controlla l'action dei form.
    Ma il form di login presentato in pannello.php è lo stesso della pagina login.php? ovvero viene inclusa la stessa pagina login.php, oppure è un form diverso?


  • User

    Ciao,
    tutte e due le pagine includono un terza pagina "secure.php" che controlla la validità dei dati formiti e genera la sessione... Almeno mi pare dalla mia ignoranza in php 😞
    Grazie ancora


  • User

    Rieccomi...
    Allora come sempre il problema è scomparso e poi, random comparso di nuovo.
    Provo a postarvi il codice delle pagine:

    LOGIN.PHP

    <html>
    <head>
    <title>Login</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link href="css/default.css" rel="stylesheet" type="text/css">
    <script language='JavaScript' src='functions.js'></script>
    </head>

    <body>
    <table class='trim' width=700 height=400 border=0 cellpadding=3 cellspacing=0><tr><td align='center' valign='middle'>
    <?=$error?>
    <form action='<?=$PHP_SELF?>' method=post onSubmit='return checkrequired(this)'>
    <table class='trim' width=350 border=0 cellpadding=5 cellspacing=0>
    <tr><td class='highlight' align='center' colspan=2><b>Login pannello di controllo</b></td></tr>
    <tr class='fill'><td height=1 colspan=2><!-- LINE --></td></tr>

    <tr><td width=135 class='text' align='right'>Username</td><td><input class='text' type=text name='username' alt='required'></td></tr>
    <tr><td class='text' align='right'>Password</td><td><input class='text' type=password name='password' alt='required'></td></tr>
    
    <tr class='fill'><td height=1 colspan=2><!-- LINE --></td></tr>
    
    <tr><td colspan=2 align='center'>
    <input class='text' type=button value='Cancella' onClick="window.location='index.php';">
    <input class='text' type=submit value='Ok'></td></tr>
    

    </table>
    </form>

    </td></tr></table>
    <table width=700 border=0 cellpadding=5 cellspacing=0><tr><td align='center'><? require 'footer.php'; ?></td></tr></table>

    </body>
    </html>

    SECURE

    <?

    require 'config/config.php'; // FOR DATABASE ACCESS

    // JUMP-TO PAGES
    $jump_login = 'login.php';
    $jump_logout = 'index.php';

    session_start();

    // IF LOGGING OUT
    if($logout) {
    session_destroy();
    echo "<script language='JavaScript'>window.location='$jump_logout'</script>";
    exit();
    }
    // ALREADY LOGGED IN
    elseif(isset($HTTP_SESSION_VARS['access'])) {
    //$userid = $HTTP_SESSION_VARS['cmonkey_userid']; // MAKE USERNAME ACCESSIBLE
    }
    // LOGGING IN
    elseif(isset($HTTP_POST_VARS['username']) && isset($HTTP_POST_VARS['password'])) {

    // CHECK FOR USER IN DATABASE
    $link = mysql_connect($dbhost, $dbuser, $dbpass);
    $query = "SELECT username, password FROM $dbcfg WHERE username='$username' AND password='$password'";
    $result = mysql_db_query($dbname, $query, $link);
    $found = @mysql_num_rows($result); //echo "$found"; // TEST
    
    if($found) { // IF A MATCH HAS BEEN FOUND
    	$HTTP_SESSION_VARS['access'] = true;
    	
    	mysql_close($link);		
    } else {
    	$error = "<font class='text'><b>Errore: Username e/o Password errati</b></font><br><br>";
    	mysql_close($link);
    	include($jump_login);
    	exit();
    }
    

    }
    // NOT LOGGED IN YET
    else {
    include($jump_login);
    exit();
    }
    ?>

    *** FUNCTIONS.JS ***

    // JavaScript Document

    // verify required fields
    function checkrequired(form) {
    var pass = true;
    for(i = 0; i < form.length; i++) {
    var tempobj = form.elements*;
    if(tempobj.alt == "required") {
    if(tempobj.value == '') {
    pass = false;
    break;
    }
    }
    }
    if(!pass) {
    alert("Please enter the required information.");
    tempobj.focus(); // set focus to missing field
    return false;
    }
    else { return true; }
    }

    // image swap for view page
    function swap(target, fname) {
    document[target].src = "images/" + fname;
    }

    // make sure at least one search criteria has been provided
    function checksearch(form) {
    var count = 0;

    for(i = 0; i < form.length; i++) {
    	var tempobj = form.elements*;
    	if(tempobj.value == '') {
    		count++;
    	}
    }
    i-=2;
    if(count == i) {
    	alert("Non hai inserito alcun criterio di ricerca.");
    	return false;
    }
    else {
    	//alert("You DID enter search criteria." + count + "  " + i);
    	return true;
    } 
    

    }

    // confirm removal of vehicle listing
    function verify_removal(ccode) {
    msg = "Are you sure you want to remove this vehicle listing?";
    if(confirm(msg)) {
    window.location='cancella.php?ccode=' + ccode;
    } else {
    return false;
    }
    }

    // confirm removal of image from vehicle listing
    function verify_image(imageid, ccode) {
    msg = "Are you sure you want to remove this image?";
    if(confirm(msg)) {
    window.location='removeimg.php?id=' + imageid + '&ccode=' + ccode;
    } else {
    return false;
    }
    }

    // display invalid stock number message
    function invalid_stock(stock) {
    msg = "The stock number " + stock + " appears to be invalid.";
    if(confirm(msg)) {
    window.location='pannello.php';
    } else {
    window.location='pannello.php';
    }
    }

    Grazie a tutti se vi viene in mente qualche dritta 🙂


  • User

    Forse ho capito l'arcano...
    Al momento di aggiungere una scheda fa un controllo su un campo vedendo se è già esistente o meno...
    Posto il codice....
    Come posso eliminare questo controllo (per me inutile) ?
    Grazie ancora

    if($stock) {
    // check to see if the stock number entered already exists in db
    $link = mysql_connect($dbhost, $dbuser, $dbpass);
    $query = "SELECT id FROM $dbvin WHERE stock='$stock'";
    $result = mysql_db_query($dbname, $query, $link);
    if(mysql_num_rows($result)) {
    echo "<script language='JavaScript'> alert('The stock number you entered already exists in the database.'); </script>";
    } else {
    // make input query friendly
    foreach($_POST as $key => $value) {
    $_POST[$key] = addslashes($value);
    }

    	// add listing to database
    	$time = time();
    	$ccode = substr(time().rand(10000,99999),-15);
    	
    	$link = mysql_connect($dbhost, $dbuser, $dbpass);
    	$query = "INSERT INTO $dbvin VALUES('0',
    	'$ccode',
    	'$time',
    	'$time',
    	'0',
    	'0',
    	'$_POST[stock]',
    ecc ecc ecc

  • User

    Avevo dimenticato nella rimozione una graffa..pare tutto ok...