• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • Conoce los Días Naranjas de PcComponentes: descuentos de hasta un 40% en tecnología. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

Restar un Stock por php y sql

synysevend90

Nuevo
Registrado
27 Nov 2016
Mensajes
41
Puntos
8
Edad
33
Buenas tardes, estoy realizando una BBDD para el stock de un supermercado en un proyecto y estado revisando varios foros etc etc y no soy capaz de dar con el error con el que me encuentro. Se supone que "esta casi" correcto o asi pienso yo.
Os paso el codigo
<script>
function insertar(){
document.formulario.submit();
}
</script>
<?php
if(isset($_POST["productos"])) {
$productos = $_POST["productos"];
$cantidad = $_POST["cantidad"];
// verifico que sea menor o igual el pedido al stock
if($cantidad > cantidad) {
echo "La cantidad es superior a lo que hay en la tienda";
}else{ // actualizo la db con los datos nuevos!
mysql_query("UPDATE supermercado SET cantidad = cantidad - '$cantidad' WHERE productos = '$productos'");
}
}
// VARIABLES GENERALES:
$servidor="127.0.0.1"; // También valdría "localhost"
$usuario_bd="root";
$clave_bd="";
$basedatos="prueba6";
$tabla="supermercado"; // Con los campos: id (int autoinc.), nombre(char 50) y telefono(char 10).
;
$conexion=mysql_connect($servidor,$usuario_bd,$clave_bd);
if (!$conexion){
echo "ERROR: Imposible establecer conexión con el servidor.<br>\n";
exit; // Si no pudo conectarse nos salimos del código php directamente...
}
$resultado=mysql_select_db($basedatos, $conexion);
if (!$resultado){
echo "ERROR: Imposible seleccionar la base de datos $basedatos.<br>\n";
}
else{
}
$sql1 = "SELECT * FROM $tabla where clase='frutas' order by precio";
$resultado=mysql_db_query($basedatos, $sql1, $conexion);
if(!$resultado){
echo "Imposible obtener los registros de la tabla $tabla.<br>\n";
}
else{
echo "<br>Registros de $tabla:<br>\n";
echo "<table border=1 cellspacing=0 cellpadding=2 bordercolor=blue><tr><td>Producto</td><td>Cantidad disponible</td><td>Precio</td><td>Clase</td>";
while ($fila = mysql_fetch_row($resultado)){
echo " <tr><td>$fila[0]</td>\n";
echo "<td>$fila[1]</td>\n";
echo "<td>$fila[2]</td>\n";
echo "<td>$fila[3]</td>\n";
}echo "</table>\n";
}
echo "<div style=text-align:center;>";
echo "<form method='post' action='frutas1.php' name='formulario'>";
echo "Producto: </br><input type='text' name='productos' id='productos' ><br>";
echo "Cantidad:</br> <input type='text' name='cantidad' id='cantidad' ><br>" ;
echo "<input type='submit' value='insertar' id='insertar' onclick='insertar()'>";
echo "</form>";
echo "</div>";
?>
 
Última edición:
Buenas,

Empecemos por los errores de sintaxis...

Tienes un espacio que no corresponde aquí:
Código:
$conexion=mysql_connect($servidor,$usuario_bd,$cla ve_bd);
Debería ser así, en todo caso:
Código:
$conexion=mysql_connect($servidor,$usuario_bd,$clave_bd);

Revisa que las credenciales que proporcionas (en este caso sin contraseña) son correctas.

Y vamos ya a aspectos referentes al funcionamiento...

No sé si el script se llama frutas1.php, si no, sustituye esta línea:
Código:
echo "<form method='post' action='frutas1.php' name='formulario'>";
Por esta otra:
Código:
echo "<form method='post' action='' name='formulario'>";
Dejando la propiedad action vacía, ya le indicas al formulario que debe subirse hacia el mismo script donde se encuentra.

Lo más importante y probablemente de lo que no te estés dando cuenta es de que no puedes usar myslq_query tal y como lo estás usando aquí:
Código:
mysql_query("UPDATE supermercado SET cantidad = cantidad - '$cantidad' WHERE productos = '$productos'");
Por que no tienes ninguna conexión abierta con el servidor en ese momento. Deberías usar mysql_db_query, como usas para hacer el SELECT, además de que te unificará la manera de proceder del código, pero para eso debes definir las variables antes de todas las consultas, por tanto el bloque de //VARIABLES GENERALES lo cambiaremos al principio del script.

Por último, para que esté técnicamente correcto, te faltaría añadir un valor máximo de stock, de tal manera que quedaría el fragmento de la actualización más o menos así:
Código:
$maxStock = '20';
if($cantidad > $maxStock) {
echo "La cantidad es superior a lo que hay en la tienda";
}else{ // actualizo la db con los datos nuevos!
    $sqlSuma = "UPDATE supermercado SET cantidad = cantidad - '$cantidad' WHERE productos = '$productos'";
    mysql_db_query($basedatos,$sqlSuma,$conexion);
}

Referente al código javascript para subir el formulario que utilizas, es verdaderamente inútil, no necesitas una función para subir el formulario, con que el botón sea de tipo submit basta.

El código completo quedaría así funcionando:

Código:
<?php
// VARIABLES GENERALES:
$servidor="127.0.0.1"; // También valdría "localhost"
$usuario_bd="root";
$clave_bd="";
$basedatos="prueba6";
$tabla="supermercado"; // Con los campos: id (int autoinc.), nombre(char 50) y telefono(char 10).
$conexion=mysql_connect($servidor,$usuario_bd,$clave_bd);
if (!$conexion){
    echo "ERROR: Imposible establecer conexión con el servidor.<br>\n";
    exit; 
    // Si no pudo conectarse nos salimos del código php directamente...
}

$resultado=mysql_select_db($basedatos, $conexion);
if (!$resultado){
    echo "ERROR: Imposible seleccionar la base de datos $basedatos.<br>\n";
}

if(isset($_POST["productos"])) {
    $productos = $_POST["productos"];
    $cantidad = $_POST["cantidad"];
    // verifico que sea menor o igual el pedido al stock
    $maxStock = '20';
    if($cantidad > $maxStock) {
        echo "La cantidad es superior a lo que hay en la tienda";
    }else{ 
        // actualizo la db con los datos nuevos!
        $sqlSuma = "UPDATE supermercado SET cantidad = cantidad - '$cantidad' WHERE productos = '$productos'";
        mysql_db_query($basedatos,$sqlSuma,$conexion);
    }
}

$sql1 = "SELECT * FROM $tabla where clase='frutas' order by precio";
$resultado=mysql_db_query($basedatos, $sql1, $conexion);
if(!$resultado){
echo "Imposible obtener los registros de la tabla $tabla.<br>\n";
}
else{
    echo "<br>Registros de $tabla:<br>\n";
    echo "<table border=1 cellspacing=0 cellpadding=2 bordercolor=blue><tr><td>Producto</td><td>Cantidad disponible</td><td>Precio</td><td>Clase</td>";
    while ($fila = mysql_fetch_row($resultado)){
        echo " <tr><td>$fila[0]</td>\n";
        echo "<td>$fila[1]</td>\n";
        echo "<td>$fila[2]</td>\n";
        echo "<td>$fila[3]</td>\n";
    }
    echo "</table>\n";
}
echo "<div style=text-align:center;>";
echo "<form method='post' action='' name='formulario'>";
echo "Producto: </br><input type='text' name='productos' id='productos' ><br>";
echo "Cantidad:</br> <input type='text' name='cantidad' id='cantidad' ><br>" ;
echo "<input type='submit' value='insertar' id='insertar'>";
echo "</form>";
echo "</div>";
?>

Depués como consejos muy muy importantes, te recomendaría usar como mínimo las funciones mysqli y no mysql ya que estas están obsoletas.

Espero haberte ayudado.

Saludos!
 
Arriba