auxilio con codigo php y msql !!

cherrysn

Bovino maduro
#1
hola!!

pues aqui ando pidiendo ayuda a alguna alma caritativa que quiera darme un poco de su tiempo; estoy atorada con un codigo de php que necesito lograr para un trabajo escolar, sobre una pagina de venta de flores por internet (ficticia) y por mas que lo reviso y reviso no se en donde esta el error.

no trato de que me hagan la tarea ni mucho menos, pero llevo ya 3 dias con este codigo y por mas que le modifico no puedo hacer que entren los datos. :cansado: es el último recurso que me queda, el pedir ayuda..

apenas estoy empezando con esto del php, pero creo que ya me exprimi los sesos lo mas que pude, ojala me explique bien, y alguien pueda ayudarme...

desde ahora, muchas gracias por el tiempo que se tomen en leer :)



lo cuento a grandes rasgos: tengo una base de datos con estas tablas:

[/IMG]

y el objetivo es lograr hacer una insercion, como si se hiciera un nuevo pedido.

y este es el codigo .php que llevo:



<html>
<head>
<title>Pedidos personalizados</title>
<style type="text/css">
select{
font-family: Eras Light ITC;
font-size: 12;
color: #6E6E6E;
}
body{
font-family: Eras Light ITC;
font-size: 13;
color: #6E6E6E;
}
table{
font-family: Eras Light ITC;
font-size: 14;
color: #6E6E6E;
border-color: CC3366;
border-width: 3px;
}
</style>
</head>

<body>
<h3>Realiza tu pedido<br>desde aquí!</b></h3>
<?php
include("C:\AppServ\www\pagina_floreria\cgi-bin\acceso.php");
if (isset($_POST['submit'])) {
if (empty($_POST['no_pedido'])) {
echo "<p>Introduzca el <b>pedido</b>.</p>";
} else {

$sql0 = "SELECT * FROM arreglo WHERE arreglo.nombre_arreglo='$_POST[nombre_arreglo]'"; //folio de pedido
$result0 = mysql_query($sql0);
while ($row = mysql_fetch_assoc($result0)) {
$precioarre =$row['precio'];
$exist=$row['existe_arreglo'];
}
$total=$_POST['cantidad'] * $precioarre;
$fechafactura=date("Y-n-j");


if ($exist>=$_POST['cantidad']){
$sql1 = "INSERT INTO pedido(no_pedido, fecha, total, id_sucursal, id_usuario)
VALUES ($_POST[no_pedido], '$fechafactura', $total, '$_POST[id_sucursal]', '$_POST[id_usuario]')";
$result1 = mysql_query($sql1);


$sql7 = "INSERT INTO pedido_destinatario(no_pedido, id_dest)
VALUES ($_POST[no_pedido], '$_POST[id_dest]')";
$result7 = mysql_query($sql7);


$sql2 = "INSERT INTO pedido_arreglo(no_pedido, id_arreglo, fecha_entrega)
VALUES ($_POST[no_pedido], '$_POST[id_arreglo]', '$_POST[fechaent]')";
$result2 = mysql_query($sql2);
$nexist=$exist-$_POST['cantidad'];


$sql3= "UPDATE arreglo SET existencia=$nexist WHERE existe_arreglo='$_POST[id_arreglo]'";
$result3=mysql_query($sql3);


if (($result1) && ($result2)&& ($result3)) {
echo "<p>Pedido enviado, Gracias!</p>";
} else {
echo "<p>Pedido <b>no</b> procesado.</p>";
}
}
else {
echo "<p>Pedido <b>no</b> agregado intenta con menor cantidad.</p>";
}

}
echo "[ <a href='javascript:history.back()'>Volver</a> ] -
[ <a href='$_SERVER[PHP_SELF]'>Introducir nueva fila</a> ]";
} else {

$sql4 = "SELECT * FROM cliente";
$result4 = mysql_query($sql4);
$campocli = "";
while ($row = mysql_fetch_assoc($result4)) {
$campocli .= "<option value='$row[id_usuario]'>$row[nombre_us]</option>\n";
}
$sql5 = "SELECT * FROM arreglo";
$result5 = mysql_query($sql5);
$campoarre = "";
while ($row = mysql_fetch_assoc($result5)) {
$campoarre .= "<option value='$row[id_arreglo]'>$row[nombre_arreglo]</option>\n";
}
$sql6 = "SELECT * FROM sucursal";
$result6 = mysql_query($sql6);
$camposuc = "";
while ($row = mysql_fetch_assoc($result6)) {
$camposuc .= "<option value='$row[id_sucursal]'>$row[estado_suc]</option>\n";
}

$sql8 = "SELECT * FROM destinatario";
$result8 = mysql_query($sql8);
$campodest = "";
while ($row = mysql_fetch_assoc($result8)) {
$campodest .= "<option value='$row[id_dest]'>$row[nombre_des]</option>\n";
}

$fecha=date("Y-n-j");



echo <<<FORMULARIO
<form action="{$_SERVER['PHP_SELF']}" method="post">
<table>
<tr><td>no_pedido:</td><td><input type="text" name="no_pedido"></td></tr>
<tr><td>.</td></tr>
<tr><td>cliente:</td><td><select name="id_usuario">{$campocli}</select></td></tr>
<tr><td>.</td></tr>
<tr><td>fecha:</td><td>{$fecha}</td></tr>
<tr><td>.</td></tr>
<tr><td>Fecha entrega:<br>AAAA-MM-DD</td><td><input type="text" name="fechaent"></td></tr>
<tr><td>.</td></tr>
<tr><td>Destinatario:</td><td><select name="id_dest">{$campodest}</select></td></tr>
<tr><td>.</td></tr>
<tr><td>Arreglo:</td><td><select name="id_arreglo">{$campoarre}</select></td></tr>
<tr><td>.</td></tr>
<tr><td>Cantidad:</td><td><input type="text" name="cantidad"></td></tr>
<tr><td>.</td></tr>
<tr><td>elige la sucursal<br>de tu estado:</td><td><select name="id_sucursal">{$camposuc}</select></td></tr>
<tr><td>.</td></tr>

<tr><td></td><td><input type="submit" value="Introducir datos"
name="submit"></td></tr>
</table>
</form>
FORMULARIO;
}
mysql_close($dp);
?>





</body>
</html>
 

Gser

Bovino adolescente
#2
Hola

oye pero en si cual es tu problema q es lo que no hace tu script? no inserta los datos o te da un error o que onda?, supongo que include("C:\AppServ\www\pagina_floreria\cgi-bin\acceso.php"); es tu conexion a la base de datos verdad?

P.D Como hiciste la imagen de tus tablas de la base de datos? usaste algun software en especial? :)
P.D Me puedes facilirar el codigo SQL de base de datos para probar ?
 

Y3K

Bovino Milenario
#3
Después de cada "mysql_query" agrega "or die (mysql_error));"

Eso te ayudará a poder depurar el error de una manera efectiva, regresando el error correspondiente si es que existe. Así como lo pones no podemos saber si el error es por síntaxis o la conexión o etc, etc...

Saludos :vientos:

P:eek: Después de que agregues eso, corre el script y pega el resultado que te dio, usa etiquetas
Código:
, o por lo menos [QUOTE]
 

Gser

Bovino adolescente
#4
En efecto como dice el compañero de aca arriba esa es una forma manual de depurar tu script y aparte como recomendación antes del mysql.error() ponle un texto indicando cual de todas las consultas es la que no funciono (estos es para identificar mas exactamente en que query esta el problema, por ejemplo
Código:
$sql1 = "INSERT INTO pedido(no_pedido, fecha, total, id_sucursal, id_usuario)
VALUES ($_POST[no_pedido], '$fechafactura', $total, '$_POST[id_sucursal]', '$_POST[id_usuario]')";
$result1 = mysql_query($sql1)
     [COLOR="#FF0000"] or die("Error al insertar los datos en la tabla pedidos por: ".mysql_error());[/COLOR]
y asi en tus demas consultas para que puedas ver exactamente donde esta tu error
otra cosa q tambien me funciona es imprimir en pantalla cada sentencia SQL para saber si tu query esta bien formada y con los valores necesarios para ejecutarse correctamente.

Saludos!!
 

cherrysn

Bovino maduro
#5
hola! muchas gracias por contestar, lo que pasa es que en la pagina html tengo un formulario:



los datos que ya se llenaron en los select son de la base de datos, asi que la conexion de hecho sí está bien, porque en otro apartado tengo unas consultas y esas sí me las da (por ejemplo, buscar por cliente especifico, por arreglo especifico.. obtener la informacion y eso sí lo tengo bien)

ahora, mi problema en este es que en la imagen que esta arriba, se supone que tengo que introducir un nuevo pedido -insercion de datos a la base de datos-

entonces, lleno todo bien, el no_pedido, selecciono cliente, escribo la fecha de entrega, todo.. lo elijo y al dar click en el submit "introducir datos" me sale este mensaje: (que yo puse en el script, por si no se habia podido hacer la insercion)

"Pedido no agregado intenta con menor cantidad." que corresponde a esta parte:

if (($result1) && ($result2)&& ($result3)) {
echo "<p>Pedido enviado, Gracias!</p>";
} else {
echo "<p>Pedido <b>no</b> procesado.</p>";
}
}
else {
echo "<p>Pedido <b>no</b> agregado intenta con menor cantidad.</p>";
}
o sea la conexion, y todo eso sí esta bien.. ya revise tambien mi base de datos y sí tengo existencias de todos los arreglos que salen de opciones en el select, no se por qué no hace la insercion, seguramente que estoy haciendo algo mal =(

ahorita estoy modificando el script con los tips que me dieron, GRACIAS! veo resultados, y posteo..

PD. sí, la instruccion
include("C:\AppServ\www\pagina_floreria\cgi-bin\acceso.php");
es la conexion a mi base de datos, como son varias paginas, el archivo lo hice aparte y solo lo jalo en cada script.

PD2: las tablas las hice en corel, así a mano jajajaja. de hecho son mas, pero en la insercion son las que ocupo.

PD3: como te mando la base de datos? si te sirve para comprender mi problema, con mucho gusto... esque esta medio largo el script como para ponerlo aqui, o de plano asi?
 

Gser

Bovino adolescente
#6
hola! muchas gracias por contestar, lo que pasa es que en la pagina html tengo un formulario:



los datos que ya se llenaron en los select son de la base de datos, asi que la conexion de hecho sí está bien, porque en otro apartado tengo unas consultas y esas sí me las da (por ejemplo, buscar por cliente especifico, por arreglo especifico.. obtener la informacion y eso sí lo tengo bien)

ahora, mi problema en este es que en la imagen que esta arriba, se supone que tengo que introducir un nuevo pedido -insercion de datos a la base de datos-

entonces, lleno todo bien, el no_pedido, selecciono cliente, escribo la fecha de entrega, todo.. lo elijo y al dar click en el submit "introducir datos" me sale este mensaje: (que yo puse en el script, por si no se habia podido hacer la insercion)

"Pedido no agregado intenta con menor cantidad." que corresponde a esta parte:



o sea la conexion, y todo eso sí esta bien.. ya revise tambien mi base de datos y sí tengo existencias de todos los arreglos que salen de opciones en el select, no se por qué no hace la insercion, seguramente que estoy haciendo algo mal =(

ahorita estoy modificando el script con los tips que me dieron, GRACIAS! veo resultados, y posteo..

PD. sí, la instruccion es la conexion a mi base de datos, como son varias paginas, el archivo lo hice aparte y solo lo jalo en cada script.

PD2: las tablas las hice en corel, así a mano jajajaja. de hecho son mas, pero en la insercion son las que ocupo.

PD3: como te mando la base de datos? si te sirve para comprender mi problema, con mucho gusto... esque esta medio largo el script como para ponerlo aqui, o de plano asi?

Mandame el script de tu base de datos a serrato18@hotmail.com y cuando tenga tiempo lo checo aver que pasa :vientos:
saludos!!
 

cherrysn

Bovino maduro
#7
pues bien... regreso, despues de hacer lo que me aconsejaron, ahora me sale un error especifico, solo que no se a que se refiera, ya revise el codigo y no entiendo en donde esta, ahora al dar click en el submit, me sale un mensaje, que dice:

Error al insertar los datos en la tabla pedido
y esa parte, corresponde a la parte roja de este script, que es el que tengo ya modificado:

<html>
<head>
<title>Pedidos personalizados</title>
<style type="text/css">
select{
font-family: Eras Light ITC;
font-size: 12;
color: #6E6E6E;
}
body{
font-family: Eras Light ITC;
font-size: 13;
color: #6E6E6E;
}
table{
font-family: Eras Light ITC;
font-size: 14;
color: #6E6E6E;
border-color: CC3366;
border-width: 3px;
}
</style>
</head>

<body background="./img/fondo.jpg" text="gray">

<div id="cl"style="position:absolute; left:450px; top:30px;"><img src="./img/pedido.gif" alt="" width="478" height="66" style="border:0px; float:center"></div>

<div id="cl"style="position:absolute; left:100px; top:30px;">

<?php
include("C:\AppServ\www\pagina_floreria\cgi-bin\acceso.php");
if (isset($_POST['submit'])) {
if (empty($_POST['cantidad'])) {
echo "<p>Introduce cantidad de arreglos</b>.</p>";
} else {

$sql0 = "SELECT * FROM arreglo WHERE arreglo.id_arreglo='$_POST[id_arreglo]'";
$result0 = mysql_query($sql0)
or die("error con la seleccion de arreglo");

while ($row = mysql_fetch_assoc($result0)) {
$precioarre =$row['precio'];
$exist=$row['existe_arreglo'];
}
$total=$_POST['cantidad'] * $precioarre; //Extrae la cantida que multiplica

//Revisa que la antidad que se compra es mayor a la existencia -45
if ($exist>=$_POST['cantidad']){ //Verifica que la existencia sea mayor a la cantidad que se quiere comprar, si es mayor puedo mandar el pedido
$sql1 = "INSERT INTO pedido('fecha', 'total', 'id_sucursal', 'id_usuario')
VALUES ('$fecha', $total, '$_POST[id_sucursal]', '$_POST[id_usuario]')";
$result1 = mysql_query($sql1)
or die("Error al insertar los datos en la tabla pedido");



$sql7 = "INSERT INTO pedido_destinatario('no_pedido', 'id_dest')
VALUES ('$_POST[id_dest]')"; // no se inserta el no_pedido, ya que es autoincrement (eso lei)
$result7 = mysql_query($sql7)
or die("Error al insertar los datos en la tabla pedido_destinatario");


$sql2 = "INSERT INTO pedido_arreglo(id_arreglo, fecha_entrega)
VALUES ('$_POST[id_arreglo]', '$_POST[fechaent]')";
$result2 = mysql_query($sql2)
or die("Error al insertar los datos en la tabla pedido_arreglo");
$nexist=$exist-$_POST['cantidad'];


$sql3= "UPDATE arreglo SET existe_arreglo=$nexist WHERE existe_arreglo='$_POST[cantidad]'"; // en la tabla arreglo se debe disminuir la existencia

/*Actualiza la existencia que debía ser afectada en la tabla arreglo.
A la que había se le resta la cantidad vendida donde el id_arreglo coincide con el nombre del arreglo.
De ser más debería agregarse un botón donde el registro se guarde en una variable y de la misma lista seleccionar otro*/

$result3=mysql_query($sql3)
or die("Error al actualizar los datos en la tabla arreglo");


if (($result1) && ($result2)&& ($result3) && ($result7)) {
echo "<p>Pedido enviado, Gracias!</p>";
} else {
echo "<p>Pedido <b>no</b> procesado.</p>";
}
}
else {
echo "<p>Pedido <b>no</b> agregado</p>";
}

}
echo "[ <a href='javascript:history.back()'>Volver</a> ] -
[ <a href='$_SERVER[PHP_SELF]'>Introducir nueva fila</a> ]";
} else {
//Datos que llenan los select con datos de la bd
$sql4 = "SELECT * FROM cliente";
$result4 = mysql_query($sql4);
$campocli = "";
while ($row = mysql_fetch_assoc($result4)) {
$campocli .= "<option value='$row[id_usuario]'>$row[nombre_us]</option>\n";
}
$sql5 = "SELECT * FROM arreglo";
$result5 = mysql_query($sql5);
$campoarre = "";
while ($row = mysql_fetch_assoc($result5)) {
$campoarre .= "<option value='$row[id_arreglo]'>$row[nombre_arreglo]</option>\n";
}
$sql6 = "SELECT * FROM sucursal";
$result6 = mysql_query($sql6);
$camposuc = "";
while ($row = mysql_fetch_assoc($result6)) {
$camposuc .= "<option value='$row[id_sucursal]'>$row[estado_suc]</option>\n";
}

$sql8 = "SELECT * FROM destinatario";
$result8 = mysql_query($sql8);
$campodest = "";
while ($row = mysql_fetch_assoc($result8)) {
$campodest .= "<option value='$row[id_dest]'>$row[nombre_des]</option>\n";
}

$fecha = date_default_timezone_set('America/Mexico_City');
print "<p>".date('Y,m,d')."</p>";



//se introducen los datos por medio de este formulario
echo <<<FORMULARIO
<form action="{$_SERVER['PHP_SELF']}" method="post">
<table>

<tr><td>.</td></tr>
<tr><td>Nombre de cliente:</td><td><select name="id_usuario">{$campocli}</select></td></tr>
<tr><td>.</td></tr>
<tr><td>.</td><td></td></tr>
<tr><td>.</td></tr>
<tr><td>Fecha de entrega:<br>AAAA-MM-DD</td><td><input type="text" name="fechaent"></td></tr>
<tr><td>.</td></tr>
<tr><td>Destinatario:</td><td><select name="id_dest">{$campodest}</select></td></tr>
<tr><td>.</td></tr>
<tr><td>Nombre del arreglo:</td><td><select name="id_arreglo">{$campoarre}</select></td></tr>
<tr><td>.</td></tr>
<tr><td>Cantidad:</td><td><input type="text" name="cantidad"></td></tr>
<tr><td>.</td></tr>
<tr><td>Elige la sucursal<br>de tu estado:</td><td><select name="id_sucursal">{$camposuc}</select></td></tr>
<tr><td>.</td></tr>

<tr><td></td><td><input type="submit" value="Introducir pedido"
name="submit"></td></tr>
</table>
</form>
FORMULARIO;
}
mysql_close($dp);
?>


</div>


</body>
</html>
la verdad qeu no se qué es lo que está pasando, si alguien ve algun error (que seguramente estará obvio pero no puedo verlo)
por favor hagamelo saber, ya no se qué mas modificarle, revise los select y las variables y segun yo ya estan bien relacionadas... alguien ve algo mas?

otra vez, mil gracias!!
 
#8
HOLA AMIGO BUENAS NOCHES PUES VERAS LO QUE QUIERES HACER NO ES TAN COMPLICADO SI REALIZAS UN PROCEDIMIENTO ALMACENADO ESO LO HACES DESDE EL GESTOR DE BASE DE DATOS MYSQL SI KIERES QUE TU CODIGO SEA MAS FACIL DE ENCONTRAR LOS ERRORES SEPARA EL CSS , EL HTML Y EL PHP ESO ES UNA RECOMENDACION QUE EN LO PERSONAL ME HA SERVIDO Y AHORRADO DEMACIADO CODIGO MIRA TE DEJO UN EJEMPLO DE NU PROCEDIMIENTO ALMACENADO Y COMO USAR EL CODIGO PHP SI ENTENDI BIEN SOLO QUIERES INSERTAR EN ESTE CODIGO Q T MANDE SEPARE EL CSS , HTML Y EL PHP

EL PROCEDIMIENTO ALMACENADO ES EL SIGUIENTE

//insertar tipo_usuario


CREATE PROCEDURE ins_tipo(in nom varchar(45),pas varchar(45) , tipo1 int(11) , fecha date )

insert into tipo_usuario(nombre,pass,tipo,fecha) VALUES(nom,pas,tipo1, CURDATE( ));

//DE ESTA MANERA ES COMO INSERTAS EN MYSQL CON EL CALL AHI ES DONDE INSERTAS ASI Q CADA Q QUIERAS INSERTAR USAS CALL

call ins_tipo("JAVIER","123","0","CURDATE( )");

Y EL CODIGO DE PHP ES ESTE:

<?php
require("conexion.php");
conectar();
$nombres = $_POST['nombre']; //LO QUE DICEN POST ES COMO MANDO LOS NOMBRE DE LOS ELEMENTOS DE HTML A PHP
$pass = $_POST['pass']; //LO QUE DICEN POST ES COMO MANDO LOS NOMBRE DE LOS ELEMENTOS DE HTML A PHP

$pass=md5($pass); //ENCRIPTAR PASSWORD

if($pass!=""){
$sSql = mysql_query ("SELECT nombre FROM tipo_usuario WHERE nombre='$nombres'") or die (mysql_error());

if(mysql_num_rows($sSql) > 0){
echo 'Usuario Registrado';
echo '<a href="registro.html"><br>regresar';
}

if(mysql_num_rows($sSql) == 0){
mysql_query("CALL ins_tipo('$nombres' , '$pass' , '0' , 'CURDATE( )')")or die (mysql_error());

echo 'registro exitoso';
echo '<meta http-equiv="refresh" content="1, URL=index.html">'.'<br />';desconectar();
}
}
?>
 

cherrysn

Bovino maduro
#9
ok, aparentemente se ve facil jajajaja... voy a intentar con tu tecnica, osea que son diferentes archivos y en uno los llamo, no?

la cosa es que la insercion a las tablas mysql es a varias tablas al mismo tiempo, por como están conectadas, por eso me cuesta trabajo entender qué pasa, me imagino que tiene que estar como "sincronizado" para que afecte a todas las tablas involucradas,

igual intentare la idea, a ve que resulta :) gracias por el tip!

y mil gracias por tu tiempo para leer esto, tambien =)
 
#10
lo mejor que puedes hacer es crear funciones, para reutilizar el código..


(tal ves ya te lo resolvieron, pero.. te ayudará)

Un saludo n__n
 

cherrysn

Bovino maduro
#11
gracias chico! si, tuve que rehacer otra vez el codigo... la insercion no es complicada, lo que me sacaba de quicio es que es en varias tablas a la vez, en mi maquina hacia cosas raras, como que introducia cosas en mi base de datos... aunque no se exactamente qué, poruqe en otras consultas salian muchos espacios vacios... pero en otras compus sí funcionaba, ya sólo me queda revisar eso.. pero sí use algunas funciones.. :)
saludos!
 
#12
Una recomendación cuando se desarrollen sistemas en php: "No usar rutas absolutas en los includes ni requires", ya que esto es un problema que tal vez no lleguen a funcionar los scripts. Usar rutas relativas te simplifican los problemas y te sirve a la hora de migrar tu desarrollo a otras plataformas.
 
Arriba