faults when handling an object

0

I am creating a page to store the information of several disks, which is linked to a phpmyadmin database. Inserting works for me, but when consulting, editing, searching and deleting I do not find the created object well. This is the index_discos.php file:

<html>
    <head>
        <title>Gestor de discos</title>
        <style type="text/css">
            <!--input{
                font-family:Arial,Helvetica;
                font-size:14;
                color:#000033;
                font-weight:normal;
                border-color:#999999;
                border-width:1;
                background-color:#FFFFFF;
            }-->
        </style>
    </head>
    <body bgcolor="#C0C0C0" link="blue" vlink="blue" alink="blue">
        <font face="arial,helvetica">
            <table border="0" align="center" cellspacing="3" cellpadding="3" width="650">
                <tr><th colspan="2" width="100%" bgcolor="blue"><font size="6" color="white">Gestor de Discos</font></th>
                </tr></table><p>
<?php
    require("discos.php");
    $los_discos=new discos();
    echo "<center><p>
        <table border='0' width='600'><tr>
            <td valign=top align=center colspan=2>
                <form name='form1' mrthod='post' action=\"index_discos.php?operacion=buscar\">
                <font size ='-1'>Buscar por el campo <select name='campo_busqueda'>
                <option ";
            if((isset($_REQUEST["campo_busqueda"]))&&($_REQUEST["campo_busqueda"]=='titulo')) echo "selected";
            echo "Value=titulo>Título</option><option ";
            if((isset($_REQUEST["campo_busqueda"]))&&($_REQUEST["campo_busqueda"]=='interprete')) echo "selected";
            echo " Value=interprete>Intérprete</option></select>";
            if(!isset($_REQUEST["lo_q_busco"])) $_REQUEST["lo_q_busco"]="";
            echo "<p><input type='text' name='lo_q_busco' value='".$_REQUEST["lo_q_busco"]."' size='20'>";
            echo "<input type='submit' name='boton_buscar' value='Buscar!'>
                </font>
                </form>
            </td><td align=center>
                <form name='form2' method='post' action='index_discos.php?operacion=introduce&ver=0&nume=0#ancla'>
                <input type='submit' name='alta' value=\"Nuevo disco\">
                </form>
                <form name='form3' method='post' action='index_discos.php?operacion=listado'>
                <input type='submit' name='alta' value='Listado completo'>
                </form>
            </td>
        </tr></table>";
    if(isset($_REQUEST["operacion"])){
        if($_REQUEST["operacion"]=="listado") $los_discos->buscar("","titulo");
        elseif($_REQUEST["operacion"]=="buscar") $los_discos->buscar($_REQUEST["lo_q_busco"],$_REQUEST["campo_busqueda"]);
        elseif($_REQUEST["operacion"]=="introduce"){//ventana de alta o edición
            if($_REQUEST["ver"]==1) $caption="Datos del disco";
            else if($_REQUEST["nume"]>0) $caption="Modificar disco";
            else $caption="Alta de nuevo disco";
            echo "<p><hr><a name='ancla'></a><font color='blue' size=+1>$caption</font>";
            $los_discos->introduce($_REQUEST["nume"],$_REQUEST["ver"]);
        }elseif($_REQUEST["operacion"]=="exec_alta"){
            if($_REQUEST["titulo"]=="")
                echo "<center>No se puede realizar la operación: el campo 'Título' es obligatorio.</center><p>";
            elseif($_REQUEST["interprete"]=="")
                echo "<center>No se puede realizar la operación: el campo 'Intérprete' es obligatorio.</center><p>";
            else{
                $los_discos->add_disco($_REQUEST["registro"],$_REQUEST["titulo"],$_REQUEST["interprete"],$_REQUEST["estilo"],$_REQUEST["casa_discografica"],$_REQUEST["formato"],$_REQUEST["duracion"],$_REQUEST["anio"],$_FILES['imagen']);
                if($_REQUEST["registro"]>0) $caption="modificado";
                else $caption="dado de alta";
                echo "<p><center><font color='blue'> Se ha $caption correctamente el disco:<b>".$_REQUEST["titulo"]."</b> del intérprete <b>".$_REQUEST["interprete"]."</b></font></center><p>";
            }
        }elseif($_REQUEST["operacion"]=="borrar") $los_discos->del_disco($_REQUEST["nume"]);
    }else
        $los_discos->buscar("","titulo");
?>
</body>
</html>

And this is the disk.php file:

<?php
    function boton_ficticio($caption,$url){
        return "<table border=1 cellspacing=0 cellpadding=3 bgcolor=black>
            <tr>
                <td bgcolor='white'>
                    <font size='-1'>
                        <a href='$url'>$caption</a>
                    </font>
                </td>
            </tr>
        </table>";
    }
    define("SERVIDOR","localhost");
    define("USUARIO","root");
    define("CLAVE","");
    class discos{
        protected $db;
        function __construct($BD=""){
            try{
                if($BD!='')
                    $this->db=new PDO("mysql:host=".SERVIDOR.";dbname=".$BD.";charset=utf8",USUARIO,CLAVE,array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES 'utf8'"));
                else
                    $this->db=new PDO("mysql:host=".SERVIDOR.";charset=utf8",USUARIO,CLAVE,array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES 'utf8'"));
                $this->db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);
                $this->db->setAttribute(PDO::NULL_TO_STRING,true);
                if($BD==''){
                    $sql=file_get_contents('bases de datos.sql');
                    $this->ejecuta_SQL($sql);
                }
            }catch(PDOException $e){
                die("<p><h3>No se ha podido establecer la conexión.
                    <p>Compruebe si está activado el servidor de bases de
                    datos MySQL.</h3></p>\n<p>Error: ".$e->getMessage()."</p>\n");
            }
        }
        function __destruct(){
            if(isset($db))
                $db=null;
        }
        function add_disco($registro,$titulo,$interprete,$estilo,$casa_discografica,$formato,$duracion,$anio,$imagen){
            if(isset($imagen)&&($imagen['size']>0)){
                if($imagen['size']>80000)
                    die("<b>El fichero ocupa más de 80KB o no ha indicado su nombre en el formulario. No puede copiarse.</b>");
                if(is_uploaded_file($imagen['tmp_name'])&&!empty($imagen['tmp_name'])){
                    $tipo_fichero=explode("/",$imagen['type']);
                    if($tipo_fichero[0]=='image'){
                        if($registro>0){
                            $sql_script="SELECT imagen FROM discos WHERE id='$registro'";
                            $resultado=$this->ejecuta_SQL($sql_script);
                            $filas=$resultado->rowCount();
                            if($filas==0){
                                echo "<center>
                                    <table border=1 width=600 bordercolorlight='#FFFFFF' bordercolor='#FFFFFF' bgcolor='#C0C0C0'>
                                    <tr><td align=center valign=middle>
                                    <font size=+2>No se encuentra ningún registro</font>
                                    </td></tr></table></center>";
                            }else{
                                $myrow=$resultado->fetch_row();
                                if($imagen['name']<>$myrow[0]){
                                    $sql_script="SELECT id FROM discos WHERE imagen='".$myrow[0]."'";
                                    $this->ejecuta_SQL($sql_script);
                                    if($filas==1){
                                        unlink("imagenes/".$myrow[0]);
                                    }
                                }
                            }
                        }
                        move_uploaded_file($imagen['tmp_name'],'imagenes/'.$imagen['name']);
                    }else die("<b>Sólo se pueden subir ficheros de tipo imagen.</b>");
                }else die("<b>No se puede subir el fichero.</b>");
            }
            if($registro>0)
                $sql_script="UPDATE discos SET
                titulo='$titulo',interprete='$interprete',estilo='$estilo',
                casa_discografica='$casa_discografica',formato='$formato',
                duracion='$duracion',anio='$anio',imagen='".$imagen['name']."'
                WHERE id=$registro";
            else
                $sql_script="INSERT INTO discos
                (titulo,interprete,estilo,casa_discografica,formato,duracion,anio,imagen)
                VALUES('$titulo','$interprete','$estilo','$casa_discografica','$formato','$duracion','$anio','".$imagen['name']."')";
            $this->ejecuta_SQL($sql_script);
            $this->buscar("","titulo");
        }
        function nume_discos(){
            $sql_script="SELECT * FROM discos";
            $resultado=$this->ejecuta_SQL($sql_script);
            $filas=$resultado->rowCount();
            return $filas;
        }
        function del_disco($id_to_del){
            $sql_script="SELECT imagen FROM discos WHERE id='$id_to_del'";
            $resultado=$this->ejecuta_SQL($sql_script);
            $filas=$resultado->rowCount();
            if($filas==0){
                echo "<center>
                    <table border=1 width=600 bordercolorlight='#FFFFFF' bordercolor='#FFFFFF' bgcolor='#C0C0C0'>
                    <tr><td align=center valign=middle>
                    <font size=+2>No se encuentra ningún registro</font>
                    </td></tr></table></center>";
            }else{
                $myrow=$resultado->fetch_row();
                $sql_script="SELECT id FROM discos WHERE imagen='".$myrow[0]."'";
                $resultado=$this->ejecuta_SQL($sql_script);
                $filas=$resultado->rowCount();
                if($filas==1){
                    unlink("imagenes/".$myrow[0]);
                }
            }
            $sql_script="delete FROM discos WHERE id=$id_to_del";
            $this->ejecuta_SQL($sql_script);
            $this->buscar("","titulo");
        }
        function introduce($id_to_edit,$ver){
            $campos=array(
                    0=>array(0=>"titulo",1=>"Título",2=>40,3=>100,4=>""),
                    1=>array(0=>"interprete",1=>"Intérprete",2=>30,3=>50,4=>""),
                    2=>array(0=>"estilo",1=>"Estilo",2=>30,3=>50,4=>""),
                    3=>array(0=>"casa_discografica",1=>"Casa Discográfica",2=>30,3=>50,4=>""),
                    4=>array(0=>"formato",1=>"Formato (CD/MC)",2=>30,3=>50,4=>""),
                    5=>array(0=>"duracion",1=>"Duración (min)",2=>3,3=>3,4=>""),
                    6=>array(0=>"anio",1=>"Año prod.",2=>4,3=>4,4=>""),
                    7=>array(0=>"imagen",1=>"Imagen",2=>15,3=>-1,4=>""));
            if($id_to_edit>0){
                $sql_script="SELECT
                titulo,interprete,estilo,casa_discografica,formato,duracion,anio,imagen
                FROM discos WHERE id='$id_to_edit'";
                $resultado=$this->ejecuta_SQL($sql_script);
                $filas=$resultado->rowCount();
                if($filas==0){
                    echo "<center>
                        <table border=1 width=600 bordercolorlight='#FFFFFF' bordercolor='#FFFFFF' bgcolor='#C0C0C0'>
                        <tr><td align=center valign=middle>
                        <font size=+2>No se encuentra ningún registro</font>
                        </td></tr></table></center>";
                }else{
                    $myrow=$resultado->fetch();
                    for($i=0;$i<count($campos);$i++)
                        $campos[$i][4]=$myrow[$i];
                }
            }
            if($ver==0)
                echo "<form name='form9' enctype=multipart/form-data method='post' action=\"index_discos.php?operacion=exec_alta\">";
                echo "<table border='0' cellspacing='10' cellpadding='0' align='center' width='600'>";
                for($i=0;$i<count($campos);$i++){
                    echo "<tr><td bgcolor='blue' align=center width=140>
                        <font size=-1 color='white'>".$campos[$i][1]."</font>
                        </td><td>";
                    if($ver==1){
                        if($campos[$i][3]>-1) echo "<font size=-1><b>".$campos[$i][4]."</b></font>";
                        else if($campos[$i][4]<>'') echo "<IMG src='imagenes/".$campos[$i][4].">";
                        else echo "<font size=-1><b>Sin imagen</b></font>";
                    }else
                        if($campos[$i][3]>-1)
                            echo "<input type='text' name='".$campos[$i][0]."' size='".$campos[$i][2]."' value=\"".$campos[$i][4]."\" maxlength='".$campos[$i][3]."'>";
                        else
                            echo "<input type='file' name='".$campos[$i][0]."' size='".$campos[$i][2]."'><input type='hidden' name='MAX_FILE_SIZE' value='80000'>";
                    echo "</td></tr>";
                }//for
                echo "</table><center>";
                if($ver==0){
                    echo "<input type='hidden' name='registro' value='$id_to_edit'>";
                    if($id_to_edit>0)
                        echo "<input type='submit' name='pulsa' value=\"Modificar disco\">";
                    else
                        echo "<input type='submit' name='pulsa' value=\"Alta disco\">";
                }
                echo "</center>";
                if($ver==0) echo "</form>";
        }
        function buscar($lo_q_busco,$campo_busqueda){
            $sql_script="SELECT * FROM discos
                WHERE ".$campo_busqueda." like '%".$lo_q_busco."%'
                ORDER BY ".$campo_busqueda;
            $resultado=$this->ejecuta_SQL($sql_script);
            $filas=$resultado->rowCount();
            if($filas==0){
                echo "<center>
                    <table border=1 width=650 bordercolorlight='#FFFFFF' bordercolor='#FFFFFF' bgcolor='#C0C0C0'>
                    <tr><td align=center valign=center>
                    <h2>No se encuentra ningún registro</h2>
                    </td></tr></table></center>";
            }else
                echo "<table border='0' cellspacing='1' cellpadding='1' align='center' width='650'>
                    <tr>
                        <th bgcolor='blue'><font color='white'>T&iacute;tulo</font></th>
                        <th bgcolor='blue'><font color='white'>Int&eacute;rprete</font></th>
                        <th bgcolor='blue'><font color='white'>Estilo</font></th>
                        <th bgcolor='blue'><font color='white'>Casa Disco</font></th>
                        <th bgcolor='blue' colspan='3'><fontT color='white'>Operaciones</font></th>
                        </tr>";
                    while($myrow=$resultado->fetch()){
                        echo "<tr>
                            <td><font size='-1'><b>".$myrow[1]."</b></font></td>
                            <td><font size='-1'><b>".$myrow[2]."</b></font></td>
                            <td><font size='-1'><b>".$myrow[3]."</b></font></td>
                            <td><font size='-1'><b>".$myrow[4]."</b></font></td>
                            <td>".boton_ficticio("Consulta","index_discos.php?operacion=introduce&ver=1&nume=".$myrow[0]."#ancla")."</td>
                            <td>".boton_ficticio("Editar","index_discos.php?operacion=introduce&ver=0&nume=".$myrow[0]."#ancla")."</td>
                            <td>".boton_ficticio("Borrar","index_discos.php?operacion=borrar&nume=".$myrow[0])."</td>
                            </tr>";
                    }
                    echo "</table><p>
                    <table><tr>
                    <td><font color=blue size='-1'>El nº total de discos es: ".$this->nume_discos()."</font><p></td>
                    </tr></table>";
        }
        function ejecuta_SQL($sql){
            $resultado=$this->db->query($sql);
            if(!$resultado){
                echo"<h3>No se ha podido ejecutar la consulta: <pre>$sql</pre><p><u> Errores</u>: </h3><pre>";
                print_r($this->db->errorInfo());
                die ("</pre>");
            }
            return $resultado;
        }
    }
?>
    
asked by Charly Utrilla 09.11.2018 в 18:01
source

0 answers