Comunidad PHPeros
Lenguajes => PHP => Mensaje iniciado por: RamFu en 08 de Julio de 2008, 19:08:32 pm
-
hola, necesito ayuda con un codigo PHP. Bien, yo tengo un sistema de Placas en PHP.
Estoy añadiendo para poder tener la misma placa mas de una vez, por ejemplo la de administrador dos veces. Esto lo hago por MYSQL, en la base de datos, pero tengo el siguiente problema:
Como puedo hacer para que si el usuario tenia ya la placa, se le actualice el campo 'cantidad' que esta en la tabla 'placas', y si no la tiene se le inserte? Tengo esto, pero cuando vuelvo a comprar la placa no se me actualiza :S
<?php
include ("conectar.php");
$user = $_GET ['user'];
$placa = $_GET ['placa'];
// Cantidad, siempre 1!
$cantidad = $_GET ['cantidad'];
$sq1 = mysql_query("SELECT * FROM placas WHERE user='$user'");
$ver = mysql_fetch_array($sq1);
$antigua = $ver["cantidad"];
$veruser = $ver["user"];
$vermueble = $ver["placa"];
// Añadirlo
if ($user == $veruser && $placa == $verplaca) {
mysql_query("UPDATE placas SET cantidad='$antigua'+'$cantidad' WHERE placa='$placa'");
} else {
mysql_query("INSERT INTO placas VALUES ('1', '$user', '$placa', '$cantidad');");
}
?>
Me gustaria saber como puedo hacer saber a MYSQL que me actualice justamente, la cantidad de la placa del usuario. Es decir, como un WHERE doble, el de la placa para que sepa que placa es y el del user, asi un user puede tener 3 y otro 1 de lo contrario todos tendrian las mismas xD
Mersi, si me estoy haciendo un lio jaja espero que lo entendais y me ayudeis =)
-
Hola, en cuanto a lo de las placas, no encuentro nada a mano en este momento xD
Pero creo que estas lineas:
// 1
$sq1 = mysql_query("SELECT * FROM placas WHERE user='$user'");
// 2
mysql_query("UPDATE placas SET cantidad='$antigua'+'$cantidad' WHERE placa='$placa'");
// 3
mysql_query("INSERT INTO placas VALUES ('1', '$user', '$placa', '$cantidad');");
Te las intentaré corregir ;):
// 1
$sq1 = mysql_query("SELECT * FROM `placas` WHERE `user`='".$user."'");
// 2
$nueva = $antigua + $cantidad;
mysql_query("UPDATE `placas` SET `cantidad`='".$nueva."' WHERE `placa`='".$placa."'");
// 3
mysql_query("INSERT INTO `placas`(campo1, campo2, campo3, campo4) VALUES('1', '$user', '$placa', '$cantidad');");
Bueno, no me creas mucho porque todavía soy novato en PHP xD
-
Pero es lo mismo que yo he echo xD Yo lo que quiero es que si el user ya tiene esa placa actualizar la cantidad de esa placa para ese usuario xD. Pero mersi. Alguien sabe algo?
-
Bueno, por intentar no se pierde nada xD:
<?
include("conectar.php");
$query = mysql_query("SELECT * FROM `placas` WHERE `user` = '".$_GET['user']."'");
$array = mysql_fetch_array($query);
$nuevo = $array['cantidad'] + $_GET['cantidad'];
if ($array['placa']!=$_GET['placa']) {
mysql_query("INSERT INTO `placas` (campo1, campo2, campo3, campo4) VALUES('1', '".$_GET['user']."','".$_GET['placa']."','".$_GET['cantidad']."')");
} else {
mysql_query("UPDATE `placas` SET `cantidad` = '".$nuevo."' WHERE `placa` = '".$_GET['placa']."'");
}
?>
Creo que es lo mismo que has hecho tu xD
-
Nadie sabe como hacerlo? Me es algo urgente..
-
podrias utilizar mysql_num_rows()
$query = mysql_query("SELECT * FROM `placas` WHERE campo2 = '".$_GET['user']."'");
$rows = mysql_num_rows($query);
if(!$rows) {
INSERT
} else {
UPDATE
}
Creo k te refieres a eso...
-
Lo que quiero es lo siguiente:
El usuario puede comprar 3 tipos de placas. Compra la primera placa. En el MYSQL se le añaden a la tabla PLACAS:
nombreplaca, nombreuser, cantidad
Despues, lo que quiero es si vuelve a comprar la misma placa se añada a la tabla PLACAS, a la antigua fila, la cantidad antigua +1. El problema que tengo esque se añade al mysql pero se repite la fila, es decir:
admin, ramfu, 1
y despues si vuelvo a comprar la placa admin se vuelve a añadir
admin, ramfu, 1
y lo que quiero es que quede
admin, ramfu, 2
Saludos!
-
He reprogramado tu script original y pienso que es lo que buscas.
<?php
include ("conectar.php");
// Comprobamos que user y placa esten correctos
if(isset($_GET['user']) &&
isset($_GET['placa']) &&
!empty($_GET['user']) &&
!empty($_GET['placa'])){
// Escapamos las superglobales
$user = mysql_real_escape_string($_GET['user']);
$placa = mysql_real_escape_string($_GET['placa']);
// Vericamos si el usuario tiene la placa que intenta adquirir
$sql = mysql_query("SELECT * FROM placas WHERE user='{$user}' AND placa='{$placa}'");
if(mysql_num_rows($sql)){
// Si la tiene le sumamos uno a la cantidad
mysql_query("UPDATE placas SET cantidad = cantidad + 1 WHERE user='{$user}' AND placa='{$placa}");
echo 'Usted actualizó su placa '. $placa;
}
else {
// Si no la tiene se la agregamos
mysql_query("INSERT INTO `placas` (user,placa,cantidad) VALUES
('".$user."','".$placa."','1')");
echo "Le hemos agregado la placa con exito";
}
} else {
echo "Ha ocurrido un error";
}
?>
Fíjate que en el INSERT hice unos cambios, pensando que la primera fila de la tabla placa es (ID) y que esta en auto_increment, así que lo borré. Cualquier duda o error solo postea.
NOTA: Aun puedes implementar ciertas medidas para mejorar el script entre ellas están comprobar si el usuario existe o si la placa que intenta adquirir esta disponible para él.
Saludos.
-
Muchas Gracias, es precisamente lo que buscaba :D!
Y ahora, si quiero mostrar la cantidad de esas placas como lo haria? Gracias!
-
No se si estarás usando sessiones o que, pero sería algo así:
<?
// conectas
// Compruebas que el script se ejecute de mera correcta
// Utilizaré GET, pero no se si usas COOKIES o SESSIONES...
$user = mysql_real_escape_string($_GET['user']);
$placas = mysql_fetch_row(mysql_query("SELECT SUM(candidad) FROM placas WHERE user = {$user}"));
echo "El usuario {$user} tiene {$placas} placas.";
?>
Espero te sirva, cualquier duda postea.
Saludos.
-
Gracias ;) Si, uso sesiones. Cojere el nombre de usuario por sesion, etc. Ya lo he modificado, gracias!
-
Cometi un error en el echo, no se si lo notaste. Deberia ir así:
echo "El usuario {$user} tiene {$placas[0]} placas.";
Saludos.
-
No, el echo no lo use, de todas formas gracias.
Ahora otra duda para no abrir otro post.
<?php
include ("conectar.php");
$user = $_POST['user'];
$razon = $_POST['razon'];
$mod = $_GET['mod'];
$query = mysql_query("SELECT * FROM usuarios WHEREuser='$user'");
$ver = mysql_fetch_array($query);
if(mysql_query("UPDATE usuarios SET baneado='1' , motivo='$razon' WHERE user='$user'" and mysql_query "INSERT INTO baneos (user,motivo,mod) VALUES ('$user','$razon','$mod')") {
echo 'Baneado con exito!';
} else {
echo 'Error al banear';
}
?>
Me da un error de comillas en la linea 8. Y otra cosa, la primera ejecucion MYSQL si la ejecuta, la segunda no :s
-
Esta linea no esta bien estructurada, además de que tienes una consulta al principio que ni siquiera usas.
if(mysql_query("UPDATE usuarios SET baneado='1' , motivo='$razon' WHERE user='$user'" and mysql_query "INSERT INTO baneos (user,motivo,mod) VALUES ('$user','$razon','$mod')") {
Prueba así:
<?php
include ("conectar.php");
$user = mysql_real_escape_string(strip_tags($_POST['user']));
$razon = mysql_real_escape_string(strip_tags($_POST['razon']));
$mod = mysql_real_escape_string(strip_tags($_GET['mod']));
$query = mysql_query("SELECT * FROM `usuarios` WHERE user = {$user}");
if(mysql_num_rows($query)){
$ban = mysql_query("UPDATE `usuarios` SET baneado = '1', motivo = {$razon} WHERE user = {$user}");
$bann = mysql_query("INSERT INTO `baneos` (user,motivo,mod)
VALUES ('".$user."','".$razon."','".$mod."')");
if($ban && $bann){
echo 'Baneado con exito!';
} else {
echo 'Error al banear';
}
} else {
echo "El usuario que intentas banear no existe";
}
?>
Saludos.
-
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\xampplite\htdocs\pruebas\baneo.php on line 8
El usuario que intentas banear no existe
:(
-
Prueba así y dime que tal:
<?php
include ("conectar.php");
$user = mysql_real_escape_string(strip_tags($_POST['user']));
$razon = mysql_real_escape_string(strip_tags($_POST['razon']));
$mod = mysql_real_escape_string(strip_tags($_GET['mod']));
$query = mysql_query("SELECT * FROM usuarios WHERE user = '".$user."'");
if(mysql_num_rows($query) > 0){
$ban = mysql_query("UPDATE `usuarios` SET baneado = '1', motivo = {$razon} WHERE user = {$user}");
$bann = mysql_query("INSERT INTO `baneos` (user,motivo,mod)
VALUES ('".$user."','".$razon."','".$mod."')");
if($ban && $bann){
echo 'Baneado con exito!';
} else {
echo 'Error al banear';
}
} else {
echo "El usuario que intentas banear no existe";
}
?>
-
Buenas,
Blackenger me gusta como programas; programas muy parecido a mí con {} siempre al escribir variables... lo que pasa que noto un exageramiento de líneas, intenta reducir líneas para optimizar el script & su velocidad de carga.
Un saludo! :)
-
Nadie sabe porque devuelve Error al banear aun haber escrito todo correctamente??
-
Nadie sabe porque devuelve Error al banear aun haber escrito todo correctamente??
Pasame el formulario que estas usando, pienso que el user no existe o algo así.
Buenas,
Blackenger me gusta como programas; programas muy parecido a mí con {} siempre al escribir variables... lo que pasa que noto un exageramiento de líneas, intenta reducir líneas para optimizar el script & su velocidad de carga.
Un saludo! :)
Si estoy ayudando a alguien trato de ser lo mas claro posible, si es un script personal ya es otra historia. :D
Saludos.
-
Este es:
<?php
include ("conectar.php");
session_start();
if(isset($_SESSION['p_user'])) {
?><title>Banear Usuario ~~ </title>
<style type="text/css">
<!--
.Estilo1 {
color: #FF0000;
font-weight: bold;
}
-->
</style>
<div align="center"><span class="EstiloCUERPO"><br>
Utiliza esta herramienta <span class="Estilo1">SOLO </span>si crees verdaderamente que el usuario que ha cometido la accion, se lo merece. <br>
Recuerda que se envia una copia a los administradores. <br>
<br>
<span class="Estilo1">El baneo se hace efectivo pero si comprobamos que el baneo no es justo, el moderador puede ser expulsado</span>.<br>
<br>
Escribe el nombre del usuario:
</span>
<br>
</div>
<form name="form1" method="post" action="baneo.php?mod=<?=$_SESSION['p_user']?>">
<label>
<div align="center">
<input name="user" type="text" class="EstiloCUERPO" id="user" />
</div>
</label>
<div align="center"><br>
<div align="center">
<span class="EstiloCUERPO">Motivo del baneo:<br>
<textarea name="razon" cols="40" class="EstiloCUERPO" id="user2"></textarea>
<br>
</div>
<label>
<div align="center"><br>
<input type="image" name="imageField" src="index_files/okregistro.PNG">
</div>
</label>
</form>
<span class="EstiloCUERPO"> </span><span class="EstiloSALUDO"></span>
<?php
} else {
echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /indpanel.php was not found on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
<hr>
<address>Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8b mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_jk/1.2.25 PHP/5.2.5 Server at piucky.com Port 80</address>
</body></html>';
}
?>
-
Buenas,
Ramfu me miraría el código, pero como lo está llevando Blackenger que lo lleve él que sino me tendría que mirar todo el código y como lo ha hecho... jejeje...
Blackenger, aunque sea para la gente optimiza el código :)
Un saludo.
-
Parece que no responde, podrias ayudarme FeDe?
[banear.php]
<?php
include ("conectar.php");
session_start();
if(isset($_SESSION['p_user'])) {
?><title>Banear Usuario ~~ </title>
<style type="text/css">
<!--
.Estilo1 {
color: #FF0000;
font-weight: bold;
}
-->
</style>
<div align="center"><span class="EstiloCUERPO"><br>
Utiliza esta herramienta <span class="Estilo1">SOLO </span>si crees verdaderamente que el usuario que ha cometido la accion, se lo merece. <br>
Recuerda que se envia una copia a los administradores. <br>
<br>
<span class="Estilo1">El baneo se hace efectivo pero si comprobamos que el baneo no es justo, el moderador puede ser expulsado</span>.<br>
<br>
Escribe el nombre del usuario:
</span>
<br>
</div>
<form name="form1" method="post" action="baneo.php?mod=<?=$_SESSION['p_user']?>">
<label>
<div align="center">
<input name="user" type="text" class="EstiloCUERPO" id="user" />
</div>
</label>
<div align="center"><br>
<div align="center">
<span class="EstiloCUERPO">Motivo del baneo:<br>
<textarea name="razon" cols="40" class="EstiloCUERPO" id="user2"></textarea>
<br>
</div>
<label>
<div align="center"><br>
<input type="image" name="imageField" src="index_files/okregistro.PNG">
</div>
</label>
</form>
<span class="EstiloCUERPO"> </span><span class="EstiloSALUDO"></span>
<?php
} else {
echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /indpanel.php was not found on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
<hr>
<address>Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8b mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_jk/1.2.25 PHP/5.2.5 Server at piucky.com Port 80</address>
</body></html>';
}
?>
[baneo.php]
<?php
include ("conectar.php");
$user = mysql_real_escape_string(strip_tags($_POST['user']));
$razon = mysql_real_escape_string(strip_tags($_POST['razon']));
$mod = mysql_real_escape_string(strip_tags($_GET['mod']));
$query = mysql_query("SELECT * FROM usuarios WHERE user = '".$user."'");
if(mysql_num_rows($query) > 0){
$ban = mysql_query("UPDATE `usuarios` SET baneado = '1', motivo = {$razon} WHERE user = {$user}");
$bann = mysql_query("INSERT INTO `baneos` (user,motivo,mod)
VALUES ('".$user."','".$razon."','".$mod."')");
if($ban && $bann){
echo 'Baneado con exito!';
} else {
echo 'Error al banear';
}
} else {
echo "El usuario que intentas banear no existe";
}
?>
-
Hola RamFu, haber si consigo ayudarte. =)
En primer lugar, en la query que almacenas en $ban, no utilizas comillas simples (') en $razon y $user, lo que podría causar un error. Corregido quedaria así:
$ban = mysql_query("UPDATE `usuarios` SET baneado = '1', motivo = '{$razon}' WHERE user = '{$user}'");
De todas formas, es obvio que el error esta en las querys, y si es asi y con lo que te comenté no se soluciona, puedes añadir or die(mysql_error()); al final de ambas querys de esta forma:
$ban = mysql_query("UPDATE `usuarios` SET baneado = '1', motivo = {$razon} WHERE user = {$user}") or die(mysql_error());
$bann = mysql_query("INSERT INTO `baneos` (user,motivo,mod)
VALUES ('".$user."','".$razon."','".$mod."')") or die(mysql_error());
Prueba todo lo que te he comentado, y si te sale algun mensaje de error nuevo generado por mysql_error() y no sabes como arreglarlo, no dudes en ponerlo por aquí.
Un saludo.