PHP - Problema al insertar en BD de Oracle

   
Vista:
Imágen de perfil de Garen

Problema al insertar en BD de Oracle

Publicado por Garen (28 intervenciones) el 29/07/2016 22:12:22
tengo una tabla usuario en Oracle 11g express, y necesitaba que cuando se tratara de registrar un nickname que ya estuviera en la DB, desplegara un mensaje diciendo que el nickname ya estaba en uso, hasta el momento lo unico que hacia el formulario era insertar datos, pero cuando le añadi la validacion, el formulario ya no inserta datos

aca dejo el codigo

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
<?php
	error_reporting(E_ALL ^ E_NOTICE);
 
 
	$nombre =  htmlspecialchars($_POST["nombre"]);
	$apellido = htmlspecialchars($_POST["apellido"]);
	$nick = htmlspecialchars($_POST["nick"]);
	$email = htmlspecialchars($_POST["mail"]);
	$pass = htmlspecialchars($_POST["password"]);
	$desc = htmlspecialchars($_POST["descripcion"]);
	$conn = oci_connect('PROYECTO','oracle2016','localhost/xe');
	$sql = "SELECT * FROM USUARIO WHERE NICKNAME = '$nick' ";
	$stmt = oci_parse($conn, $sql);
	oci_execute($stmt);
	while($row = oci_fetch_array($stmt)){
		foreach($row as $columna=>$item ){
 
			if($columna == 2){
				echo $nick;
				if($nick == $item){
					echo "<script type='text/javascript'>alert('El Nickname ya esta en uso .$item.');</script>";
 
				}if($nick != $item){
 
					$sql = "INSERT INTO USUARIO( NOMBRE,APELLIDO,NICKNAME,EMAIL,PASSWORD,DESCRIPCION )
					VALUES ('".$nombre."','".$apellido."','".$nick."','".$email."','".$pass."','".$desc."')";
					$stmt = oci_parse($conn, $sql);
					oci_execute($stmt);//EJECUTAMOS CONEXION
					oci_commit($conn);
					oci_free_statement($stmt);
					echo"<script type='text/javascript'>alert('Usted ya ha sido registrado');
					window.location='http://localhost/conn/pagina/foro5/paginaweb/Perfil.html';</script>";
				}
			}
		}
	}
 
 
oci_close($conn); //CERRAMOS CONEXION 		
 
?>
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
Imágen de perfil de kip

Problema al insertar en BD de Oracle

Publicado por kip (562 intervenciones) el 29/07/2016 23:30:41
Hola, estas haciendo mal al usar el WHILE para verificar que un usuario existe, mejor intentalo de esta forma:

1
2
3
4
5
6
7
8
9
$sql = "SELECT * FROM USUARIO WHERE NICKNAME = '$nick' LIMIT 1 ";
	$stmt = oci_parse($conn, $sql);
	oci_execute($stmt);
	$row = oci_fetch_array($stmt);
        if ($row ){
        // aqui lanzas la alaerta de que hay un usuario registrado 
       } else {
       //aqui ejecutas el INSERT!!!
      }

Espero solucione el problema, nos cuentas.

Saludos
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
Imágen de perfil de Garen

Problema al insertar en BD de Oracle

Publicado por Garen (28 intervenciones) el 31/07/2016 06:19:52
Saludos kip, intente lo que me dijiste y me manda ciertos errores, el primer error que tengo es que apenaas acceso a la pagina me manda los mensajes de alerta sin que haya tocado o registrado nada y los otros son los siguientes

Warning: oci_execute(): ORA-00933: SQL command not properly ended in C:\xampp\htdocs\Conn\pagina\Foro5\PaginaWeb\Reg-Form.php on line 275

Warning: oci_fetch_array(): ORA-24374: define not done before fetch or execute and fetch in C:\xampp\htdocs\Conn\pagina\Foro5\PaginaWeb\Reg-Form.php on line 277

aca el codigo,
Linea 275 = oci_execute($stmt);
Linea 277 = $row = oci_fetch_array($stmt);


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
<?php
 
 
 
	error_reporting(E_ALL ^ E_NOTICE);
 
 
 
 
 
	$nombre =  htmlspecialchars($_POST["nombre"]);
 
	$apellido = htmlspecialchars($_POST["apellido"]);
 
	$nick = htmlspecialchars($_POST["nick"]);
 
	$email = htmlspecialchars($_POST["mail"]);
 
	$pass = htmlspecialchars($_POST["password"]);
 
	$desc = htmlspecialchars($_POST["descripcion"]);
 
	$conn = oci_connect('PROYECTO','oracle2016','localhost/xe');
 
	$sql = "SELECT * FROM USUARIO WHERE NICKNAME = '$nick' ";
 
	$stmt = oci_parse($conn, $sql);
 
	oci_execute($stmt);
 
 
 
 
 
	$sql = "SELECT * FROM USUARIO WHERE NICKNAME = '$nick' LIMIT 1 ";
 
	$stmt = oci_parse($conn, $sql);
 
	oci_execute($stmt);
 
	$row = oci_fetch_array($stmt);
 
        if ($row ){
 
        echo "<script type='text/javascript'>alert('El Nickname ya esta en uso .$item.');</script>";
 
       } else {
 
       $sql = "INSERT INTO USUARIO( NOMBRE,APELLIDO,NICKNAME,EMAIL,PASSWORD,DESCRIPCION )

					VALUES ('".$nombre."','".$apellido."','".$nick."','".$email."','".$pass."','".$desc."')";
 
					$stmt = oci_parse($conn, $sql);
 
					oci_execute($stmt);//EJECUTAMOS CONEXION
 
					oci_commit($conn);
 
					oci_free_statement($stmt);
 
					echo"<script type='text/javascript'>alert('Usted ya ha sido registrado');</script>";
 
      }
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 kip

Problema al insertar en BD de Oracle

Publicado por kip (562 intervenciones) el 31/07/2016 15:39:15
Creo que es porque estas colocando dos veces la consulta y ejecuntandola, fijate:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$conn = oci_connect('PROYECTO','oracle2016','localhost/xe');
 
$sql = "SELECT * FROM USUARIO WHERE NICKNAME = '$nick' "; // ESTO YA NO IRIA
 
$stmt = oci_parse($conn, $sql); // ESTO YA NO IRIA
 
oci_execute($stmt);  //ESTO YA NO IRIA
 
 
 
 
 
$sql = "SELECT * FROM USUARIO WHERE NICKNAME = '$nick' LIMIT 1 "; //  ESTO SI!
 
$stmt = oci_parse($conn, $sql);//  ESTO SI!
 
oci_execute($stmt);//  ESTO SI!
 
$row = oci_fetch_array($stmt);//  ESTO SI!
 
	if ($row ){

Elimina las lineas que te menciono arriba y prueba.

Nos cuentas como vas.
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 Garen

Problema al insertar en BD de Oracle

Publicado por Garen (28 intervenciones) el 31/07/2016 21:13:01
Buenas Kip lo corregi, y ya inserta, el problema que tengo ahora es que apenas entron a la pagina, me manda el mensaje que dice "Ud Ya ha sido registrado" sin que toque nada, inmediatamente apenas entro a la pagina salta ese mensaje, que podria hacer para que el mensaje solo salga cuando el usuario termine el registro?

aca el codigo:

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
<?php
 
 
 
	error_reporting(E_ALL ^ E_NOTICE);
 
 
 
 
 
	$nombre =  htmlspecialchars($_POST["nombre"]);
 
	$apellido = htmlspecialchars($_POST["apellido"]);
 
	$nick = htmlspecialchars($_POST["nick"]);
 
	$email = htmlspecialchars($_POST["mail"]);
 
	$pass = htmlspecialchars($_POST["password"]);
 
	$desc = htmlspecialchars($_POST["descripcion"]);
 
	$conn = oci_connect('PROYECTO','oracle2016','localhost/xe');
 
	$sql = "SELECT * FROM USUARIO WHERE NICKNAME = '$nick'";
 
	$stmt = oci_parse($conn, $sql);
 
	oci_execute($stmt);
	$row = oci_fetch_array($stmt);
 
        if ($row >= 1){
 
        echo "<script type='text/javascript'>alert('El Nickname ya esta en uso');</script>";
 
       } else {
 
       $sql = "INSERT INTO USUARIO( NOMBRE,APELLIDO,NICKNAME,EMAIL,PASSWORD,DESCRIPCION )

					VALUES ('".$nombre."','".$apellido."','".$nick."','".$email."','".$pass."','".$desc."')";
 
					$stmt = oci_parse($conn, $sql);
 
					oci_execute($stmt);//EJECUTAMOS CONEXION
 
					oci_commit($conn);
 
 
 
					echo"<script type='text/javascript'>alert('Usted ya ha sido registrado');</script>";
 
      }
 
 
oci_close($conn); //CERRAMOS CONEXION 		
 
 
 
?>
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 kip

Problema al insertar en BD de Oracle

Publicado por kip (562 intervenciones) el 31/07/2016 21:43:15
No veo ninguna estructura del algun formulario en el codigo que colocas, aquel codigo PHP esta embebido junto con HTML o forma parte de un script fuera del sistema de registros? Lo pregunto porque me mencionas que directamente al ingresar a la pagina te muestra aquel mensaje pero no especificas tal dato de si es el mismo script de registros o un script que colocas como include.

Ahora bien, si se trata de codigo PHP embebido en HTML y por ende forma parte del sistema del mismo script de registro, puedes hacer un isset() para verificar si las variables estan definidas y asi mismo un empty() para ver si estan vacias, aunque deberias hacerlo igual en un script que externo que incluyes.

Un pequeño ejemplo:

1
2
3
4
5
6
<?php
 if(isset($_POST['variable'] && !empty($_POST['variable']))) { //verifico que no este vacia y que este definida la variable del post!
 
 	//AQUI  EVALUARA SI EXISTE EL NICKNAME INSERTADO Y SI NO EXISTE PUES HARA EL INSERT
 
 }
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
Imágen de perfil de Garen

Problema al insertar en BD de Oracle

Publicado por Garen (28 intervenciones) el 31/07/2016 21:46:54
gracias por la respuesta tan rapida, aca adjunto el html del formulario

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
<div >
	<div >
		<div class="form-container" >
		<h2><font color="#ffffff">Registrate hoy</font></h2>
		<br/>
		<form class="contact_form" action="Reg-Form.php" method="post">
			<ul>
				<li>
				<label for="nombre"><font color="#ffffff">Nombre</font></label>
				<input type="text" name="nombre" id="nombre" required="required"/>
				</li>
				<li>
				<label for="Apellido"><font color="#ffffff">Apellido</font></label>
				<input type="text" name="apellido" id="apellido" required="required"/>
				</li>
				<li>
				<label for="Nick" ><font color="#ffffff">Nombre de Usuario</font></label>
				<input type="text" name="nick" id="nick" required="required"/>
				</li>
				<li>
				<label for="mail"><font color="#ffffff">Email</font></label>
				<input type="text" name="mail" id="mail" required="required"/>
				</li>
				<li>
				<label for="Password" ><font color="#ffffff">Password</font></label>
				<input type="password" name="password" id="password" required="required"/>
				</li>
				<li>
				<label for="Descripcion" ><font color="#ffffff">Tu Descripcion</font></label>
				<input type="text" name="descripcion" id="password" required="required" style="height: 98px"/>
				</li>
 
				<li>
				<button class="submit" type="submit" name="submit">Crear Cuenta</button>
				</li>
 
			</ul>
		</form>
		</div>
	</div>
</div>
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 kip

Problema al insertar en BD de Oracle

Publicado por kip (562 intervenciones) el 31/07/2016 22:51:27
Entiendo, pero no me respondes si aquel Reg-Form.php es el mismo que contiene el HTML del formulario o es un script ajeno a este y tal como te dije puedes hacer algo asi, pruebalo:

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
<?php
 
	error_reporting(E_ALL ^ E_NOTICE);
 
	$ver=false;
	$i=0;
	$len = count($_POST);
 
	foreach($_POST as $k){
		if(isset($k) && !empty($k)){
			$i++;
		}
		if($i==($len-1)) $ver = true;
	}
 
	if($ver==true){
 
		$nombre =  htmlspecialchars($_POST["nombre"]);
		$apellido = htmlspecialchars($_POST["apellido"]);
		$nick = htmlspecialchars($_POST["nick"]);
		$email = htmlspecialchars($_POST["mail"]);
		$pass = htmlspecialchars($_POST["password"]);
		$desc = htmlspecialchars($_POST["descripcion"]);
 
 
		$conn = oci_connect('PROYECTO','oracle2016','localhost/xe');
		$sql = "SELECT * FROM USUARIO WHERE NICKNAME = '$nick'";
		$stmt = oci_parse($conn, $sql);
 		oci_execute($stmt);
		$row = oci_fetch_array($stmt);
 
	        if ($row >= 1){
	        	echo "<script type='text/javascript'>alert('El Nickname ya esta en uso');</script>";
	        } else {
	        	$sql = "INSERT INTO USUARIO( NOMBRE,APELLIDO,NICKNAME,EMAIL,PASSWORD,DESCRIPCION )
						VALUES ('".$nombre."','".$apellido."','".$nick."','".$email."','".$pass."','".$desc."')";
				$stmt = oci_parse($conn, $sql);
	 			oci_execute($stmt);//EJECUTAMOS CONEXION
	 			oci_commit($conn);
	  			echo"<script type='text/javascript'>alert('Usted ya ha sido registrado');</script>";
	        }
 
		oci_close($conn); //CERRAMOS CONEXION
 
  	}
 
?>

Espero te sirva el código.

Saludos
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 Garen

Problema al insertar en BD de Oracle

Publicado por Garen (28 intervenciones) el 31/07/2016 22:54:14
Muchas gracias kip, para responder bien si, Reg-Form.php es donde esta el html y el php del insert todo en el mismo archivo, probare eso que me dices y reportare si funciona o si produce algun error, gracias
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 Garen

Problema al insertar en BD de Oracle

Publicado por Garen (28 intervenciones) el 01/08/2016 01:01:42
Kip no sabes cuanto te agradezco, me funciono a la perfeccion, de verdad muchas gracias
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