PHP - Script PHP se ejecuta dos veces

   
Vista:

Script PHP se ejecuta dos veces

Publicado por Javier (9 intervenciones) el 05/08/2015 22:28:45
Hola. Estoy experimentando el siguiente problema usando PHP y MySQL:
Desde un enlace en un <table> se invoca a un segundo.php el cual realiza una copia del registro actual.
1
echo  "<td> <a href='cpu_copy.php?cpuid=".$row['cpuid' ]."'>".$row['cpuid' ]."</a></td> " ;

En cpu_copy.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
<html>
<head>
  <?php InsertHead();   ?>
  <!-- ESTA BIEN USAR UNA FUNCION COMO DE LA LINEA 
        ANTERIOR PARA INSERTAR <title>, script js , hojas de estilo? -->
</head>
 
<body>
<?php
     $cpuid = $_GET['cpuid'];
 
      $link = ConectarBD() ;
 
      $result = $link->query( "select max(cpuid) as ultimo from cpu ");
 
      $row = $result->fetch_array()  ;
 
      $newcpuid = $row['ultimo'] + 1 ;
 
      $result = $link->query( "insert into cpu ( cpuid, cputipoid, cpudes, marcaid )
                                  select '$newcpuid', cputipoid, cpudes, marcaid 
                                     from cpu original where original.cpuid='$cpuid' " )
                              or die ( "error copiando...1". mysqli_error( $link )) ;
 
      $link->close() ;
?>
</body>
</html>

El problema que se me presenta es que al llamar a este ultimo .php, se ejucuta dos veces. Esto significa que si tengo un solo registro, me genera 2 registros nuevos con id 2 y 3.

He recorrido varias páginas buscando la solución, pero no la encuentro.
- Me indican verifcar lo que tengo en <head> por si hay algun <script> con src="". Pero no los hay.
- He usado variables de session como contador y efectivamente me muestra 2 ese contador.
- Probé con una una version de cpu_copy.php en donde utilice SOLO el codigo que esta entre las lineas 9 y 26 ( <?php y ?> ) y el problema NO se presenta.

la funcion INSERTHEAD() contiene lo siguiente (perdon por abusar de su tiempo):
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
function InsertHead() {
    ?>
    <title>TITULO</title>
    <!-- Meta -->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">
 
    <link href='http://fonts.googleapis.com/css?family=Lato:300,400,300italic,400italic' rel='stylesheet' type='text/css'>
    <link href='http://fonts.googleapis.com/css?family=Montserrat:400,700' rel='stylesheet' type='text/css'>  
 
    <!-- Global CSS -->
    <link rel="stylesheet" href="../css/bootstrap.min.css">
 
    <!-- Plugins CSS -->
    <link rel="stylesheet" href="../css/font-awesome.css">
    <link rel="stylesheet" href="../css/pe-icon-7-stroke.css">
    <link rel="stylesheet" href="../css/animate.min.css">
    <link rel="stylesheet" href="../css/flexslider.css">
 
    <!-- Theme CSS -->
    <link id="theme-style" rel="stylesheet" href="../css/styles-3.css">
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->   
 
     <!-- Javascript -->
    <script type="text/javascript" src="../js/jquery-1.11.2.min.js"></script>
 
    <script type="text/javascript" src="../js/jquery-migrate-1.2.1.min.js"></script>
    <script type="text/javascript" src="../js/bootstrap.min.js"></script>
 
    <script type="text/javascript" src="../js/bootstrap-hover-dropdown.min.js"></script>
    <script type="text/javascript" src="../js/jquery.inview.min.js"></script>
    <script type="text/javascript" src="../js/isMobile.min.js"></script>
    <script type="text/javascript" src="../js/back-to-top.js"></script>
    <script type="text/javascript" src="../js/jquery.placeholder.js"></script>
    <script type="text/javascript" src="../js/jquery.fitvids.js"></script>
    <script type="text/javascript" src="../js/jquery.flexslider-min.js"></script>
    <script type="text/javascript" src="../js/main.js"></script>
 
 
    <!--[if !IE]>-->
    <script type="text/javascript" src="../js/animations.js"></script>
    <!--<![endif]-->
 
 
    <script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
 
        ga('create', 'UA-24707561-12', 'auto');
        ga('send', 'pageview');
 
    </script>
 
    <?php
   }
?>
Entiendo que el problema esta en esta funcion. Y reitero NO SI ES ADECUADO HACERLO DE ESTA FORMA.

MUCHAS GRACIAS POR LA COLABORACION.
Javier.
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 xve

Script PHP se ejecuta dos veces

Publicado por xve (5513 intervenciones) el 06/08/2015 10:31:25
Hola Javier, creo que haces dos cosas muy extrañas...

1.- incrementar el valor manualmente... porque no indicas que el campo es autonumerico incremental?
2.- la vinculación la haces mal (creo)... tendrias que hacer un left join, ya que te devuelve tantos registros como vinculaciones...

Que te devuelve esta consulta si la ejecutas directamente en la base de datos:
1
select * from cpu original where original.cpuid='$cpuid'

pon como $cpuid un valor que exista... seguramente te devolverá dos registros.
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

Script PHP se ejecuta dos veces

Publicado por Javier (9 intervenciones) el 06/08/2015 13:18:09
Hola! Gracias por contestar!
Si! Entiendo que hacer autoincremental a ese campo sería lo optimo. Pero no entiendo porque es extraño que lo haga de esa forma (solo es una prueba) ...
Podrias detallarme como sería la consulta usando left join?

Como decia en el post, si saco InsertHead() NO hay problemas, es decir solo se agrega un registro. Entonces entiendo que el problema estaría en las lineas de esa funcion.


select * from cpu original where original.cpuid='$cpuid' , indicando en $cpuid un valor existente, me devuelve UN registro.

Gracias por tu ayuda!
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 xve

Script PHP se ejecuta dos veces

Publicado por xve (5513 intervenciones) el 06/08/2015 17:28:46
Hola Javier, si realmente te devuelve un solo registro, no hay mas, o hay otro insert en alguna parte del código o pasa dos veces por el archivo cpu_copy.php...

Prueba ha hacer una cosa... después del insert, pon un:
1
exit("Finalizo");

Si lo puedes probar y comentar, haber cuantos registros añade...
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

Script PHP se ejecuta dos veces

Publicado por Javier (9 intervenciones) el 06/08/2015 18:58:29
Hola master!
Puse eso y sigue el problema. Opté por dejar solo el codigo php sin tags de html body etc. y funciona sin problemas.
Por eso te decia que el problema debe estar en la funcion InsertHead.
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