PHP - Ayuda!! ejercicio sin resolver

 
Vista:
Imágen de perfil de Raquel Medina

Ayuda!! ejercicio sin resolver

Publicado por Raquel Medina (2 intervenciones) el 10/11/2017 16:23:02
Hola resulta que hace poco hice un curso online de php y tras hacer varios ejercicios, hubo uno que me quedó pendiente y nunca supe la solución, ya que no nos la daban, solamente veiamos la nota. Alguien sabe como hacerlo?
Agradecería cualquier comentario o código, incluso si alguien se anima a hacerlo y compartilo.
El ejercicio es el siguiente:

Debes programar una aplicación para mantener una pequeña agenda en una única página web programada en PHP.

La agenda almacenará únicamente dos datos de cada persona: su nombre y un número de teléfono. Además, no podrá haber nombres repetidos en la agenda.

En la parte superior de la página web debe figurar un sencillo formulario con dos cuadros de texto, uno para el nombre y otro para el número de teléfono. En la parte inferior se mostrará el contenido de la agenda. .

Cada vez que se envíe el formulario:

Si el nombre está vacío, se mostrará una advertencia.
Si el nombre que se introdujo no existe en la agenda, y el número de teléfono no está vacío, se añadirá a la agenda.
Si el nombre que se introdujo ya existe en la agenda y se indica un número de teléfono, se sustituirá el número de teléfono anterior.
Si el nombre que se introdujo ya existe en la agenda y no se indica número de teléfono, se eliminará de la agenda la entrada correspondiente a ese nombre.

No se puede utilizar cookies, sesiones o bases de datos, para guardar los datos de la agenda.

Gracias, es mi primer post.

Fuente: http://es.wikieducator.org/Usuario:ManuelRomero/php/dwes/B2T1/arrays/practica
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
sin imagen de perfil
Val: 76
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda!! ejercicio sin resolver

Publicado por preguntas (26 intervenciones) el 10/11/2017 18:10:48
Intentaste empezar a desarrollar el ejercicio? me imagino que si. Podrías compartir ese código y nosotros indicarte que falta para continuar. Aunque ya no lo necesites tómalo como un reto personal. Podrías descubrir cosas importantes...Bueno...si te animas..

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Raquel

Ayuda!! ejercicio sin resolver

Publicado por Raquel (2 intervenciones) el 10/11/2017 19:28:20
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
<?php
 
//se insertan en estas variables los campos introducidos en el formulario
$nombre_new = filter_input(INPUT_POST, 'nombre_new');
$telefono_new = filter_input(INPUT_POST, 'telefono_new');
?>
 
<html>
<head>
    <title>Agenda</title>
    <style>
 
form {
    width:30%;
    padding:10px;
    border: 3px solid #CCC;
    margin: 0 auto;
    border-radius: 10%;
    background: url("plasticc.jpg");
}
 
h2 {
    text-align: center;
}
p {
    font-size: 1.5rem;
}
 
#menu {
    text-align: center;
}
 
#menu label {
    width: 30%;
    display: block;
    float: left;
    margin: 5px 0 5px 45px;
    font-size: 1.2rem;
}
 
#menu input {
    padding: 5px;
    margin: 4px 0x;
    font-size: 1rem;
    margin: 0 0 20px -70px;
}
 
#menu input[type=submit] {
    display: block;
    width: 30%;
    margin: 2em auto;
}
 
#agenda{
    display: inline;
    width: 100%;
}
 
#agenda .titulos {
    display: flex;
    width: 100%;
    text-align: center;
}
 
#agenda div:first-child input {
    margin: 0 1em;
    border: 0px;
    font-weight: bold;
    width: 100%;
    text-align: center;
    display: flex;
    background: none;
}
 
#datos {
    width: 100%;
    text-align: center;
    display: flex;
}
 
#datos p {
    font-size: 1.5rem;
    width: 50%;
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
}
 
.warning {
    width: 80%;
    text-align: center;
    background-color: #ee7;
    border: 1px solid #ea2;
    padding: 4px 2.8em;
}
 
.noborder {
    border: none;
    background-color: transparent;
}
 
    </style>
</head>
<body>
 
<form  method="post">
    <h2>AGENDA DE CONTACTOS</h2>
    <div id="menu">
        <label for="formNombre">
            Nombre:
        </label>
            <input id="formNombre" type="text" name="nombre_new" value="<?=$nombre_new?>" placeholder="Ej: Marco Asensio" autofocus>
 
        <label for="formTelefono">
            Teléfono:
        </label>
            <input id="formTelefono" type="text" name="telefono_new" value="<?=$telefono_new?>" placeholder="Ej: 612345678">
        <input type="submit">
    </div>
    <div id="agenda">
        <div class="titulos">
            <input readonly value="Nombre">
            <input readonly value="Teléfono">
        </div>
        <hr>
        <?php
        /*
            * mostrar advertencia si el nombre esta vacio
            * */
 
        if (isset($nombre_new) && strlen($nombre_new)==0) {
            echo '<div class="warning">';
            echo '  El nombre no puede estar vacío.';
            echo '</div>';
        }
 
        /*
            * Indicar si no hay registros en la agenda
            * */
        $nombre= filter_input(INPUT_POST, 'nombre');
        if ($nombre) {
            echo '<div class="warning noborder">';
            echo '  No hay registros en la agenda.';
            echo '</div>';
        }
 
        $existe = false;//ponemos false para que compare con los datos de la agenda
        /*
            * mostrar todos los registros que hayan en el array
            * */
 
        for ($i=0;$i<count($_POST["nombre"]);$i++) {
 
            $nombre = $_POST["nombre"][$i];
            $telefono = $_POST["telefono"][$i];
 
            if ($nombre==$nombre_new) {
                //mismo nombre
                $existe = true;
                if (strlen($telefono_new)==0) {
                    $nombre = null;
                    $telefono = null;
                } else {
                    $telefono = $telefono_new;
                }
            }
            if ($nombre==null) {}else {
                agenda_agregar($nombre, $telefono);
            }
        }
        if ($existe) {
        }
        else{
            if (strlen($nombre_new)>0)
                agenda_agregar($nombre_new,$telefono_new);
        }
 
        /*
            * añade un nombre y telefono
            * */
        function agenda_agregar($nombre,$telefono) {
            echo '<div id="datos">';
            echo '<td><p>' .$nombre. '</p></td>';
            echo '<td><p>' .$telefono. '</p></td>';
            echo '    <input name="nombre[]" type="hidden" readonly value="'.$nombre.'">';
            echo '    <input name="telefono[]" type="hidden" readonly value="'.$telefono.'">';
            echo '</div>';
        }
        ?>
    </div>
</form>
</body>
 
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de ceysmar

Ayuda!! ejercicio sin resolver

Publicado por ceysmar (2 intervenciones) el 10/11/2017 20:26:15
o sea en pocas palabras necesita que los datos se guarden en por ejemplo un archivo de texto ? seria lo que por mi conocimiento vea mas difícil el resto es fácil
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
sin imagen de perfil
Val: 76
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda!! ejercicio sin resolver

Publicado por preguntas (26 intervenciones) el 10/11/2017 21:23:40
Que buen diseño, le faltaba muy poco.

Muy buena idea, almacenar en un archivo externo.

Tengo otra idea, aunque esta solo almacena datos en tiempo de ejecucion.

Esta idea es utilizando solamente HTML y PHP:

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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
 
<html>
    <head>
        <title>Agenda</title>
        <style>
 
            form {
                width:30%;
                padding:10px;
                border: 3px solid #CCC;
                margin: 0 auto;
                border-radius: 10%;
                background: url("plasticc.jpg");
            }
 
            h2 {
                text-align: center;
            }
            p {
                font-size: 1.5rem;
            }
 
            #menu {
                text-align: center;
            }
 
            #menu label {
                width: 30%;
                display: block;
                float: left;
                margin: 5px 0 5px 45px;
                font-size: 1.2rem;
            }
 
            #menu input {
                padding: 5px;
                margin: 4px 0x;
                font-size: 1rem;
                margin: 0 0 20px -70px;
            }
 
            #menu input[type=submit] {
                display: block;
                width: 30%;
                margin: 2em auto;
            }
 
            #agenda{
                display: inline;
                width: 100%;
            }
 
            #agenda .titulos {
                display: flex;
                width: 100%;
                text-align: center;
            }
 
            #agenda div:first-child input {
                margin: 0 1em;
                border: 0px;
                font-weight: bold;
                width: 100%;
                text-align: center;
                display: flex;
                background: none;
            }
 
            #datos {
                width: 100%;
                text-align: center;
                display: flex;
            }
 
            #datos p {
                font-size: 1.5rem;
                width: 50%;
                display: flex;
                flex-direction: row;
                justify-content: center;
                align-items: center;
            }
 
            .warning {
                width: 80%;
                text-align: center;
                background-color: #ee7;
                border: 1px solid #ea2;
                padding: 4px 2.8em;
            }
 
            .noborder {
                border: none;
                background-color: transparent;
            }
 
        </style>
    </head>
    <body>
 
        <form id="formulario"  method="post">
 
            <h2>AGENDA DE CONTACTOS</h2>
            <div id="menu">
                <label for="formNombre">
                    Nombre:
                </label>
                <input id="formNombre" type="text" name="nombre_new" value="<?= $nombre_new ?>" placeholder="Ej: Marco Asensio" autofocus>
 
                <label for="formTelefono">
                    Teléfono:
                </label>
                <input id="formTelefono" type="text" name="telefono_new" value="<?= $telefono_new ?>" placeholder="Ej: 612345678">
                <input name="btn_guardar" type="submit">
            </div>
            <div id="agenda">
                <div class="titulos">
                    <input readonly value="Nombre">
                    <input readonly value="Teléfono">
                </div>
                <hr>
                <?php
                //si se definio la variable btn_guardar (si se hizo clic)
                if (isset($_POST["btn_guardar"])) {
 
                    $nombre = $_POST["nombre_new"];
                    $telefono = $_POST["telefono_new"];
 
                    //agrego
                    agregar($nombre, $telefono);
                }
 
                function agregar($nombre, $telefono) {
                    //nuevo array
                    $arrAgenda = Array();
 
                    //si esta definida la variable listaAgenda (si existe el textArea con la lista)
                    if (isset($_POST['listaAgenda'])) {
                        //separamos y almacenamos dentro de un array los items de la lista textArea
                        $arrAgenda = split("\n", trim($_POST['listaAgenda']));
                    }
                    //valido que no esten vacios los campos
                    if (!empty($nombre) && !empty($telefono)) {
                        //valido que el nombre no exista
                        if (!existeNombre($nombre, $arrAgenda)) {
                            //agrego al array los nuevos datos
                            $arrAgenda[] = trim($nombre) . '-' . trim($telefono);
                            echo "TODO CORRECTO";
                        } else {
                            echo "EL NOMBRE YA EXISTE";
                        }
                    } else {
                        echo "REVISE LOS CAMPOS";
                    }
 
 
                    dibujaTextArea($arrAgenda);
                    dibujaTabla($arrAgenda);
                }
 
                function existeNombre($nombre, $arrAgenda) {
                    $existe = false;
                    //recorreo el array
                    foreach ($arrAgenda as $item) {
                        //separo el nombre del numero
                        $res = split("-", trim($item));
                        //pregunto por el nombre
                        if ($res[0] == $nombre) {
                            $existe = true;
                        }
                    }
                    return $existe;
                }
 
                function dibujaTextArea($arrAgenda) {
                    $txtArea = "<textarea style='display: none' name='listaAgenda' form='formulario'>";
                    foreach ($arrAgenda as $item) {
                        $txtArea .= trim($item) . "\n";
                    }
                    $txtArea .= "</textarea>";
                    echo $txtArea;
                }
 
                function dibujaTabla($arrAgenda) {
                    $table = "<table>";
                    $table .= "<tr>";
                    $table .= "<td>NOMBRE</td>";
                    $table .= "<td>NUMERO</td>";
                    $table .= "</tr>";
                    foreach ($arrAgenda as $item) {
                        $res = split("-", trim($item));
 
                        $table .= "<tr>";
                        $table .= "<td>$res[0]</td>";
                        $table .= "<td>$res[1]</td>";
                        $table .= "</tr>";
                    }
                    $table .= "</table>";
                    echo $table;
                }
                ?>
            </div>
        </form>
    </body>
 
</html>

Modifique un poco el codigo, espero se entienda. Traté de ser los as claro y simple posible. Cualquier dudas nos comentas.

** Hay que adaptarlo a tu diseño **
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 76
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda!! ejercicio sin resolver

Publicado por preguntas (26 intervenciones) el 10/11/2017 22:29:30
Agregar al principio para que no de el problema de las variables indefinidas.

1
2
3
4
5
<?php
//se insertan en estas variables los campos introducidos en el formulario
$nombre_new = filter_input(INPUT_POST, 'nombre_new');
$telefono_new = filter_input(INPUT_POST, 'telefono_new');
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda!! ejercicio sin resolver

Publicado por AYLEN (1 intervención) el 30/12/2021 17:39:06
<?php
if (isset($_POST['enviar'])) {
$agenda = (filter_input(INPUT_POST, 'agenda', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY)) ?? array();
$nombre = ucwords(strtolower(trim(filter_input(INPUT_POST, 'nombre', FILTER_SANITIZE_STRING))));
$telefono = trim(filter_input(INPUT_POST, 'telefono', FILTER_SANITIZE_NUMBER_INT));
if (!empty($nombre)) {
if (empty($telefono)) {
unset($agenda[$nombre]);
} else {
$agenda[$nombre] = $telefono;
}
}
} else if (isset($_GET['limpiar'])) {
$agenda = array();
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Agenda</title>
</head>
<body>
<form class="agenda" action="<?= $_SERVER['PHP_SELF'] ?>" method="POST">
<h1>Agenda</h1>
<fieldset>
<legend>Datos Agenda:</legend>
<?php if (empty($agenda)): ?>
<p>La agenda está vacía</p>
<?php else: ?>
<?php foreach ($agenda as $nom => $tel): ?>
<p><?= "$nom $tel" ?></p>
<input type='hidden' name="<?= "agenda[$nombre]" ?>" value="<?= $telefono ?>">
<?php endforeach ?>
<?php endif ?>
</fieldset>
<!-- Creamos el formulario de introducción de un nuevo contacto -->
<fieldset>
<legend>Nuevo Contacto:</legend>
<div class="form-section">
<label for="nombre">Nombre:</label>
<input id="nombre" type="text" name="nombre">
<?php if (isset($nombre) && empty($nombre)): ?>
<p class="error">Nombre obligatorio</p>
<?php endif ?>
</div>
<div class="form-section">
<label for="telefono">Teléfono:</label>
<input type="text" name="telefono" id="telefono">
</div>
<div class="form-section">
<input class="submit blue" type="submit" value="Añadir Contacto" name='enviar'/>
<input class="submit green" type="reset" value="Limpiar Campos"/>
</div>
</fieldset>
<?php if (!empty($agenda)): ?>
<fieldset>
<legend>Vaciar Agenda</legend>
<input class="submit red" type="submit" formaction="<?= "{$_SERVER['PHP_SELF']}?limpiar=1" ?>" value="Vaciar">
</fieldset>
<?php endif ?>
</form>
</body>
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar