php + mysql

adrie93

Buenas tengo que hacer un trabajo de enviar a través de un formulario una serie de variables a una base de datos , creo que el código esta bien pero me falta algo ya que los datos no llegan a la base de datos.

Alguna solución?

Cargador.html

<html>
<form name="insertar" method="post" action="insertar.php">
   Titulo  :<input type="Text" name="titulo"><br>
   Texto:<input type="Text" name="texto"><br>
   Categoria :<input type="Text" name="categoria"><br>
   Fecha   :<input type="date" name="fecha"><br>
 <input name="insertar" type="submit">Guardar
</form> 
</html>

insertar.php


<?php

   // Conectar con el servidor de base de datos
      $conexion = mysql_connect ("localhost", "cursophp", "Abraham93")
         or die ("No se puede conectar con el servidor");

   // Seleccionar base de datos
      mysql_select_db ("lindavista")
         or die ("No se puede seleccionar la base de datos");
		 
	  $instruccion ="set names utf8";
	 $consulta =mysql_query ($instruccion,$conexion)
	 or die ("Fallo en la consulta");

   if (isset($_POST['insertar']))
   {
      $titulo=$_POST['titulo'];
      $texto=$_POST['texto'];
      $categoria=$_POST['categoria'];
      $fecha=$_POST['fecha'];
  }

  $sql = mysql_query("INSERT INTO noticias (titulo,texto,categoria,fecha) VALUES ('$titulo','$texto','$categoria','$fecha')");

if ($sql){
   echo "insertado";

}
else {
echo "no insertado";

}
   mysql_close ($conexion);
?>


KoRMuZ

Dónde te da el fallo? Qué fallo da?

1 respuesta
adrie93

#2 no da ningún fallo , pero en la base de datos no muestra que se añadan.

RaymaN

Cambia "Fallo en la consulta" por mysql_error().

1 respuesta
eXtreM3

#1 mirando tu código no veía errores así que he copiado en local y a mí sí que me lo ha insertado, con tu código tal cual sin tocar nada

He puesto los 4 campos como varchar, cómo los tienes tú?

1 1 respuesta
13500

prueba:


$sql = mysql_query("INSERT INTO noticias (titulo,texto,categoria,fecha) VALUES ('$titulo','$texto','$categoria','$fecha')",$conexion) or die("Error: ".mysql_error());
1 1 respuesta
adrie93

#5 Los campos son estos:

#6 ahora probare a ver

#6 muchas gracias , he probado tu código y me ha funcionado , me he dado cuenta que con el urusario que intentaba entrar no tenia permisos...

Tengo que añadir el nombre de una imagen a demás de todo lo anterior y no me va

Errores:

spoiler
<?php

   // conectar con el servidor de base de datos
      $conexion = mysql_connect ("localhost", "cursophp", "Abraham93")
         or die ("No se puede conectar con el servidor");

   // seleccionar base de datos
      mysql_select_db ("lindavista")
         or die ("No se puede seleccionar la base de datos");
	
  $instruccion = "set names utf8";
  $consulta = mysql_query ($instruccion, $conexion)
     or die ("Fallo en la consulta");

     if (isset($_POST['insertar']))
     {
        $titulo=$_POST['titulo'];
        $texto=$_POST['texto'];
        $categoria=$_POST['categoria'];
        $fecha=$_POST['fecha'];
        $imagen=$_FILES['imagen']['name'];
     

     if (file_exists("img/" .$_FILES["imagen"]["name"])) 
    {
      echo "&iexcl;Error!&nbsp;".$_FILES["imagen"]["name"]."&nbsp;ya la has subido hoy <br /><br />"  ;
      echo '<input type="button" value="Vuelve a Intentarlo" onclick="history.back()" />';
      return false;
    } 
    else 
    {
     //Si no hay absolutamente nigun error de ningun tipo guardaremos el nombre con la fecha actual seguido del nombre de la imagen 
      move_uploaded_file($_FILES["imagen"]["tmp_name"], "img/" .$_FILES["imagen"]["name"]);
    }



    /* $sql="INSERT INTO noticias (titulo,texto,categoria,fecha) VALUES ('$_POST[titulo]','$_POST[texto]','$_POST[categoria]','$_POST[fecha]')";*/
     $sql = mysql_query("INSERT INTO noticias (titulo,texto,categoria,fecha,imagen) VALUES ('$titulo','$texto','$categoria','$fecha','$imagen')",$conexion) or die("Error: ".mysql_error());

     if ($sql){
        echo "Insertado correctamente";
     }
     
  }
     else{
        echo "No Insertado";
     }
     mysql_close ($conexion);


     ?>

Edito por 4 vez ya me funciona me faltaba <form enctype="multipart/form-data"

S

Por curiosidad para que es el trabajo? por que estais usando una versión de PHP totalmente obsoleta, poco tiene que ver con nada actual.

1 2 respuestas
adrie93

#8 una practica de grado superior de informática..

willsmith

Que tiempos aquellos con EasyPHP

2
adrie93

He echo una pagina para borrar el registro anteriormente creado y me da fallo en la consulta: Fallo en la consulta alguien sabe porque?

<?PHP

   // Conectar con el servidor de base de datos
      $conexion = mysql_connect ("localhost", "cursophp", "Abraham93")
         or die ("No se puede conectar con el servidor");

   // Seleccionar base de datos
      mysql_select_db ("lindavista")
         or die ("No se puede seleccionar la base de datos");



//Variables 
$borrar = $_REQUEST['Eliminar'];
$nfilas = count ($borrar);

for ($i=0; $i<$nfilas; $i++)
{
$instruccion = "SELECT * FROM noticias WHERE id = $borrar[$i]";
$consulta = mysql_query ($instruccion, $conexion) 

  or die ("Fallo en la consulta");

$resultado = mysql_fetch_array ($consulta);
}

for ($i=0; $i<$nfilas; $i++)
      {
        $instruccion = "DELETE *  FROM noticias WHERE id = $borrar[$i]";
        $consulta = mysql_query ($instruccion, $conexion)
            or die ("Fallo en la eliminación");

        if ($resultado['imagen'] != "")
     {
        $nombreFichero = "img/" . $resultado['imagen'];
        unlink ($nombreFichero);
     }
  }

mysql_close ($conexion);
header('Location: ejercicio1.php');
?>

2 respuestas
Scottie

#11 El error que te da y tal, tbn seria de ayuda ;)

1 respuesta
adrie93

#12 Fallo en la consulta

2 respuestas
Scottie

#13 Que yo recuerde, las consultas las concatenaba asi:

"SELECT * FROM noticias WHERE id = ".$borrar[$i];

aunque no se si de tu manera es correcta... :S

1 respuesta
m0rG

#11

El error se debe casi seguro a lo que comenta #14. Puedes incluir nombres de variables en cadenas con comillas dobles ( " ) y PHP los expande sustituyendo por sus valores correspondientes. Para hacer lo mismo con expresiones (en tu caso acceso al valor de un miembro de un array) hay dos opciones; una es concatenar la cadena literal con la expresión usando el "." (el ejemplo de #13):

"SELECT * FROM noticias WHERE id = ".$borrar[$i];

Y otra es delimitar la expresión con {} (curly braces) dentro de la cadena:

"SELECT * FROM noticias WHERE id = {$borrar[$i]}";

Otro buen consejo que te han dado en #4 es utilizar la función mysql_error() para obtener el error generado por MySQL (tiene más información que un simple "Fallo en la consulta" y te ayudará a depurar errores más rápidamente). En tu caso podrías sustituir la línea:

$consulta = mysql_query ($instruccion, $conexion)

  or die ("Fallo en la consulta");

por algo como:

$consulta = mysql_query ($instruccion, $conexion)

  or die ("Fallo en la consulta: " . mysql_error());
Scottie

#8 Por curiosidad, que es lo que se maneja actualmente? una instancia de la clase PDO? ^^

1 respuesta
S

#16
Desde PHP 5 (hace 10 años o mas) es un lenguaje orientado a objetos y se programa como tal, por no hablar de esas funciones de mysql que están deprecated.
Por no hablar de esos manejos de errores con "die" , no se, les están enseñando anti patterns.

1 1 respuesta
RaymaN

#17 una cosa es la versión de php, que poco o nada tiene que ver aquí, y otra la api para conectar con mysql, que efectivamente está obsoleta. Lo de POO no tiene sentido alguno.

http://www.php.net/manual/es/mysqlinfo.api.choosing.php

1 respuesta
S

#18
Pues claro que tiene que ver, con versiones antiguas no había soporte para objetos por lo que el PHP era un lenguaje de scripting con códigos espaguetis horribles (como el que se ve aquí).
Hoy en día eso no es así. Por eso me sorprende que estén enseñando esta forma de programar, obsoleta desde hace muchos años.

2 respuestas
RaymaN

#19 ¿entonces cualquier código php que no esté hecho en poo está mal? Es que no te entiendo, estás argumentando (mal) algo que no tiene nada que ver con el thread.

tada

#19 Para un código de 30 líneas y un formulario no tiene sentido usar POO. Que esperas, que usen un framework solo para eso? Lo único que veo mal yo es que no use PDO, pero para algo simple lo mismo da.

1 mes después
adrie93

Como podría hacer en php que si el nombre de usuario que introducen en un formulario ya esta en la base de datos no se registre?

crear-usuario.php

<?php
    //Incluimos el archivo de conexión
    require 'variables.php';
  
if (isset($_POST{'submit'})) { if (isset($_POST['usuario']) && isset($_POST['clave'])) { $usuario=$_POST['usuario']; $clave=$_POST['clave']; $pass=md5($clave); $result = $conexion->query("SELECT usuario from usuarios where usuario ='$usuario'"); $resutlt = mysql_num_rows($result); if($result > 0) { echo "Nombre de usuario ya registrado , prueba con otro"; } else { $insert=$conexion->query("INSERT INTO usuarios (usuario, clave) VALUES ('$usuario', '$pass')"); echo '<font size="10"><p>Usuario Creado Correctamente </p></font>'; echo'<br>'; echo '<a href="crear-usuario.html" class="button"> Crear otro usuario </a>'; echo'<br>'; echo '<a href="crear-usuario.html" class="button"> Login Usuario </a>'; } } }

?>

Error:

1 respuesta
Fastestwat

#22 Tienes mal escrito el $result por eso te da error.

No entiendo que hacen enseñandote mysql... en vez de mysqli o pdo.

Aún así..

$sql=mysql_query("SELECT FROM users (username, password, email) WHERE username=$fusername");
 if(mysql_num_rows($sql)>=1)
   {
    echo"name already exists";
   }
 else
    {
   //insert query goes here
    }

Aprende a usar la documentación.

adrie93

Lo he puesto en mysqli , creo que lo he puesto bien

$sql=$conexion->query("SELECT FROM usuarios (usuario) WHERE usuario=$usuario"); 
				if(mysql_num_rows($sql)>=1)   
{
echo "Nombre de usuario ya registrado , prueba con otro nombre";
} else {
$insert=$conexion->query("INSERT INTO usuarios (usuario, clave) VALUES ('$usuario', '$pass')"); echo '<font size="10"><p>Usuario Creado Correctamente </p></font>'; echo'<br>'; echo '<a href="crear-usuario.html" class="button"> Crear otro usuario </a>'; echo'<br>'; echo '<a href="crear-usuario.html" class="button"> Login Usuario </a>'; }

Me falla lo de num_rows :mysql_num_rows() expects parameter 1 to be resource

1 respuesta
xMarston

#24 entonces no uses una función de mysql para saber si retorna algo, debes usar lo siguiente:

if ($result->num_rows > 0)
1 respuesta
adrie93

#25 Quedaria asi no?

$sql=$conexion->query("SELECT FROM usuarios (usuario) WHERE usuario=$usuario"); 
			    if ($sql->num_rows > 0)
				{    
echo "Nombre de usuario ya registrado , prueba con otro nombre";
}
1 respuesta
xMarston

#26 sí.

1 respuesta
adrie93

#27 Me da este error :
Notice: Trying to get property of non-object in

adrie93

Al final lo he hecho así

<?php
require '../connection/variables.php';

if (isset($_POST['submit'])) {


$usuario = mysqli_real_escape_string($conexion, $_POST['usuario']);
$clave = mysqli_real_escape_string($conexion, $_POST['clave']);
$pass = md5($clave);

 if ($usuario && $clave) 
 {

  $query= mysqli_query($conexion, "SELECT * FROM usuarios WHERE usuario='".$usuario."'");
  $checkuser= mysqli_num_rows($query);

  if($checkuser == 1) 
  {
    echo "Nombre de usuario ya registrado , prueba con otro nombre";  
echo '<br>'; echo '<a href="crear-usuario.html" class="button"> Crear Usuario </a>'; } else {
$query= mysqli_query($conexion,"INSERT INTO usuarios (usuario, clave) VALUES ('$usuario', '$pass')"); echo '<font size="10"><p>Usuario Creado Correctamente </p></font>'; echo'<br>'; echo '<a href="crear-usuario.html" class="button"> Crear otro usuario </a>'; echo'<br>'; echo '<a href="Login.html" class="button"> Login Usuario </a>'; } } } ?>
txandy

Bueno estaría bien usar bind params para los parámetros y así mejorar la seguridad de la aplicación

http://us1.php.net/manual/es/mysqli-stmt.bind-param.php

Usuarios habituales