aiuto php

Pubblicità

Skills07

Head of Development
Staff Forum
Utente Èlite
Messaggi
39,476
Reazioni
13,356
Punteggio
253
Salve ragazzi

sono un programmatore web, ma non ho mai usato php.
Ora mi occorre per una società fare un sito web in Php, ma non capisco bene come funziona:

ad esempio io ho creato questa semplice form usando PhpStorm

HTML:
<div>
  <p>
                                <form action="formlog.php" method="post">
                                     <label for="username">Username or Email:</label><br><br>
                                     <input type="text" name="username" style="width:250px;"><br><br>
                                     <label for="password">Password:</label><br><br>
                                     <input type="password" name="password" id="password" style="width:250px;"><br><br>
                                     <label for="remember">Remember me!</label>
                                     <input type="checkbox" name="ricorda" value="ricordapass" checked><br>
                                     <input type="submit" value="Login" style="width:150px;">

                                   
                                     </form>
</div>


ovviamente la mia pagina si chiama index.php

poi ho creato una cartella script con dentro il file formlog.php

che contiene questo codice:
PHP:
<?php
/**
* Created by PhpStorm.
* User: Christian
* Date: 09/05/2017
* Time: 09:32
*/

// Recupero i valori inseriti nel form
$nome = $_POST['username'];
$msg = $_POST['password'];

// compilo un messaggio combinando i dati recuperati dal form
$testo = "Nome: " . $nome . "\n"

    . "Messaggio:\n" . $msg;

// uso la funzione mail di PHP per inviare questi dati al mio indirizzo di posta
mail(miamail@gmail.com', 'Messaggio dal mio sito web', $testo);

// Mostro un messaggio di conferma all'utente
echo 'Grazie per averci contattato!';
?>


però mi da errore 404 quando premo su submit
cosa ho dimenticato?

Sto cercando di capirne la logica
 
Mi sembra scontato dirti che il php deve girare su un server dove risiede apache o lighttpd o nginx con il modulo per php.
Quindi l'index.php dovrebbe stare sulla root del webserver, di solito /var/www/html o simili.
Fatta questa premessa, formlog.php si trova sullo stesso livello di index.php ?
No, è dentro script/formlog.php.
Quindi devi correggere
<form action="formlog.php" method="post">
in
<form action="script/formlog.php" method="post">
 
Mi sembra scontato dirti che il php deve girare su un server dove risiede apache o lighttpd o nginx con il modulo per php.
Quindi l'index.php dovrebbe stare sulla root del webserver, di solito /var/www/html o simili.
Fatta questa premessa, formlog.php si trova sullo stesso livello di index.php ?
No, è dentro script/formlog.php.
Quindi devi correggere
<form action="formlog.php" method="post">
in
<form action="script/formlog.php" method="post">


Intanto grazie per la risposta

ovviamente sto lavorando da pc che è la mia macchina di sviluppo e va provato tutto qua prima di mettere su server.

Ho installato xampp e avviato apache...

ho il database mysql su questa macchina perchè dovrà usare quello che è lo stesso dei nostri videogiocatori..
Sto facendo il sito del nostro videogioco
 
certo ho sistemato quella cosa....

il problema comunque è il fatto che da quello che ho capito
la pagina va dichiarata in formato php
e il codice da eseguire va dichiarato nella pagina

io chiedo e x lanciare altri script php presenti in una folder scripts come si fa??
 
certo ho sistemato quella cosa....

il problema comunque è il fatto che da quello che ho capito
la pagina va dichiarata in formato php
e il codice da eseguire va dichiarato nella pagina

io chiedo e x lanciare altri script php presenti in una folder scripts come si fa??

in che senso? non capisco il problema.
Il codice php deve stare su un documento .php altrimenti non viene eseguito dal webserver.
Se hai una index.php e all'interno devi includere altri file php lo fai con include('file.php');
 
certo ho sistemato quella cosa....

il problema comunque è il fatto che da quello che ho capito
la pagina va dichiarata in formato php
e il codice da eseguire va dichiarato nella pagina

io chiedo e x lanciare altri script php presenti in una folder scripts come si fa??

A parte la funzionalità di include/require di un file php (e non), c'è anche una comoda funzione per fare l'autoload delle classi (spl_autoload_register).
Dipende però come vuoi organizzare il sito.. Il modo più comodo (IMHO) è quello di organizzare gli script in classi/funzioni in modo da poterli richiamare in ogni pagina php in modo agevole (ad esempio crei una pagina init.php dove imposti l'autoload delle classi e nelle pagine, tipo la index.php, importi solamente il file init.php), anche perchè inserire in ogni pagina tutti gli include/require diventa un incubo da gestire/mantenere/espandere se devi inserire molte funzionalità/script vari.
 
ecco la tua è una risposta esuadiente e che spiega cosa fare...
perchè chiaramente io devo impostare una connessione a database mysql
e non posso permettermi di averla in ogni pagina...

la domanda che chiedo è se dove creo lo script php con la connessione al db, la funzione register, la funzione login,

nella mia form di registrazione o login come richiamo questa funzione??

cioe ad esempio il mio sito è strutturato cosi:

-css
-scripts/phpscript/dbmanager.php(con funzione connesione al db, reg,log)
-index.php
-register.php

e mettiamo caso che

in index.php ho questa form di login
HTML:
<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;">

                                    
                                     </form>


su form action come richiamo lo script scritto in scripts/phpscript/dbmanager.php??
 
Premessa: questo è solo un esempio di come potrebbe essere strutturato e ovviamente si può fare in altri modi.

La struttura potrebbe essere di questo tipo:

index.php
login.php
-core/
--main.php
-script/
--dbmanager.php

Nel file core/main.php inizializzi la sessione e ci carichi le classi
PHP:
<?php
session_start();

spl_autoload_register(function ($class){
    require_once 'script/' . $class . '.php';
});

?>
In questo modo tutte le classi che inserirai nella cartella script saranno automaticamente caricate.


nel file script/dbmanager.php crei una classe (costruttore con la connessione al database) e le varie funzioni
PHP:
class DB
{
    private $_pdo

    private function __construct()
    {
        try {
            $hostname = "hostname";
            $dbname = "dbname";
            $user = "nome_utente";
            $pass = "password";
            $this->_pdo = new PDO('mysql:host=' . $hostname . ';dbname=' . $dbname, $user, $pass);

        } catch (PDOException $e) {
            die($e->getMessage());
        }
    }
    
   public static funcion login($username, $password)
   {
        //fai il login
   }

}

Ora per richiamare tutte queste funzioni ti basta importare il file main.php

Per quanto riguarda la funzione di login nella pagina index.php, puoi anche gestirla nella stessa pagina (index.php) lasciando la voce action del form vuoto
PHP:
<?php
require_once 'core/main.php';

if (!empty($_POST)) {
   //Richiami la funzione login e fai il login
   DB::login();
} else {
   //Redirect
   header("location: errore.php");
}
?>

<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;">
</form>


Personalmente comunque preferisco tenere le funzionalità il più possibile separate, quindi nella classe DB non metterei le funzioni di login/registrazione/logout. Per quelle creerei una nuova classe (user ad esempio) e le imposterei li (dato che puoi utilizzare le funzionalità della classe DB nella classe USER e viceversa).

PS. Il codice non è testato.
 
ok grazie mille, per ora sto finendo di sistemare la grafica.
Anche io come te amo rendermi le cose semplici e usare classi e metodi e avere codice meno lungo e più preciso(programmo Java/Android).
Anche nelle app-web tendo ad avere meno codice possibile(aspx,vb.net).

Vediamo come me la caverò con php mai fatto prima :)

Grazie comunque
 
scusami il disturbo

sto seguendo diciamo la struttura che mi hai dato e mi piace un sacco ho capito bene come funziona..

io ora ho creato questo:

PHP:
<?php
class DB
{
    private $_pdo;

    private function __construct()
    {
        try {
            $hostname = "localhost";
            $dbname = "miodb";
            $user = "root";
            $pass = "123root";
            $this->_pdo = new PDO('mysql:host=' . $hostname . ';dbname=' . $dbname, $user, $pass);

        } catch (PDOException $e) {
            die($e->getMessage());
        }
    }



}


io vorrei che nella mia index.php si connettesse al db

e che quando premo su login parta la funzione di login

cose devo fare??

nella index.php cosa devo richiamare x vedere se si connette al db correttamente o altrimenti lanciare la pagina 404??
 
Prima di tutto riguardando il codice che ho postato, ho visto un errore molto grosso:
Per caricare correttamente le classi, con il codice inserito nel file main, il nome del file.php della classe deve essere uguale al nome della classe. Ad esempio la classe DB deve stare nel file DB.php (è case sensitive).

Il codice della classe DB che ti ho postato, è pensato per lavorare internamente alla classe/classi e non nelle pagine, infatti se vedi bene sia la funzione costruct è private. Per utilizzare nelle varie pagine la classe DB il costruttore della classe non può essere privato.

Per quanto riguarda il redirect se non c'è la connessione con il db, basta inserire il redirect nella catch:

file dbmanager.php
PHP:
class dbmanager
{
    private $_pdo;

    function __construct()
    {
        try {
            $hostname = "localhost";
            $dbname = "miodb";
            $user = "root";
            $pass = "123root";
            $this->_pdo = new PDO('mysql:host=' . $hostname . ';dbname=' . $dbname, $user, $pass);

        } catch (PDOException $e) {
            header("location: errore.php"); //Se c'è un errore nella connessione fai il redirect
        }
    }

    public function query()
    {
        $sql = $this->_pdo->prepare('SELECT * FROM users');
        $sql->execute();
        $res = $sql->fetchAll();
        return $res;
    }
}

file index.php
Codice:
<?php
require_once 'core/main.php';

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

?>

<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;">
</form>


PS. Ho aggiunto la funzione query() solamente per vedere se funzionava tutto.
 
risolto era dbconnection invece di dbmanager non l'ho cambiato...

domanda banalissima ho visto che mi stampa la query e ok quindi vede il db,

ma se io volessi fare dei test e non stampare a video ma altrove???
 
Pubblicità
Pubblicità
Indietro
Top