-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinfo_operon.php
343 lines (325 loc) · 14 KB
/
info_operon.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
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
<!-- Pagina para resultados de operon -->
<!--Por Sofia Salazar-->
<!--15 nov 2021-->
<html>
<head>
<title> Operon Results </title>
<link rel="stylesheet" type="text/css" href="mystyle.css">
<!-- para habilitar caja de busqueda en barra de nav-->
<form id="form" name="form" method="get" action="resultados.php">
</head>
<body>
<!-- elementos de barra de nav -->
<nav class="topnav">
<div class="logo">
<a href="home.php"><img src="logo2.png" /></a>
</div>
<div class="tabs">
<b><a href="home.php">Home</a></b>
<b><a href="about.php">About</a></b>
<b><a class="active" href="formularioDB.php">Search</a></b>
<!--caja de busqueda de la barra de nav-->
<input name="search" type="text" id="search" size="15" placeholder="Search..." />
</div>
</nav>
<header>
<!--foto de olas azul-->
<img src="header_azul.png" alt="header logo">
</header>
<br><br>
<?php
// conexion al servidor
error_reporting(E_ALL);
ini_set('display_errors', '1');
$operon_req = escapeshellcmd($_GET["question"]);
$mysqli = new mysqli("132.248.248.121:3306", "lcgej", "Genoma123#$", "LCGEJ");
if ($mysqli->connect_errno) {
echo "Fallo al conectar a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
die();
}
//query de la tabla operon
$result_operon = $mysqli->query("SELECT * FROM OPERON g WHERE operon_name like '%" . $operon_req . "%' OR operon_ID = '" . $operon_req . "'");
?>
<?php
if ($result_operon->num_rows > 0) { ?>
<?php for ($num_fila = 1; $num_fila <= $result_operon->num_rows; $num_fila++) {
// obtener filas del query si son mas de 0
$campos = $result_operon->fetch_object();
} ?>
<h2> Results for <?= $campos->operon_name; ?> in OPERON </h2>
<h3>Operon</h3>
<TABLE class="custom-table2">
<!--Encabezados de la tabla -->
<thead>
<tr>
<th class="head"> OPERON ID </th>
<th class="head"> OPERON Name </th>
</tr>
</thead>
<!--celdas con id y nombre del operon -->
<tbody>
<tr>
<td><?= $campos->operon_id; ?> </td>
<td><?= $campos->operon_name; ?> </td>
</tr>
</tbody>
</table>
<?php //primero checar si tiene transcription_unit
$trans_u = $mysqli->query("SELECT * FROM TRANSCRIPTION_UNIT g WHERE operon_ID = '" . $campos->operon_id . "'");
// array para todos los ID de trascription units de cada operon para hacer los querys de las
// tablas de promoter y terminator
$tu_array = array();
for ($num_fila = 1; $num_fila <= $trans_u->num_rows; $num_fila++) {
$transcription = $trans_u->fetch_object();
// se llena el array con los ID de los transcription units para cada operon
array_push($tu_array, $transcription->transcription_unit_id);
}
// la variable anterior se inicia vacia, es para verificar que no se repitan los
// transcription units
$anterior = '';
$filas_tu = count($tu_array); // se cuentan los transcription units
if ($filas_tu > 0) //hacer las tablas para cada trans_unit
{ ?>
<?php
for ($unidad = 0; $unidad < $filas_tu; $unidad++) // for para cada transcription unit
{
?>
<?php
//sacar los nombres de los transcription units
$tu_names = $mysqli->query("SELECT * FROM TRANSCRIPTION_UNIT g WHERE transcription_unit_id = '" . $tu_array[$unidad] . "'");
for ($num_tu = 1; $num_tu <= $tu_names->num_rows; $num_tu++) {
$transcription_name = $tu_names->fetch_object();
}
// verificar que no se repita el nombre
if ($transcription_name->transcription_unit_id != $anterior) { ?>
<!-- separacion para cada transcription unit -->
<img class="linea" src="dna.png">
<h3>
<?php
// Tabla para transcription unit
echo "Transcription unit";
?>
</h3>
<table class="custom-table2">
<?php
//query para los sinonimos
$synonyms = $mysqli->query("SELECT * FROM OBJECT_SYNONYM g WHERE object_ID = '" . $tu_array[$unidad] . "'");
?>
<!--encabezados de tabla de transcription unit -->
<thead>
<tr>
<th class="head">Name</th>
<th class="head">Gene(s)</th>
<?php
if ($synonyms->num_rows > 0) //se hace encabezado de sinonimos solo si los hay
{
echo "<th class='head'> Synonyms(s)</th>";
} ?>
<?php
?>
</tr>
</thead>
<tr>
<!--impresion de las celdas-->
<?php //para nombre, solo si no es nulo
if (!(is_null($transcription_name->transcription_unit_name))) {
echo "<td>" . $transcription_name->transcription_unit_name . "</td>";
} else {
//si no existe el nombre
echo "<td>Unknown transcription unit name</td>";
}
?>
<?php //para genes
$genes = $mysqli->query("SELECT * FROM GENE g JOIN TU_GENE_LINK tul ON g.gene_id = tul.gene_id JOIN TRANSCRIPTION_UNIT tu ON tul.transcription_unit_id = tu.transcription_unit_id AND tu.transcription_unit_ID = '" . $tu_array[$unidad] . "'");
if ($genes->num_rows > 0)
// se hace el encabezado de genes solo si los hay
{
echo "<td>";
for ($num_gen = 1; $num_gen <= $genes->num_rows; $num_gen++) {
//se sacan los nombres de genes
$tu_genes = $genes->fetch_object();
echo $tu_genes->gene_name . "<br>";
}
echo "</td>";
} else {
//si no se saben los genes
echo "<td> Unknown genes for this transcription_unit </td>";
}
?>
<?php //para sinonimos, solo si hay mas de 0
if ($synonyms->num_rows > 0) {
echo "<td>";
for ($num_sy = 1; $num_sy <= $synonyms->num_rows; $num_sy++) {
//se imprimen todos los que hay con el for
$transcription_synonym = $synonyms->fetch_object();
echo $transcription_synonym->object_synonym_name . "<br>";
}
echo "</td>";
}
?>
</tr>
</table> <!-- fin de tabla de transcription_unit -->
<?php //Para tabla de promoter
// query para el promoter
$promoter = $mysqli->query("SELECT * FROM PROMOTER pro JOIN TRANSCRIPTION_UNIT tu ON pro.promoter_id=tu.promoter_id AND tu.transcription_unit_id = '" . $tu_array[$unidad] . "'");
if ($promoter->num_rows > 0) // si si hay promotor se hace la tabla
{
for ($num_pro = 1; $num_pro <= $promoter->num_rows; $num_pro++) {
// obtener objeto del query
$promo = $promoter->fetch_object();
}
$check = FALSE; // bandera para sacar la distance from start of gene
$left_array = array(); // arreglo para las distance pos_left
$right_array = array(); // arreglo para las distance pos_right
//query para obtener las pos_right y pos_left
$pos_query = $mysqli->query("SELECT * FROM GENE g JOIN TU_GENE_LINK tul ON g.gene_id = tul.gene_id JOIN TRANSCRIPTION_UNIT tu ON tul.transcription_unit_id = tu.transcription_unit_id AND tu.transcription_unit_ID = '" . $tu_array[$unidad] . "'");
for ($num_pos = 1; $num_pos <= $pos_query->num_rows; $num_pos++) {
//guardar los elementos en los array
$positions = $pos_query->fetch_object();
array_push($left_array, $positions->gene_posleft);
array_push($right_array, $positions->gene_posright);
}
//sacar el maximo del right y el minimo del left
$mayor_right = max($right_array);
$menor_left = min($left_array);
//obtener el tipo de strand (reverse / forward) solo si se no es nulo
// el pos_1 y hay mas de un gene
if (!(is_null($promo->pos_1)) and $genes->num_rows > 0) {
for ($num_gen = 1; $num_gen <= $genes->num_rows; $num_gen++) {
//forma del strand
$forma = $tu_genes->gene_strand;
}
$check = TRUE; //si se cumplen las condiciones y se obtiene el strand cambia bandera
//obtener la distance from start of gene, dependiendo de si es forward o reverse
if ($forma == 'forward') {
$distance = abs(($promo->pos_1) - $menor_left);
} else {
$distance = abs(($promo->pos_1) - $mayor_right);
}
}
?>
<h3>
<?php
//Tabla para promotor
echo "Promoter" ?></h3>
<table class="custom-table2">
<thead>
<tr>
<th>Name</th>
<?php
// encabezado para +1 solo si no es nulo
if (!(is_null($promo->pos_1))) {
echo "<th class='head'> +1 </th>";
}
// encabezado para sigma factor solo si no es nulo
if (!(is_null($promo->sigma_factor))) {
echo "<th class='head'> Sigma factor </th>";
}
// Distance from start of gene
if ($check == TRUE) // si se cumplen las condiciones para la distancia
{
// se hace el encabezado
echo "<th class='head'> Distance from start of gene </th>";
}
// encabezado de secuencia solo si la secuencia no es nula
if (!(is_null($promo->promoter_sequence))) {
echo "<th class='head'> Sequence </th>";
}
?>
</tr>
</thead>
<!-- celdas-->
<tr>
<?php
//rellenar las celdas de los encabezados anteriores, siempre verificando que no sean nulos
if (!(is_null($promo->promoter_name))) {
echo "<td>" . $promo->promoter_name . "</td>";
} else {
echo "<td> not known promoter name </td>";
}
if (!(is_null($promo->pos_1))) {
echo "<td>" . $promo->pos_1 . "</td>";
}
if (!(is_null($promo->sigma_factor))) {
echo "<td>" . $promo->sigma_factor . "</td>";
}
if ($check == TRUE) {
echo "<td>" . $distance . "</td>";
}
if (!(is_null($promo->promoter_sequence))) {
echo "<td>" . $promo->promoter_sequence . "</td>";
}
?>
</tr>
</table>
<?php }
$promoter->close(); //if de promoter
?>
<?php //Tabla para terminator(s)
//$numero_de_terminator = $numero_de_terminator + 1;
$terminator = $mysqli->query("SELECT * FROM TERMINATOR ter JOIN TU_TERMINATOR_LINK tute ON ter.terminator_id = tute.terminator_id JOIN TRANSCRIPTION_UNIT tu ON tute.transcription_unit_id = tu.transcription_unit_id AND tu.transcription_unit_id = '" . $tu_array[$unidad] . "'");
if ($terminator->num_rows > 0) //si si hay terminator se hace la tabla
{ ?>
<h3> <?php
//TABLAS PARA TERMINATORS
// arrays para tipo de terminator y secuencia de cada terminator
$ter_type_array = array();
$ter_seq_array = array();
$cantidad = 0; //cantidad de terminators
//Llenar arrays de terminator
for ($num_ter = 1; $num_ter <= $terminator->num_rows; $num_ter++) {
$ter = $terminator->fetch_object();
//rellenar arrays
array_push($ter_type_array, $ter->terminator_class);
array_push($ter_seq_array, $ter->terminator_sequence);
$cantidad++;
}
echo "Terminator(s)" ?></h3>
<!-- for para cada tabla de terminator posible-->
<?php for ($num_ter = 1; $num_ter <= $terminator->num_rows; $num_ter++) { ?>
<table class="custom-table2">
<thead>
<!--encabezados de las tablas numerados por numero de terminator-->
<tr>
<th class='head'><?= $num_ter . "° Type" ?></th>
<th class='head'> <?= $num_ter . "° Sequence" ?></th>
</tr>
</thead>
<tr>
<?php
//imprimir celdas, el array tiene un indice menos de lo que se usa para numerar las tablas
echo "<td>" . $ter_type_array[$num_ter - 1] . "</td>";
echo "<td>" . $ter_seq_array[$num_ter - 1] . "</td>";
?>
</tr>
</table>
<br><br>
<?php } //for de las tablas de terminators
?>
<?php
} //if de terminator
$terminator->close(); ?>
<?php
//guardar en anterior el transcription unit del cual ya se hizo tabla
$anterior = $transcription_name->transcription_unit_id;
}//if que verifica que no se repite nombre de transcription unit
} //for grande de transcription units
?>
<br><br>
<?php $trans_u->close();
$tu_names->close();
$synonyms->close();
$genes->close();
} //if de si hay mas de 0 transcription units (filas_tu)
?>
<?php
$result_operon->close();
} // if de si hay mas de 0 filas en operon (result_operon->num_row
?>
<!-- boton de anterior-->
<form>
<input id="anterior" type="button" value="Back" onclick="history.back()">
</form>
<br><br>
</body>
</html>