PHP - PHP multi idioma y con seguridad de inicio de sesión

 
Vista:
Imágen de perfil de Miguel

PHP multi idioma y con seguridad de inicio de sesión

Publicado por Miguel (9 intervenciones) el 09/01/2023 12:45:50
Hola, tengo un problema con una web multiidioma que estoy realizando con PHP, estoy trabajando de la siguiente manera.

Tengo la siguiente estructura:

From:
• Solicitud.php
Lang:
• es.php
• en.php
• pt.php
php
• language.php
• global.php
index.php

En el fichero global.php tengo el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
//Restringimos las sesion apra los usuarios verificados
session_start();
if (!isset($_SESSION['verificado'])) {
	header('location: ../index.php');
}
 
 
// cargamos la conexion con la base de datos
include '../php/conn.php';
 
//agustamos la codificacion de caracteres
header('Content-Type: text/html; charset=utf-8');
 
//variables de consulta a la base de datos
$sectores = $link -> query("SELECT * FROM sectores ORDER By sector ASC;");
$companysize = $link -> query("SELECT * FROM copmanysize ORDER By idsize ASC;");


En el fichero language.php lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
    session_start();
 
 
if (!isset($_SESSION['lang']))
	$_SESSION['lang'] = "es";
else if (isset($_GET['lang']) && $_SESSION['lang'] != $_GET['lang'] && !empty($_GET['lang']))
{
	if ($_GET['lang'] == "es")
		$_SESSION['lang'] = "es";
	else if ($_GET['lang']  == "en")
        $_SESSION['lang'] = "en";
    else if ($_GET['lang']  == "pt")
		$_SESSION['lang'] = "pt";
}
 
require_once "lang/" . $_SESSION['lang'] . ".php";

Ahora bien, mi web tiene en el index.php un campo donde el cliente pone su correo y se le envía un código a su correo, entonces el cliente escribe ese código en el campo que aparece en el index y le redirecciona a la página solicitud.php

En index.php existe un selector de idioma. Mi index.php es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
    include "php/language.php";
    include "php/version.php";
 
 
    $idioma = $_SESSION['lang'];
?>
 
 
<!DOCTYPE html>
<html lang="<?php echo $_SESSION['lang']; ?>">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css">
    <link href="css/main.css" rel="stylesheet" type="text/css">
    <title><?php echo $lang['title'] ?></title>
</head>
 
<body>
 
    <input type="hidden" id="idioma" value="<?php echo $idioma; ?>">
    <div class="login container-fluid p-0">
        <div class="login__card">
            <div class="login__form form bg-light shadow">
                <div class="row">
                    <div class="login__section login__section--logo">
                        <img src="img\logo_km_3d_vertical.png" class="logo logo--konica">
                    </div>
                    <div class="login__section login__section--form">
                        <h1 class="login__title"><?php echo $lang['title'] ?></h1>
                        <div class="alert login__alert" role="alert"></div>
                        <div class="mb-3">
                            <label id="lbl"><?php echo $lang['messageEmail'] ?></label>
                            <input name="salesmail" type="text" id="mail" class="form-control">
                        </div>
                        <button id="submit" class="btn  float-end login__submit"><?php echo $lang['buttomRequest'] ?></button>
 
                    </div>
                    <div class="dropdown-center">
                        <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
                            <?php
 
                                if ($idioma == 'es') {
                                    echo $lang['es'];
                                } elseif ($idioma == 'en') {
                                    echo $lang['en'];
                                } elseif ($idioma == 'pt') {
                                    echo $lang['pt'];
                                }
 
                            ?>
                        </button>
                        <ul class="dropdown-menu">
                            <li><a class="dropdown-item" href="index.php?lang=es"> <?php echo $lang['es'] ?></a></li>
                            <li><a class="dropdown-item" href="index.php?lang=en"> <?php echo $lang['en'] ?></a></li>
                            <li><a class="dropdown-item" href="index.php?lang=pt"> <?php echo $lang['pt'] ?></a></li>
                        </ul>
                    </div>
                    <div class="login__section login__section--alert">
                        <div class="mb-3">
                        <p class="login__message"><?php echo $lang['messageFooter'] ?></p>
                        <p class="login__message">Version <?php echo $version ?></p>
                    </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
 
    <!-- Bootstrap JS -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous">
    </script>
    <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
    <script>
 
        <?php
 
            require_once "js/login.js";
        ?>
 
 
 
    </script>
</body>
 
</html>

Y en mí página de solicitud.php tengo lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
 
//Restringimos las sesion apra los usuarios verificados
session_start();
if (!isset($_SESSION['verificado'])) {
	header('location: ../index.php');
}
 
 
// LLamamos los ficheros que necesitamos para registrar el cliente y las busquedas globales
 
include '../php/global.php';
include '../php/language.php';
 
 
 
?>
<!DOCTYPE html>
<html lang="<?php echo $_SESSION['lang']; ?>">
 
<head>
	<!--<meta charset="UTF-8">-->
	<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
	<script src="../js/jquery.min.js"></script>
	<!--<script type="text/javascript" src="js/getData.js"></script>-->
	<title><?php echo $lang['title'] ?></title>
</head>
 
<body>
 
 
 
 
	<div class="login container-fluid p-0" style="background: url(../img/bg.svg); min-height: 100vh; background-size: cover; background-position: center;">
		<div class="login__card">
			<div class="col-md-4 offset-md-4">
				<div class="alert" role="alert"></div>
				<div class="login-form bg-light mt-4 p-4 shadow">
					<!-- llamamos a php para generar las urls y cargar los datos en la basa de datos-->
					<?php
					require_once "../php/registercustomer.php";
					?>
 
					<div class="row g-3">
						<img src="../img/logo_konica.png">
						<h4 class="text-center"><?php echo $lang['title'] ?></h4>
						<form name="solicitud" method="post">
							<div class="col-12">
								<input type="text" name="customer" class="form-control" placeholder="Nombre del cliente">
							</div>
							<br />
							<div class="col-12">
								<select name="sector" class="form-select">
									<option value="0">Seleccione sector</option>
									<?php
 
									//Realizamos la consulta que nos mostrara los sectores económicos
									while ($valores_sectores = mysqli_fetch_array($sectores)) {
										echo '<option value="'.$valores_sectores['idsector'].'">' . $valores_sectores['sector'] . '</option>';
									}
									?>
								</select>
							</div>
							<br />
							<div class="col-12">
								<select name="size" class="form-select">
									<option value="0">Seleccione tamaño empresa</option>
									<?php
 
									//Realizamos la consulta que nos mostrara los tamaños de las empresas
									while ($valores_size = mysqli_fetch_array($companysize)) {
										echo '<option value="' . $valores_size['idsize'] . '">' . $valores_size['size'] . '</option>';
									}
									?>
								</select>
							</div>
							<br />
							<div class="col-12">
								<input name="email_customer" type="email" id="customer" class="form-control" placeholder="Correo electrónico cliente">
								<br />
								<div class="col-12">
									<input readonly name="email_sales" type="email" id="email" class="form-control")>
								</div>
								<br />
								<div class="col-12">
									<button name="register" id="submit" class="btn btn-dark float-end">Generar enlace</button>
								</div>
						</form>
					</div>
					<hr class="mt-4">
<!-- 					<div  class="login__section login__section--form">
                        <a href="index.php?lang=es"> <?php echo $lang['es'] ?> </a> | <a href="index.php?lang=en"> <?php echo $lang['en'] ?></a> | <a href="index.php?lang=pt"> <?php echo $lang['pt'] ?> </a>
                    </div> -->
					<div class="col-12">
						<p class="text-center mb-0 fs-6">Ingrese los datos del cliente, esto generará un enlace temporal para enviarlo al cliente y así poder rellenar el formulario</p>
					</div>
				</div>
			</div>
		</div>
	</div>
 
	<!-- Bootstrap JS -->
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous">
	</script>
	<!-- Buscamos el correo almacenado en memoria en el equipo del comercial. -->
	<script>
		email.value = localStorage.getItem("solicitudSalesMail");
	</script>
 
 
</html>

Como podéis ver en la página de solicitud ahora solamente estoy declarando con include el fichero language.php.

Es ahí donde tengo el problema solo con incluir ese fichero al principio la web me esta dando error 500, creo que es por que en global y languaje tengo declarado sesión_star();

El caso es que no consigo como solucionarlo para que no me de error y ya no se me ocurre nada más, tener en cuenta que a partir de index ya todas las paginas esta restringidas para la sesión iniciada.

Alguien puede ayudarme
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder