Está en la página 1de 9

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.

0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin ttulo</title>
</head>
<body>

<table width="20%" height="50" border="1">
<tr>
<th>NOMBRE</th>
</tr>
<?php
error_reporting(E_ALL ^ E_NOTICE);
$conn = oci_connect('BASES','progra');
$sql = "SELECT * FROM PHP";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
while ( $row = oci_fetch_assoc($stmt) ) {
?>
<tr>
<td><?php echo $row['NOMBRE']; ?></td>
</tr>
<?php } ?>
</table>
<p>






<form id="form1" name="form1" method="post" action="">
<label for="txt1">INGRESE NOMBRE</label>
<input type="text" name="txt1" id="txt1" />
<input type="submit" name="btn" id="btn" value="INGRESAR" />
</form>
<p>





<form id="form2" name="form2" method="post" action="">
ELIMINAR NOMBRES
<select name="seleccion" id="seleccion" value="">
<option value="0" selected="selected">ELIJA NOMBRE A BORRAR</option>
<?php
error_reporting(E_ALL ^ E_NOTICE);
$conn = oci_connect('BASES','progra');
$sql = "SELECT * FROM PHP";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
while ( $row = oci_fetch_assoc($stmt) ) {
?>
<option value="<?php echo $row['NOMBRE']; ?>"><?php echo
$row['NOMBRE']; ?></option>
<?php }?>
</select>
<input type="submit" name="btn2" id="btn2" value="BORRAR" />
</form>
<p>
<form id="form3" name="form3" method="post" action="">
BUSCAR NOMBRE
<select name="seleccion2" id="seleccion2" value="">
<option value="0" selected="selected">ELIJA NOMBRE A BUSCAR</option>
<?php
error_reporting(E_ALL ^ E_NOTICE);
$conn = oci_connect('BASES','progra');
$sql = "SELECT * FROM PHP";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
while ( $row = oci_fetch_assoc($stmt) ) {
?>
<option value="<?php echo $row['NOMBRE']; ?>"><?php echo
$row['NOMBRE']; ?></option>
<?php }?>
</select>
<input type="submit" name="btn3" id="btn3" value="BUSCAR" />







</form>
<table width="20%" height="50" border="1">
<tr>
<th>NOMBRE</th>
</tr>
<?php
$nombre_buscar = htmlspecialchars($_POST["seleccion2"]);
error_reporting(E_ALL ^ E_NOTICE);
$conn = oci_connect('BASES','progra');
$sql = "SELECT * FROM PHP WHERE NOMBRE = '".$nombre_buscar."'";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
while ( $row = oci_fetch_assoc($stmt) ) {
?>
<tr>
<td><?php echo $row['NOMBRE']; ?></td>
</tr>
<?php } ?>
</table>
<p>
<p>
<p>





<?php
//INSERTAR
error_reporting(E_ALL ^ E_NOTICE);
$conn = oci_connect('BASES','progra');
$sql = "SELECT * FROM PHP";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

$nombre = htmlspecialchars($_POST["txt1"]);

$sql = "INSERT INTO PHP( NOMBRE )
VALUES ('".$nombre."')";
$stmt = oci_parse($conn, $sql);
$rc=oci_execute($stmt);//EJECUTAMOS CONEXION
oci_commit($conn);
oci_free_statement($stmt);
oci_close($conn); //CERRAMOS CONEXION
?>


<?php
//BORRAR
$nombre_borrar = htmlspecialchars($_POST["seleccion"]);

$conn = oci_connect('BASES','progra', 'localhost/XE');
$sql = "SELECT * FROM PHP WHERE NOMBRE = '".$nombre_borrar."'";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

$sql = "DELETE FROM PHP WHERE NOMBRE = '".$nombre_borrar."'";
$stmt = oci_parse($conn, $sql);
$rc=oci_execute($stmt);
oci_commit($conn);
oci_free_statement($stmt);
oci_close($conn);
?>

<?php
//BORRAR
$nombre_borrar = htmlspecialchars($_POST["seleccion"]);

$conn = oci_connect('BASES','progra', 'localhost/XE');
$sql = "SELECT * FROM PHP WHERE NOMBRE = '".$nombre_borrar."'";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

$sql = "DELETE FROM PHP WHERE NOMBRE = '".$nombre_borrar."'";
$stmt = oci_parse($conn, $sql);
$rc=oci_execute($stmt);
oci_commit($conn);
oci_free_statement($stmt);
oci_close($conn);
?>
</body>
</html>

Daniel Segovia
Blog personal
Archive for the 5.6 PHP y Oracle Category
Seguridad en los parmetros
Hacer un comentario
La seguridad en los parmetros es un concepto muy viejo pero es muy efectivo.
Los ataques SQL Injection son ms comunes de lo que uno piensa, por ende las cadenas de
texto (SQL) que enviamos al motor de la base de datos deben, como mnimo, prevenir este
tipo de ataques.
La forma ms comn en estos ataques es cuando ingresamos valores externos a nuestro
cdigo a la base de datos, es decir un parmetro que venga por POST o GET.
S enviamos el siguiente query a la base
<?php
$query = "SELECT * FROM personas WHERE id = 5";
//envio el query
?>
no existe tal SQL Injection por que id = 5 ser siempre id = 5 ya que esta embebido en
nuestro cdigo.
Un ejemplo diferente con una vulnerabilidad visible es el siguiente.
<?php
$query = "SELECT * FROM personas WHERE id = " . $_GET['id'];
//envio el query
?>
en este caso debemos prevenir que $_GET['id'] no contenga ningn cdigo malicioso.
Cuando trabajamos con bases de datos Oracle tenemos a nuestro disposicin la funcin
oci_bind_by_name que realizar un blindaje sobre los parmetros, un metodologa similar a
stmt de mysqli.
<?php
$conn = oci_connect("usuario", "contrasea", "localhost/XE");
if (!$conn) {
$m = oci_error();
trigger_error(htmlentities($m['message']), E_USER_ERROR);
}

$sql = 'SELECT id,nombre,apellido FROM personas WHERE id = :id';
$stid = oci_parse($conn, $sql);
$id = $_GET['id'];
oci_bind_by_name($stid, ':id', $id);
oci_execute($stid);
$fila = oci_fetch_array($stid, OCI_ASSOC);
print_r($fila);

oci_free_statement($stid);
oci_close($conn);
?>
Written by Daniel Segovia
diciembre 1st, 2011 at 4:35 pm
Posted in 5.6.5 Seguridad en los parmetros
Tagged with blind parameter, oci_bind_by_name, seguridad, seguridad oracle
Recuperar el contenido desde Oracle
Hacer un comentario
oci_fetch_array es la funcin que usaremos para transformar la fila de base de datos en
array para tenerlo disponible y poder imprimirlo o procesarlo donde querramos
<?php

$conn = oci_connect('usuario', 'contrasea', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT id, nombre FROM personas');
oci_execute($stid);

while (($row = oci_fetch_array($stid, OCI_BOTH))) {
// El array asociativo poseer los ndices en maysculas
echo $row['ID'] . " - " . $row['NOMBRE'] . "\n<br/>";
}

oci_free_statement($stid); //libero la memoria
oci_close($conn); //cierro la conexin

?>
Written by Daniel Segovia
noviembre 29th, 2011 at 6:11 pm
Posted in 5.6.4 Recuperar el contenido
Tagged with array, oci, oci_execute, oci_fetch_array, oci_parse, oracle
ABM desde PHP a Oracle
Un comentario
Como en otras secciones del libro, mysql, sqlite y Microsoft SQL Server, para realizar un
ABM necesitamos tener el cdigo SQL correcto para enviarlo a la base de datos a travs de
una funcin que nos provee PHP, la funcin especifica para Oracle es oci_execute, pero
para ejecutarla primero debemos preparar la cadena de texto SQL con oci_parse
<?php
//alta.php
$conn = oci_connect('usuario', 'contrasea', 'localhost/XE');
$query = "INSERT INTO mitabla (columna) VALUES ('valor')";
$stid = oci_parse($conn, $query);
oci_execute($stid); // La fila es comiteada y quedar disponible para
todos los usuarios
?>
<?php
//baja.php
$conn = oci_connect('usuario', 'contrasea', 'localhost/XE');
$query = "DELETE FROM mitabla id = 10";
$stid = oci_parse($conn, $query);
oci_execute($stid); // La fila es comiteada y quedar disponible para
todos los usuarios
?>
<?php
//modificacion.php
$conn = oci_connect('usuario', 'contrasea', 'localhost/XE');
$query = "UPDATE mitabla set columna='otro valor' WHERE id = 5";
$stid = oci_parse($conn, $query);
oci_execute($stid); // La fila es comiteada y quedar disponible para
todos los usuarios
?>
Written by Daniel Segovia
noviembre 29th, 2011 at 1:08 pm
Posted in 5.6.3 ABM
Conectar a Oracle desde PHP
Hacer un comentario
PHP nos ofrece 2 posibilidad para conectarnos a Oracle
php_oracle
Es una librera un tanto antigua pero es una muy buena opcin s no deseamos trabajar con
datos tipo BLOB o CLOB.
php_oci8
Librera que permite conectarse a Oracle Database desde la versin 8.0 y posteriores. Posee
muchas ms funciones y funciona con BLOB y CLOB.
Usaremos oci8 a lo largo de esta seccin, para conectarnos lo haremos con la funcin
oci_connect
<?php
// Conectandose al servicio "XE" sobre la direccin "localhost"
$conn = oci_connect('usuario', 'contrasea', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
echo 'Conectado';
?>






























</form>
<table width="20%" height="50" border="1">
<tr>
<th>NOMBRE</th>
</tr>
<?php
$nombre_buscar = htmlspecialchars($_POST["seleccion2"]);
error_reporting(E_ALL ^ E_NOTICE);
$conn = oci_connect('BASES','progra');
$sql = "SELECT * FROM PHP WHERE NOMBRE = '".$nombre_buscar."'";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
while ( $row = oci_fetch_assoc($stmt) ) {
?>
<tr>
<td><?php echo $row['NOMBRE']; ?></td>
</tr>
<?php } ?>
</table>
<p>
<p>
<p>





<?php
//INSERTAR
error_reporting(E_ALL ^ E_NOTICE);
$conn = oci_connect('BASES','progra');
$sql = "SELECT * FROM PHP";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

$nombre = htmlspecialchars($_POST["txt1"]);

$sql = "INSERT INTO PHP( NOMBRE )
VALUES ('".$nombre."')";
$stmt = oci_parse($conn, $sql);
$rc=oci_execute($stmt);//EJECUTAMOS CONEXION
oci_commit($conn);
oci_free_statement($stmt);
oci_close($conn); //CERRAMOS CONEXION
?>


<?php
//BORRAR
$nombre_borrar = htmlspecialchars($_POST["seleccion"]);

$conn = oci_connect('BASES','progra', 'localhost/XE');
$sql = "SELECT * FROM PHP WHERE NOMBRE = '".$nombre_borrar."'";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

$sql = "DELETE FROM PHP WHERE NOMBRE = '".$nombre_borrar."'";
$stmt = oci_parse($conn, $sql);
$rc=oci_execute($stmt);
oci_commit($conn);
oci_free_statement($stmt);
oci_close($conn);
?>

<?php
//BORRAR
$nombre_borrar = htmlspecialchars($_POST["seleccion"]);

$conn = oci_connect('BASES','progra', 'localhost/XE');
$sql = "SELECT * FROM PHP WHERE NOMBRE = '".$nombre_borrar."'";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

$sql = "DELETE FROM PHP WHERE NOMBRE = '".$nombre_borrar."'";
$stmt = oci_parse($conn, $sql);
$rc=oci_execute($stmt);
oci_commit($conn);
oci_free_statement($stmt);
oci_close($conn);
?>
</body>
</html>

También podría gustarte