Ver Mensaje Individual
  #6 (permalink)  
Antiguo 11/03/2011, 04:31
Avatar de zibor
zibor
 
Fecha de Ingreso: diciembre-2006
Mensajes: 80
Antigüedad: 17 años, 4 meses
Puntos: 1
De acuerdo Respuesta: Problemas al insertar datos PHP+SQL

Bueno, resulta que los problemas que tenía era por el tema de las conexiones de la BD "$link".
Como he hecho varias sentencias y por no liarme yo mismo con mi propio codigo, he utilizado funciones y el tema de las conexiones no las estaba gestionando correctamente.
Alfinal he pasado una misma conexión por todo el fichero, pasandolo a las funcíones para no liarme...

solucionado.

Código PHP:
$titulo = trim($_POST['titulo']);
$etiquetas = trim($_POST['etiquetas']);
$contenido = trim($_POST['textarea']);//contenido de la textarea
$privacidad = trim($_POST['privacidad']);
$fecha = date("Y-m-d H:i:s");

$link = abrirBD();
//funcion mysql_real_escape_string(): Escapa caracteres especiales en una cadena para ser usado en una sentencia SQL
$textarea = mysql_real_escape_string($contenido,$link);
$sql = "INSERT INTO tDocumentos VALUES ('','".$titulo."','".$textarea."','".$privacidad."','".$fecha."')";

if(mysql_query($sql,$link)){
    etiquetas($etiquetas,$fecha,$link);
    echo "<div class='infoEditor'>Documento guardado con exito.</div>";
    ?>
    <!-- redirecciono al inicio tras guardarse el documento.  -->
    <script language="javascript" type="text/javascript">
            setTimeout('location.href="index.php"',2000)
    </script>
    <?
}else{
    
errorBD($link);
}

cerrarBD($link);


function 
etiquetas($etiquetas,$fecha,$link){
    
//funcion chop: elimino los posibles saltos de lineas y espacios en blanco al final de la cadena
    
$etiquetas strtoupper(chop($etiquetas));
    
//funcion explode: divido una cadena especificando un separador, devolviendo un array
    
$eti explode(",",$etiquetas);
    
$arrEti count($eti);
    for(
$i 0$i $arrEti$i++){
        
$etiqueta trim($eti[$i]);
        echo 
$etiqueta."<br>";
        
$sql "SELECT id FROM tEtiquetas WHERE nombre='".$etiqueta."'";
        
$resul=mysql_query($sql,$link);
        
$total=mysql_num_rows($resul);
        
//compruebo por el numero de resultados $total si existe la etiqueta o no.
        
if($total == 0){
            
//insertar nueva etiqueta.
            
$sql "INSERT INTO tEtiquetas VALUES ('','".$etiqueta."')";
            if(
mysql_query($sql,$link)){
                
$sql "SELECT id FROM tEtiquetas WHERE nombre='".$etiqueta."'";
                
$resul=mysql_query($sql,$link);
                
$total=mysql_num_rows($resul);
                
//compruebo por el numero de resultados $total si existe la etiqueta o no.
                
if($total != 0){
                    while (
$row mysql_fetch_array($resul)) {
                        
insertarEtiDocu($row["id"],$fecha,$link);
                    }
                }else{
                    
errorBD($link);
                }
            }else{
                
errorBD($link);
            }
        }else{
            
//existe etiqueta.
            
while ($row mysql_fetch_array($resul)) {
                
insertarEtiDocu($row["id"],$fecha,$link);
            }
        }
    }
}


function 
insertarEtiDocu($idEti,$fecha,$link){
    
$sql "SELECT id FROM tDocumentos WHERE fecha = '".$fecha."'";

    
$resul=mysql_query($sql,$link);
    
$total=mysql_num_rows($resul);

    if(
$total == 1){
        while (
$row mysql_fetch_array($resul)) {
            
$sql "INSERT INTO DocuEti VALUES (".$row["id"].",".$idEti.")";
            if(!
mysql_query($sql,$link)){
                
errorBD($link);
            }
        }
    }else{
        echo 
"error en insertarEtiDocu.";
    }
}

PD: Kev_Joseph eso no falla por dos razones.
- así es una manera de poner una sentencia SQL con variables PHP respetando las comillas que se requiere para la sentencia de la BD.
- Ese no es el fallo, pues aun dandome los problemas que he comentado, insercciones me hacia... pero no todas las que debía hacer...