Comunidad PHPeros

Lenguajes => PHP => Mensaje iniciado por: RamFu en 08 de Julio de 2008, 19:08:32 pm

Título: Necesito coger exactamente...
Publicado 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

Código: [Seleccionar]
<?php
include ("conectar.php");
$user $_GET [&#39;user&#39;];
$placa $_GET [&#39;placa&#39;];

// Cantidad, siempre 1!
$cantidad $_GET [&#39;cantidad&#39;];
$sq1 mysql_query("SELECT * FROM placas WHERE user=&#39;$user&#39;");
$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=&#39;$antigua&#39;+&#39;$cantidad&#39; WHERE placa=&#39;$placa&#39;");
} else {
mysql_query("INSERT INTO placas VALUES (&#39;1&#39;, &#39;$user&#39;, &#39;$placa&#39;, &#39;$cantidad&#39;);");
}
?>


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 =)
Título: Re: Necesito coger exactamente...
Publicado por: Rodrinete en 08 de Julio de 2008, 23:14:35 pm
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
Título: Re: Necesito coger exactamente...
Publicado por: RamFu en 08 de Julio de 2008, 23:45:59 pm
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?
Título: Re: Necesito coger exactamente...
Publicado por: Rodrinete en 09 de Julio de 2008, 00:06:41 am
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
Título: Re: Necesito coger exactamente...
Publicado por: RamFu en 09 de Julio de 2008, 20:24:09 pm
Nadie sabe como hacerlo? Me es algo urgente..
Título: Re: Necesito coger exactamente...
Publicado por: westwest en 09 de Julio de 2008, 20:40:49 pm
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...
Título: Re: Necesito coger exactamente...
Publicado por: RamFu en 10 de Julio de 2008, 02:23:37 am
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!
Título: Re: Necesito coger exactamente...
Publicado por: Blackenger en 11 de Julio de 2008, 00:56:26 am
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&oacute; 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.
Título: Re: Necesito coger exactamente...
Publicado por: RamFu en 16 de Julio de 2008, 04:18:18 am
Muchas Gracias, es precisamente lo que buscaba :D!

Y ahora, si quiero mostrar la cantidad de esas placas como lo haria? Gracias!
Título: Re: Necesito coger exactamente...
Publicado por: Blackenger en 16 de Julio de 2008, 10:03:54 am
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.
Título: Re: Necesito coger exactamente...
Publicado por: RamFu en 16 de Julio de 2008, 14:59:51 pm
Gracias ;) Si, uso sesiones. Cojere el nombre de usuario por sesion, etc. Ya lo he modificado, gracias!
Título: Re: Necesito coger exactamente...
Publicado por: Blackenger en 16 de Julio de 2008, 19:59:25 pm
Cometi un error en el echo, no se si lo notaste. Deberia ir así:
echo "El usuario {$user} tiene {$placas[0]} placas.";

Saludos.
Título: Re: Necesito coger exactamente...
Publicado por: RamFu en 16 de Julio de 2008, 22:19:12 pm
No, el echo no lo use, de todas formas gracias.
Ahora otra duda para no abrir otro post.
Código: [Seleccionar]
<?php
include ("conectar.php");
$user $_POST[&#39;user&#39;];
$razon $_POST[&#39;razon&#39;];
$mod $_GET[&#39;mod&#39;];
$query mysql_query("SELECT * FROM usuarios WHEREuser=&#39;$user&#39;");
$ver mysql_fetch_array($query);
if(
mysql_query("UPDATE usuarios SET baneado=&#39;1&#39; , motivo=&#39;$razon&#39; WHERE user=&#39;$user&#39;" and mysql_query "INSERT INTO baneos (user,motivo,mod) VALUES (&#39;$user&#39;,&#39;$razon&#39;,&#39;$mod&#39;)") {
echo &
#39;Baneado con exito!&#39;;
} else {
echo &
#39;Error al banear&#39;;
}
?>


Me da un error de comillas en la linea 8. Y otra cosa, la primera ejecucion MYSQL si la ejecuta, la segunda no :s
Título: Re: Necesito coger exactamente...
Publicado por: Blackenger en 17 de Julio de 2008, 00:35:00 am
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.
Título: Re: Necesito coger exactamente...
Publicado por: RamFu en 17 de Julio de 2008, 02:13:44 am
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

:(
Título: Re: Necesito coger exactamente...
Publicado por: Blackenger en 17 de Julio de 2008, 03:40:19 am
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";
}
?>
Título: Re: Necesito coger exactamente...
Publicado por: FeDe en 17 de Julio de 2008, 15:20:21 pm
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! :)
Título: Re: Necesito coger exactamente...
Publicado por: RamFu en 18 de Julio de 2008, 14:17:20 pm
Nadie sabe porque devuelve Error al banear aun haber escrito todo correctamente??
Título: Re: Necesito coger exactamente...
Publicado por: Blackenger en 18 de Julio de 2008, 20:50:49 pm
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.
Título: Re: Necesito coger exactamente...
Publicado por: RamFu en 19 de Julio de 2008, 02:24:12 am
Este es:
Código: [Seleccionar]
<?php
include ("conectar.php");
session_start();
if(isset(
$_SESSION[&#39;p_user&#39;])) {
?>
<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 &
#39;<!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>Additionallya 404 Not Found
error was encountered 
while trying to use an ErrorDocument to handle the request.</p>
<
hr>
<
address>Apache/2.0.63 (Unixmod_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>&#39;;
}
?>

Título: Re: Necesito coger exactamente...
Publicado por: FeDe en 19 de Julio de 2008, 02:36:00 am
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.
Título: Re: Necesito coger exactamente...
Publicado por: RamFu en 21 de Julio de 2008, 02:51:01 am
Parece que no responde, podrias ayudarme FeDe?

[banear.php]
Código: [Seleccionar]
<?php
include ("conectar.php");
session_start();
if(isset(
$_SESSION[&#39;p_user&#39;])) {
?>
<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 &
#39;<!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>Additionallya 404 Not Found
error was encountered 
while trying to use an ErrorDocument to handle the request.</p>
<
hr>
<
address>Apache/2.0.63 (Unixmod_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>&#39;;
}
?>


[baneo.php]
Código: [Seleccionar]
<?php
include ("conectar.php");
$user mysql_real_escape_string(strip_tags($_POST[&#39;user&#39;]));
$razon mysql_real_escape_string(strip_tags($_POST[&#39;razon&#39;]));
$mod mysql_real_escape_string(strip_tags($_GET[&#39;mod&#39;]));

$query mysql_query("SELECT * FROM usuarios WHERE user = &#39;".$user."&#39;");
 if(
mysql_num_rows($query) > 0){
 
  
$ban mysql_query("UPDATE `usuarios` SET baneado = &#39;1&#39;, motivo = {$razon} WHERE user = {$user}");
  
$bann mysql_query("INSERT INTO `baneos` (user,motivo,mod)
                       VALUES (&#39;"
.$user."&#39;,&#39;".$razon."&#39;,&#39;".$mod."&#39;)");

 if(
$ban && $bann){
 echo &
#39;Baneado con exito!&#39;;
 
} else {
 echo &
#39;Error al banear&#39;;
 
}
} else {
echo 
"El usuario que intentas banear no existe";
}
?>

Título: Re: Necesito coger exactamente...
Publicado por: CarlosRdrz en 21 de Julio de 2008, 11:10:47 am
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.