aiuto php

Pubblicità
Mi dai un esempio di sintassi tipo X scrivere un panel div che creo nella pagina web e lo apre se il tutto funziona??
 
non so se ho inteso bene, comunque se intendi se la query va a buon fine, dato che fetchAll() ritorna un array vuoto, se la non ci sono record, o false, puoi risolvere con un banale if:
PHP:
if (!empty($db->query()) || !$db->query() == false) {
    echo '<div class="panel">'.var_dump($db->query()).'</div>';
}
 
Ok perfetto ho capito... la query lavorava perfettamente...

Ho un ultima domandina poi penso di aver capito un sacco di cose e mi tocca solo sperimentare..

Se nella classe db facessi un metodo di login come posso richiamarlo dalla mia form??

Ovviamente si già come si recuperano i dati o almeno penso
 
Vedi il post #9.
Verifichi che l'array superglobale post non sia vuoto e richiami il metodo di login (che può essere statico o meno) della classe del db.

Appena ho un po' di tempo aggiorno il post con un po' di info in piu..

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
ok grazie mille sei gentilissimo perchè cosi sto apprendendo molte cose
 
Scusa se rompo ancora le scatole ma sto provando e non riesco a fare cio che dico

PHP:
$db = new dbconnect;
//var_dump($db->query());
$dbwork = "";
if (!empty($db->query()) || !$db->query() == false) {
    //echo '<div class="panel" id="panel1">'.var_dump($db->query()).'</div>';
    $loginerror = var_dump($db->query());
}
else{
    header("location: error.php");
}


ho creato questo div

HTML:
<div id="container">
            <img id="image" src="immagini/immaginiprova/background.png" />
            <p id="text">
                <?php echo $dbwork; ?>
            </p>
        </div>


con questo codice css

CSS:
#container {
    height: 1000px;
    width: 400px;
    position: relative;
}
#image {
    position: absolute;
    left: 0;
    top: 0;
}
#text {
    z-index: 100;
    position: absolute;
    color: white;
    font-size: 24px;
    font-weight: bold;
    left: 150px;
    top: 350px;
}


ma non riesco a stampare nel pannello il dump della query

come da immagine allegata

upload_2017-5-12_9-46-9.webp
 
Il var_dump serve per vedere nel dettaglio le informazioni relative ad una variabile. Si usa solo in fase di debug ovviamente.

Dalla foto che hai postato il dump della query è correttamente stampato ad inizio pagina (è tutte quelle scritte in grigio che vedi).

Se lo vuoi stampare dentro il container devi sostituire a
PHP:
echo $dbwork;
il dump
PHP:
var_dump($db->query());

Oppure salvi in una variabile la query (ad esempio all'interno della if)
PHP:
if (!empty($db->query()) || !$db->query() == false) {
    $loginerror = $db->query();
}
e poi fai il dump della variabile all'interno del div container
HTML:
<div id="container">
            <img id="image" src="immagini/immaginiprova/background.png" />
            <p id="text">
                <?php var_dump($loginerror); ?>
            </p>
        </div>
 
ok grazie mille ha funzionato correttamente, ovviamente mi serve per il debugging per vedere se vede il db correttamente..

ora finisco di impostare la mia form e provo il login
 
Vedi il post #9.
Verifichi che l'array superglobale post non sia vuoto e richiami il metodo di login (che può essere statico o meno) della classe del db.

Appena ho un po' di tempo aggiorno il post con un po' di info in piu..

Inviato dal mio Nexus 5 utilizzando Tapatalk

Mi autoquoto per aggiungere qualche info.


Una cosa importante nei form è quella di avere un token univoco che si aggiorna ad ogni caricamento/refresh della pagina.
Quindi ai form (tutti) dovrai aggiungere un campo di questo tipo:
HTML:
<input name="_token" value="" type="hidden">
Quindi dovrai crearti una classe token per gestirne la creazione e la verifica, che deve essere fatta prima di ogni altra cosa.

Poi, altra cosa importante, dovrai fare applicare un filtro a tutti i campi di input per fare il sanitize di tutti i campi di input.

Infine ti sarà fondamentale un'altra classe per gestire la sessione e i cookie.
 
ok io per i cookie etc ho trovato questo:

PHP:
function sec_session_start() {
    $session_name = 'sec_session_id'; // Imposta un nome di sessione
    $secure = false; // Imposta il parametro a true se vuoi usare il protocollo 'https'.
    $httponly = true; // Questo impedirà ad un javascript di essere in grado di accedere all'id di sessione.
    ini_set('session.use_only_cookies', 1); // Forza la sessione ad utilizzare solo i cookie.
    $cookieParams = session_get_cookie_params(); // Legge i parametri correnti relativi ai cookie.
    session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
    session_name($session_name); // Imposta il nome di sessione con quello prescelto all'inizio della funzione.
    session_start(); // Avvia la sessione php.
    session_regenerate_id(); // Rigenera la sessione e cancella quella creata in precedenza.
}

non ho capito la storia dei filtri, cosa devo mettere nelle input field...

ora proverò ad impostare una funzione di login, spero solo di riuscire a capire come richiamarla :) ahaha


ho anche un altro dubbio che mi assale

io ho creato un link

e li richiamo questa funzione javascript

JavaScript:
function change_form(){

    window.location.href = "../../register.php";
}


è corretto? o sul link devo usare x forza php?
 
Ultima modifica:
Il filtraggio degli input (cosa diversa dalla validazione) va fatto per evitare sql injection e xss.

un esempio di filtro è:
PHP:
class core
{

    function __construct()
    {
        # code...
    }

    public static function sanitize($string, $filter = null)
    {
        switch ($filter) {
            case 'none':
                return $string;
                break;

            case 'email':
                return filter_var($string, FILTER_SANITIZE_EMAIL);
                break;

            case 'string':
                return filter_var($string, FILTER_SANITIZE_STRING);
                break;

            case 'int':
                return filter_var($string, FILTER_SANITIZE_NUMBER_INT);
                break;

            case 'url':
                return filter_var($string, FILTER_SANITIZE_URL);
                break;

            default:
                return filter_var($string, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
                break;

        }
    }
}

per vedere la differenza con/senza l'applicazione del filtro prova ad aggiungere
PHP:
if (!empty($_POST)) {
    echo $_POST['username'];
}

alla pagina index.php, scrivere questa stringa nel campo username
HTML:
<script>alert('alert')</script>
e poi premere il bottone di login.. ti vedrai apparire un bel alert.

se invece filtri l'input con:
PHP:
if (!empty($_POST)) {
   echo core::sanitize($_POST['username'], 'string');
}
non succederà nulla (quasi, ti stamperà a video alert('alert'), ma non verrà eseguito il codice js).


Nel window.location.href non è necessario il php. L'unica cosa è che devi usare (se non ricordo male) il path assoluto (quindi http://xxxxx)
 
è corretto aver dichiarto qui la funzione:

upload_2017-5-12_15-29-15.webp


perchè a me l'alert lo stampa sempre all'avvio

la classe l'ho costruita cosi

PHP:
<?php
/**
* Created by PhpStorm.
* User: Christian
* Date: 11/05/2017
* Time: 12:13
*/

spl_autoload_register(function ($class)
{
    require_once 'scripts/php_scripts/' . $class . '.php';

});
//session_start();
class main {




    function sec_session_start()
    {
        $session_name = 'sec_session_id'; // Imposta un nome di sessione
        $secure = false; // Imposta il parametro a true se vuoi usare il protocollo 'https'.
        $httponly = true; // Questo impedirà ad un javascript di essere in grado di accedere all'id di sessione.
        ini_set('session.use_only_cookies', 1); // Forza la sessione ad utilizzare solo i cookie.
        $cookieParams = session_get_cookie_params(); // Legge i parametri correnti relativi ai cookie.
        session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
        session_name($session_name); // Imposta il nome di sessione con quello prescelto all'inizio della funzione.
        session_start(); // Avvia la sessione php.
        session_regenerate_id(); // Rigenera la sessione e cancella quella creata in precedenza.

    }

    public static function sanitize($string, $filter = null)
    {
        switch ($filter) {
            case 'none':
                return $string;
                break;

            case 'email':
                return filter_var($string, FILTER_SANITIZE_EMAIL);
                break;

            case 'string':
                return filter_var($string, FILTER_SANITIZE_STRING);
                break;

            case 'int':
                return filter_var($string, FILTER_SANITIZE_NUMBER_INT);
                break;

            case 'url':
                return filter_var($string, FILTER_SANITIZE_URL);
                break;

            default:
                return filter_var($string, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
                break;

        }
    }


}
 
La chiamata alla funzione sanitize è sbagliata.
Quella corretta:
PHP:
echo main::sanitize($_POST['username'], 'string');

Se nella pagina index c'è il form, allora va bene li.



l'alert dove lo hai scritto??

lo devi scrivere qua
Schermata del 2017-05-12 15:46:02.webp
e poi premere il bottone login
 
va scritto nel bottone??

io l'ho scritto in fondo alla pagina convinto andasse bene un posto qualsiasi


sarà che sono abituato a fare app web in altri linguaggi ma non ho mica capito dove metterlo

HTML:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
                                     <label for="username" style="font-family: foo; font-size: 12px; color:#FFD700;">Username or Email:</label><br><br>
                                     <input type="text" name="username" style="width:250px;">
                                    <script>alert('alert')</script><br><br>
                                     <label for="password" style="font-family: foo; font-size: 12px;color:#FFD700;">Password:</label><br><br>
                                     <input type="password" name="password"  style="width:250px;"><br><br>
                                     <label for="remember" style="font-family: foo; font-size: 12px;color:#FFD700;">Remember me!</label>
                                     <input type="checkbox" name="ricorda" value="ricordapass" checked><br>
                                     <input type="submit" value="Login" style="width:150px; font-family: foo;">
                                     <input name="_token" value="" type="hidden">
                                    
                                     </form>
 
niet.

qua la index.php
PHP:
<?php
require_once 'core/main.php';

$db = new dbmanager;
//var_dump($db->query());

//if (!empty($db->query()) || !$db->query() == false) {
//    echo '<div class="panel">'.var_dump($db->query()).'</div>';
//}

if (!empty($_POST)) {
    //echo $_POST['username'];
    echo core::sanitize($_POST['username'], 'string');
}

?>
<form action="" method="POST">
    <label for="username" style="font-family: foo; font-size: 12px;">Username or Email:</label><br><br>
    <input type="text" name="username" style="width:250px;"><br><br>
    <label for="password" style="font-family: foo; font-size: 12px;">Password:</label><br><br>
    <input type="password" name="password"  style="width:250px;"><br><br>
    <label for="remember" style="font-family: foo; font-size: 12px;">Remember me!</label>
    <input type="checkbox" name="ricorda" value="ricordapass" checked><br>
    <input type="submit" value="Login" style="width:150px; font-family: foo;">
    <input name="_token" value="" type="hidden">
</form>


quel codice (<script>alert()</script>) serve per far capire che io, malintenzionato, se un input non è filtrato e validato, posso far eseguire un qualsiasi codice javascript (o SQL) al tuo sito.
 
Pubblicità
Pubblicità
Indietro
Top