Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    19

    echo interrompe layout html

    ciao a tutti,
    mi sono accorta di avere un problema nella mia pagina di login, un problema relativo all'impaginazione.

    ci� sorge quando inserisco una dato errato in uno dei due campi, nome utente o password. ovviamente l'istruzione echo, che viene richiamata da un if, fa il suo lavoro, ovvero stampa a video l'istruzione che avvisa dell'errore, ma cos� facendo mi blocca il flusso della pagina, quindi non mi � possibile per esempio scorrere verso il basso.


    ecco il codice:

    codice:
    come posso risolvere questa situazione?
    
    
    <?php
    // Includo la connessione al database
    require('config.php');
    
    
    
    
    // Se il modulo viene inviato...
    if(isset($_POST['login']))
    {
    
    
     
        // Dati Inviati dal modulo
        $user = (isset($_POST['user'])) ? trim($_POST['user']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato d� di default ''
        $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : '';    // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato d� di default ''
        
    	// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
        if (!get_magic_quotes_gpc()) {
            $user = addslashes($user);
            $pass = addslashes($pass);
    
    
        }
        
        // Crypto la password e la confronto con quella nel database
        $pass = md5($pass);
        
        // Controllo l'utente esiste
        $query = mysql_query("SELECT id FROM utenti WHERE user = '$user' AND pass = '$pass' LIMIT 1");
    	
        // Se ha trovato un record
        if(mysql_num_rows($query) == 1)
        {
        
    	   // prelevo l'id dal database
            $login = mysql_fetch_array($query);
          
            // Creo una variabile di sessione
            $_SESSION['login'] = $login['id'];
    	
    		// reindirizzo l'utente
            header('Location: privata.php');
            exit;
    
    
    		
        }
        // se non esiste da l'errore
        else {
    
    
    echo('<div style="position:absolute;width:80%;left:50%;margin-left:-40%;
    	  top:500px;text-align:center; z-index:999999">
    	  <b>Nome Utente o Password errati</b>
             </div>');}
    
    
    }
    ?>
    
    <!DOCTYPE html>
    <html lang="it">
    
    
    <head><title></title><head><body>
    
    ... form html per il login...
    
    </body></html>

    ho letto che dovrei concatenare il codice php con quello html, "spezzando" un if in qualcosa tipo

    codice:
    <?php if ($ciao == 6){ ?>
    codice html
    < ? echo 'Nome Utente o Password errati; } ?>

    ma non riesco a farlo! o meglio, se spezzo il codice dal primo if, funziona, ma si blocca la connessione al database e lo script non mi rimanda alla pagina private.php; ho provato con l'ultimo if e funziona, la pagina, mentre mostra l'errore, scorre fino al footer, ma se rientro nella pagina, quest'ultima si presenta come se fosse priva di css...

    qualcuno mi pu� aiutare? povera me, sono disperata

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    fai così:
    Codice PHP:
    <?php

    ...bla bla
    if(mysql_num_rows($query) == 1){
       ...
    bla bla
    }else{
       
    $error 'Nome Utente o password errati';
    }
    ...
    bla bla
    ?>
    <!DOCTYPE html>
    <html lang="it">
    <head><title></title><head><body>
    ... form html per il login...

    <!-- dove ti pare -->
    <?php if(isset($error)):?>
    <div style="position:absolute;width:80%;left:50%;margin-left:-40%; top:500px;text-align:center; z-index:999999">
         <b><?php echo $error ?></b>
    </div><?php endif ?>


    </body></html>
    Ultima modifica di boots; 12-10-2016 a 09:08

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    19
    Quote Originariamente inviata da boots Visualizza il messaggio
    fai così:
    Codice PHP:
    <?php

    ...bla bla
    if(mysql_num_rows($query) == 1){
       ...
    bla bla
    }else{
       
    $error 'Nome Utente o password errati';
    }
    ...
    bla bla
    ?>
    <!DOCTYPE html>
    <html lang="it">
    <head><title></title><head><body>
    ... form html per il login...

    <!-- dove ti pare -->
    <?php if(isset($error)):?>
    <div style="position:absolute;width:80%;left:50%;margin-left:-40%; top:500px;text-align:center; z-index:999999">
         <b><?php echo $error ?></b>
    </div><?php endif ?>


    </body></html>


    grande Boots!! funziona!

    avevo provato con la variabile, ma non riportavo l'istruzione if, come hai fatto tu!! <3

    grazie mille!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    19
    Quote Originariamente inviata da boots Visualizza il messaggio
    fai così:
    Codice PHP:
    <?php

    ...bla bla
    if(mysql_num_rows($query) == 1){
       ...
    bla bla
    }else{
       
    $error 'Nome Utente o password errati';
    }
    ...
    bla bla
    ?>
    <!DOCTYPE html>
    <html lang="it">
    <head><title></title><head><body>
    ... form html per il login...

    <!-- dove ti pare -->
    <?php if(isset($error)):?>
    <div style="position:absolute;width:80%;left:50%;margin-left:-40%; top:500px;text-align:center; z-index:999999">
         <b><?php echo $error ?></b>
    </div><?php endif ?>


    </body></html>

    ciao Boots,
    il codice che mi hai postato va benissimo, quindi l'ho inserito anche nella pagina di registrazione. qui ho però dei problemi: l'ho variato un po', poiché avendo più condizioni, in caso di errore le stringhe a video ovviamente si sovrappongono, quindi ho scritto così:

    codice:
    <?php
    	if($nome == ""){$error_nome_1 = "Campo nome non compilato!"; }
    	
    
    	if(strlen($nome) < 3 )
    	{$error_nome_2 = 'Il campo nome deve contenere almeno 3 caratteri!';  } 
    
    
    	if(strlen($nome) > 20 )
    	{$error_nome_3 = 'Il campo nome deve contenere massimo 20 caratteri!';  } 
    	
    
    	if (is_numeric($nome)) 
            $error_nome_4 = 'Numeri non ammessi nel campo nome!';
    
    
    	elseif (!preg_match('/^[A-Za-z àèéìòù\']+$/i', $nome)) {
    		$error_nome_5 = 'Il nome inserito contiene caratteri non ammessi!'; }
    
    ecc...
    
    <html> ecc... 
    	<?php 
    		echo '<center>';
    		if(isset($error_nome_1))
    		echo $error_nome_1.'<br>';
    		if(isset($error_nome_2))
    		echo $error_nome_2.'<br>';
    		if(isset($error_nome_3))
    		echo $error_nome_3.'<br>';
    		if(isset($error_nome_4))
    		echo $error_nome_4.'<br>';	
    		if(isset($error_nome_5))
    		echo $error_nome_5.'<br>';	
    	echo '<br></center>';
    	?>
    
    form html
    </html>

    allora, se non scrivo nulla nel campo nome, il codice correttamente mi stampa a video la variabile $error_nome_1, se scrivo un numero, tramite is_numeric mi segnala l'errore, mentre tutte le altre variabili hanno dei problemini.

    strlen viene ignorato, completamente, solo se scrivo

    codice:
    if(strlen($nome) < 3 )
    	{echo 'Il campo nome deve contenere almeno 3 caratteri!'; exit() }
    l'errore viene riportato, ma su pagina bianca...

    preg_match funziona, ma se il mio utente scrive per esempio cinque apostrofi o quattro dash, non mi segnala l'errore...

    sai dirmi dove sbaglio? grazie mille!

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    19
    Quote Originariamente inviata da Vam Visualizza il messaggio
    Solo un appunto: stai eseguendo preg_match solo se non è numerico. Io eseguirei un controllo per volta, il che ti semplificherebbe la variabile a $error_nome

    Il resto del codice lo guardo stasera, se avrai ancora bisogno.

    PS: aggiungi ó.
    Si ok, allora attendo una tua risposta! Grazie mille!

  6. #6
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Per prima cosa, invece di usare n variabili, usa un array:
    Codice PHP:
    <?php
      $error 
    = array(); // o $error = []; se hai una versione di php recente
      
    if(trim($nome) == ''){
         
    $error[] = 'Campo non compilato';
      }

      if(
    strlen($nome) < 3){
        
    $error[] = 'Il Campo deve contenere almeno 3 caratteri';
      }

      
    etc..
    ?>

    <html>
       <?php 
          
    if(!empty($error)){
             echo  
    '<center>';
             echo 
    implode('<br/>'$error);
            echo  
    '</center>';
          }
       
    ?>
    </html>
    Per il preg_match, prova così:
    Codice PHP:
     if (!preg_match('/^[A-Za-z|àèéìòù\'\s]+$/i'$nome)) {
        
    $error[] = 'Il Campo contiene caratteri non ammessi';

    Dovrebbe prenderti tutte le lettere (maiuscole o minuscole) + le accentale, apice e spazio

    PS: il controllo dei strlen nel tuo codice (quello che hai postato) funziona (ovviamente ho assegnato una stringa a $nome 'a mano')
    Ultima modifica di boots; 12-10-2016 a 19:27

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    19
    Quote Originariamente inviata da boots Visualizza il messaggio
    Per prima cosa, invece di usare n variabili, usa un array:
    Codice PHP:
    <?php
      $error 
    = array(); // o $error = []; se hai una versione di php recente
      
    if(trim($nome) == ''){
         
    $error[] = 'Campo non compilato';
      }

      if(
    strlen($nome) < 3){
        
    $error[] = 'Il Campo deve contenere almeno 3 caratteri';
      }

      
    etc..
    ?>

    <html>
       <?php 
          
    if(!empty($error)){
             echo  
    '<center>';
             echo 
    implode('<br/>'$error);
            echo  
    '</center>';
          }
       
    ?>
    </html>
    Per il preg_match, prova cos�:
    Codice PHP:
     if (!preg_match('/^[A-Za-z|������\'\s]+$/i'$nome)) {
        
    $error[] = 'Il Campo contiene caratteri non ammessi';

    Dovrebbe prenderti tutte le lettere (maiuscole o minuscole) + le accentale, apice e spazio

    PS: il controllo dei strlen nel tuo codice (quello che hai postato) funziona (ovviamente ho assegnato una stringa a $nome 'a mano')
    Boots, grazie <3 sei un tesoro!!!

    funziona tutto perfettamente, tranne l'apostrofo nel preg_match! quindi per esempio, l'utente d'anna non riesce a registrarsi. � possibile secondo te fare in modo che un utente non scriva due o pi� apostrofi di seguito?

    per chiarirmi, l'utente d'anna dell'amore deve potersi registrare (mica � colpa sua se ha due cognomi con l'apostrofo!!! ), l'utente ''''' non deve iscriversi...

    con il preg_match che avevo usato io, se scrivevo ''''''' mi dava questo errore:
    codice:
    You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near... at line 1
    specifico che invece il tuo preg_match non mi da questo errore, fortunatamente! pi� che altro non vorrei che il mio utente imbranato che scrive d''ambrosio (con due apostrofi) si trovasse spiazzato leggendo un'istruzione che non capisce.

    ho provato cos�:
    codice:
     preg_match('/^[A-Za-z|������\s]+(\'){2}$/i'
    ma non va, cercando in rete ho trovato:

    http://stackoverflow.com/questions/7...-allow-a-z-and

    codice:
    <?php
    
    $data = array(
        // Valid
        'Jim',
        'John',
        "O'Toole",
        'one-two',
        "Daniel'Blackmore",
    
        // Invalid
        ' Jim',
        'abc123',
        '$@#$%@#$%&*(*&){}//;;',
    
    );
    
    foreach($data as $firstname){
        if( preg_match("/[^a-zA-Z'-]+/",$firstname)){
            echo 'Invalid: '. $firstname . PHP_EOL;
        }else{
            echo 'Valid: '. $firstname . PHP_EOL;
        }
    }... stampe:
    Valid:Jim
    Valid:John
    Valid: O'Toole
    Valid: one-two
    Valid: Daniel'Blackmore
    Invalid:Jim
    Invalid: abc123
    Invalid: $@#$%@#$%&*(*&){}//;;
    quindi l'apostrofo non necessita di trattamenti speciali nelle regex. bene, anzi male, perch� l'utente che vuole spammare scriver� ''''' e si registrer� come tale! aiuto! sto sclerando e non ho il ciclo (quello while, intendevo :P )...

  8. #8
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Credo che sia un po' complicato verificare se un utente scriva 'bene' (se ci pensi uno potrebbe iscriversi come 'ùbsdrèàeewè' )...l'unica cosa che mi viene in mente, visto che il tuo problema è l'apice è fare:

    Codice PHP:
    elseif (!preg_match('/^[A-Za-z|àèéìòù\'\s]+$/i'$nome) || preg_match('/\'{2,}$/i',$nome)) { 
    Il secondo trova sequenze di due o più apici.

    Per il problema con il db, fai l'escape prima di inviare la query?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.