Foros del Web » Programando para Internet » PHP »

update vs mysql_num_rows

Estas en el tema de update vs mysql_num_rows en el foro de PHP en Foros del Web. Gracias a todos por mantener esta web. Os escribo para preguntaros qué estoy escribiendo mal en el update. El fin de este script, es que ...

  #1 (permalink)  
Antiguo 26/10/2012, 14:31
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Exclamación update vs mysql_num_rows

Gracias a todos por mantener esta web. Os escribo para preguntaros qué estoy escribiendo mal en el update.
El fin de este script, es que un usuario pueda cambiar datos suyos siempre y cuando su nombre aparezca en la base de datos mysql.
Es este:


<?php
$nombre = $_REQUEST['nombre'];
$apellidos = $_REQUEST['apellidos'];
$preferencias = $_REQUEST['preferencias'];


if($_POST['nombre'])
{

mysql_connect("", "", "") or die(mysql_error()) ;
mysql_select_db("") or die(mysql_error()) ;
$sql="UPDATE agenda SET apellidos='".$_POST[apellidos]."',preferencias= '".$_POST[preferencias]."' WHERE nombre='".$_POST[nombre]."'" or die (mysql_error());

$rs = mysql_query($sql) or die (mysql_error());

if(mysql_num_rows($rs) == false) {
echo '<p>No tienes permiso.</p>';
}else{
echo '<p>Tienes permiso para cambiar datos.</p>';
}
}
?>



Me da este error,


Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /homepages.....
No tienes permiso.


¿ Qué puedo estar haciendo mal?. Agradezco tu comentario
  #2 (permalink)  
Antiguo 26/10/2012, 14:37
Avatar de jpurizaca  
Fecha de Ingreso: marzo-2012
Mensajes: 19
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: update vs mysql_num_rows

en esta linea:

$sql="UPDATE agenda SET apellidos='".$_POST[apellidos]."',preferencias= '".$_POST[preferencias]."' WHERE nombre='".$_POST[nombre]."'" or die (mysql_error());

cambiala por esta:

UPDATE agenda SET apellidos='".$_POST[apellidos]."',preferencias= '".$_POST[preferencias]."' WHERE nombre='".$_POST[nombre]."';
  #3 (permalink)  
Antiguo 26/10/2012, 14:42
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

muchas gracias jpurizaca por responderme, pero aun alicando tu cambio, sigue dandome el mismo error.
  #4 (permalink)  
Antiguo 26/10/2012, 14:45
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
Respuesta: update vs mysql_num_rows

prueba con esta

Código PHP:
Ver original
  1. $sql="UPDATE agenda SET apellidos='".$_POST["apellidos"]."',preferencias= '".$_POST["preferencias"]."' WHERE nombre='".$_POST["nombre"]."'" or die (mysql_error());
  #5 (permalink)  
Antiguo 26/10/2012, 14:48
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

xoceunder, muchas gracias por tu ayuda pero sigue mostrandome el mismo error aun asi de ponerle las comillas dobles a los campos de la tabla.
  #6 (permalink)  
Antiguo 26/10/2012, 15:17
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
Respuesta: update vs mysql_num_rows

pero si no espesifica bien el problema que muestra no puedo ayudarte
  #7 (permalink)  
Antiguo 26/10/2012, 15:19
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /homepages.....
No tienes permiso.



Me sigue dando el mismo error.

Gracias po contestrame
  #8 (permalink)  
Antiguo 26/10/2012, 16:03
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: update vs mysql_num_rows

mysql_num_rows da el numero de registros que arrojo una consulta select, para saber cuantos registros fueron manipulados por update o delete se usa mysql_affected_rows....

Por ultimo, las funciones mysql_* están obsoletas, debes usar mysqli o mejor aun, PDO...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #9 (permalink)  
Antiguo 26/10/2012, 16:21
Avatar de rottenp4nx  
Fecha de Ingreso: octubre-2012
Ubicación: Santiago
Mensajes: 417
Antigüedad: 11 años, 6 meses
Puntos: 36
Respuesta: update vs mysql_num_rows

Código PHP:
<?php
$nombre 
$_REQUEST['nombre'];
$apellidos $_REQUEST['apellidos'];
$preferencias $_REQUEST['preferencias'];


if(
$_POST['nombre'])
{

$conn mysql_connect("""""") or die(mysql_error()) ;
mysql_select_db("",$conn) or die(mysql_error()) ;
$sql="UPDATE agenda SET apellidos='".$_POST[apellidos]."',preferencias= '".$_POST[preferencias]."' WHERE nombre='".$_POST[nombre]."'" or die (mysql_error());

$rs mysql_query($sql,$conn) or die (mysql_error());

if(
mysql_num_rows($rs) == false) {
echo 
'<p>No tienes permiso.</p>';
}else{
echo 
'<p>Tienes permiso para cambiar datos.</p>';
}
}
?>
Ve si funciona, saludos
  #10 (permalink)  
Antiguo 26/10/2012, 16:23
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Nemutagk muchas gracias, he puesto lo siguiente.....

mysqli_connect("", "", "") or die(mysqli_error()) ;
mysqli_select_db("") or die(mysqli_error()) ;
$sqli="UPDATE agenda SET apellidos='".$_POST[apellidos]."',preferencias= '".$_POST[preferencias]."' WHERE nombre='".$_POST[nombre]."'" or die (mysqli_error());

$rs = mysqli_query($sqli) or die (mysqli_error());

if(mysql_num_rows($rs) == false) {
echo '<p>No tienes permiso.</p>';
}else{
echo '<p>Tienes permiso para cambiar datos.</p>';
}
}
?>



y me da este error,...

Advertencia : mysqli_select_db () espera exactamente 2 parámetros,

Warning : mysqli_error () espera exactamente un parámetro, 0 dada en /


He escrito algo mal?
  #11 (permalink)  
Antiguo 26/10/2012, 16:30
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Muchas gracias rottenp4nx por contestarme.
He puesto tal cual el codigo que me has dado y sigue el mismo error...

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /homepages.....
No tienes permiso.
  #12 (permalink)  
Antiguo 26/10/2012, 16:33
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: update vs mysql_num_rows

mmmm, cuando no sabes como se utiliza una función dedica unos minutos en leer el manual de PHP, en fin, en mysqli es obligatorio pasar el identificador de la conexión, no como en mysql que puedes omitirlo....

Código PHP:
Ver original
  1. $conexion = mysqli_connect($host,$user,$password);
  2.  
  3.      echo 'Error en la conexión: '.mysqli_connect_error();
  4. }
  5.  
  6. mysqli_select_db($conexion,$db);
  7.  
  8. $query = mysqli_query($conexion,$SQL) or die(mysqli_error($conexion));

Olvidaba, es mucho mejor indicar la db en la misma sentencia de conexión y te evitas una linea mas en el código:
Código PHP:
Ver original
  1. $conexion = mysqli_connect($host,$user,$pass,$db);
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #13 (permalink)  
Antiguo 26/10/2012, 16:41
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Agradezco mucho tus recomendaciones, pero tengo una duda, ya que no uso mucho esta funcion.
Te parece bien este planteamineto con todo lo que me has dicho???'


$conexion = mysqli_connect("", "", "") ;
if (mysqli_connect_error()) {
echo 'Error en la conexión: '.mysqli_connect_error();
}

mysqli_select_db("",$conexion) o ;
$sql="UPDATE agenda SET apellidos='".$_POST[apellidos]."',preferencias= '".$_POST[preferencias]."' WHERE nombre='".$_POST[nombre]."'" or die (mysqli_error());

$query = mysqli_query($conexion,$sql) or die(mysqli_error($conexion));

if(mysql_num_rows($rs) == false) {
echo '<p>No tienes permiso.</p>';
}else{
echo '<p>Tienes permiso para cambiar datos.</p>';
}
}
?>



Muchas gracias Nemutagk
  #14 (permalink)  
Antiguo 26/10/2012, 16:53
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: update vs mysql_num_rows

Te repito, USA EL MANUAL, estas cometiendo errores y es porque piensas que mysqli es igual a mysql, lo cual esta completamente mal, te dejaré el código correcto pero como excepción ya que estoy en contra de entregar código para hacer copy/paste y que ustedes ni si quiera analicen lo que están haciendo...

Código PHP:
Ver original
  1. <?php
  2.  
  3. $conexion = mysqli_connect($host,$user,$pass,$db);
  4.  
  5. if (mysql_connect_error()) {
  6.     die('Error en la conexión: '.mysqli_connect_error());
  7. }
  8.  
  9. //preparamos la sentencia SQL, ojo que no eh indicado los valores nuevos ni el valor para el where, esto lo dejamos para despues
  10. $sql = 'UPDATE agenda SET apellidos = ?, preferencias = ?, WHERE nombre = ?';
  11.  
  12. //ahora le decimos a mysqli que prepare la sentencia SQL anterior para pasarle los valores necesarios
  13. $query = mysqli_prepare($conexion,$sql);
  14.  
  15. /**
  16. * ahora le indicamos a mysqli los valores, primero le pasamos la sentencia preparada, luego el tipo de dato que se va a entregar
  17. * para saber el tipo de dato es:
  18. * s: el tipo es string
  19. * i: el tipo es entero
  20. * d: el tipo es double
  21. * b: el tipo es blob y se envia en paquetes
  22. * como las tres variables son string indicamos 3 s (sss), cada letra es por cada variable, si tubieramos 3 variables string y 2 enteros o int
  23. * seria sssii...
  24. */
  25. mysqli_stmt_bind_param($query, 'sss', $_POST['apellidos'], $_POST['preferencias'], $_POST['nombre']);
  26.  
  27. //ejecutamos la sentencia SQL
  28.  
  29. //verificamos cuantos registros fueron afectados
  30. if (mysqli_stmt_affected_rows($query) != 0) {
  31.     echo '<p>Tiene permisos</p>';
  32. }else {
  33.     echo '<p>No tiene permisos</p>';
  34. }
  35.  
  36. mysqli_close($conexion);

Es mejor que te vayas adaptando, ya que el cambio no se ah dado nada mas porque si, si no porque mysqli y PDO suponen una mejora importante tanto en performance como en seguridad...

Mejor te dejo el mismo código pero comentado, para que sepas que es cada cosa, para mas info te repito, VISITA EL MANUAL DE PHP
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 26/10/2012 a las 17:00
  #15 (permalink)  
Antiguo 26/10/2012, 17:16
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Perdona por no contestarte antes pero no podia. Yo agradezco tu opinion y tu trabajo pero lo que no es valido no hacer mencion nunca a a persona que te ayuda con sus planteamientos. No tiene sentido copiar y pegar sin antes preguntarte que estas haciendo.
Solo te quiero hacer una pregunta antes d probar tu codigo .
No se pasan estas variables despues de <?php ?, es decir, no quedaria asi.....

<?php

$nombre = $_REQUEST['nombre'];
$apellidos = $_REQUEST['apellidos'];
$preferencias = $_REQUEST['preferencias'];

$conexion = mysqli_connect($host,$user,$pass,$db);

if (mysql_connect_error()) {
die('Error en la conexión: '.mysqli_connect_error());
}

//preparamos la sentencia SQL, ojo que no eh indicado los valores nuevos ni el valor para el where, esto lo dejamos para despues
$sql = 'UPDATE agenda SET apellidos = ?, preferencias = ?, WHERE nombre = ?';

//ahora le decimos a mysqli que prepare la sentencia SQL anterior para pasarle los valores necesarios
$query = mysqli_prepare($conexion,$sql);

/**
* ahora le indicamos a mysqli los valores, primero le pasamos la sentencia preparada, luego el tipo de dato que se va a entregar
* para saber el tipo de dato es:
* s: el tipo es string
* i: el tipo es entero
* d: el tipo es double
* b: el tipo es blob y se envia en paquetes
* como las tres variables son string indicamos 3 s (sss), cada letra es por cada variable, si tubieramos 3 variables string y 2 enteros o int
* seria sssii...
*/
mysqli_stmt_bind_param($query, 'sss', $_POST['apellidos'], $_POST['preferencias'], $_POST['nombre']);

//ejecutamos la sentencia SQL
mysqli_stmt_execute($query);

//verificamos cuantos registros fueron afectados
if (mysqli_stmt_affected_rows($query) != 0) {
echo '<p>Tiene permisos</p>';
}else {
echo '<p>No tiene permisos</p>';
}

mysqli_stmt_close($query);
mysqli_close($conexion);



Si que hay diferencia; muchas gracias Nemutagk
  #16 (permalink)  
Antiguo 26/10/2012, 17:23
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: update vs mysql_num_rows

Cita:
Perdona por no contestarte antes pero no podia. Yo agradezco tu opinion y tu trabajo pero lo que no es valido no hacer mencion nunca a a persona que te ayuda con sus planteamientos. No tiene sentido copiar y pegar sin antes preguntarte que estas haciendo.
Aplaudo la forma de pensar que tienes, pero desde que estoy en este foro eh visto de todo, gente que solo hace copy/paste y ni si quiera leen lo que están copiando y si a ti se te fue una coma o te falto cerrar algo no son para buscar el error por ellos mismos, el comentario que hice no fue directamente hacia a ti...

Cita:
Solo te quiero hacer una pregunta antes d probar tu codigo .
No se pasan estas variables despues de <?php ?, es decir, no quedaria asi.....

<?php

$nombre = $_REQUEST['nombre'];
$apellidos = $_REQUEST['apellidos'];
$preferencias = $_REQUEST['preferencias'];
No tiene caso hacer eso, solo estarías desperdiciando memoria en el servidor, $_REQUEST es una combinación de $_POST, $_GET y $_COOKIES, es decir, puedes tener una variable con cualquiera de las antes mencionadas, y recogerla con $_REQUEST sin importar de donde venga (GET/POST), pero su uso es desaconsejado, aparte de esto, no haces nada con esas variables, por lo cual no tiene caso, si te fijas en el código que deje la función mysql_stmt_bind_params recoge las variables directamente de POST, por lo cual tus variables al inicio son un desperdicio, en todo caso usa esas variables en dicha función en vez de volver a llamar a $_POST...

Por ultimo, se me olvidaba, por respeto a los demás (y evitar que nos sangren los ojos!) cuando coloques código ya sea PHP, HTML, Javascript, CSS, etc usa HIGHLIGHT para que quede lo mejor posible y sea mas facil leer el código!
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #17 (permalink)  
Antiguo 26/10/2012, 17:36
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Opino que siempre hay que comprender lo que uno hace en todo momento y lo que el otro intenta transmitirlo; sin olvidar de agradecerselo.
Tendre en cuenta tu anterior explicacion.
Estoy intentando adaptar tu codigo, pero donde dices...


$conexion = mysqli_connect($host,$user,$pass,$db);
he puesto los datos de mi hosting (los que pongo siempre y nunca me han dado error y me dice....

Fatal error: Call to undefined function mysql_connect_error() in /
, es decir,
$conexion = mysqli_connect('servidor','usuario','contraseña mia','nombre de la base de datos');

y lo he puesto con comillas dobles y simples pero el mismo error me da.


Este codigo, se puede poner un include o un require o a trabajar con estos nuevos codigos ya no es necesario Nemutagk?.

Muchas gracias por tu tiempo
  #18 (permalink)  
Antiguo 26/10/2012, 17:39
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: update vs mysql_num_rows

Lee con detenimiento el error, indica que no existe la función mysql_connect_error, y eso es porque me falto la i a mysqli, ten en cuenta que ese código lo eh hecho al vuelo, y no lo eh probado, así que es probable que pueda contener errores de sintaxis...

Olvidaba responder lo ultimo, claro que es necesario incluirlo (si es que no se definen en el mismo archivo), en ese aspecto es igual a mysql
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #19 (permalink)  
Antiguo 26/10/2012, 17:54
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Te lo preguntaba por si se hacia de otra manera. Ahora ya he dado un paso mas y me sale lo siguiente....

mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean given i...

Eso significa que no estoy pasando bien los valores en esta sentencia, no?.

mysqli_stmt_bind_param($query, 'ssi', $_POST[.....

Que yo sepa, una palabra como 'marco' es un campo string
, y un numero como '5' es un campo entero.

Tu no lo crees igual?.

No tiene sentido copiar y pegar.

Gracias
  #20 (permalink)  
Antiguo 26/10/2012, 18:03
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Los tres son string, en que andaria pensando yo.
A que será debido que ssalga ese error en estos momentos?
  #21 (permalink)  
Antiguo 26/10/2012, 18:11
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: update vs mysql_num_rows

PHP tiene un pequeño "problema" (ojo, a mi parecer) y es que no es estricto cuando a tipos de variables se refiere, al menos no como otros lenguajes, te dejo un ejemplo:

El siguiente código indica el tipo de variable:
Código PHP:
Ver original
  1. <?php
  2. echo gettype('hola').'</br>';
  3. echo gettype('1').'</br>';
  4. echo gettype(1).'</br>';
  5. echo gettype(1.2).'</br>';
  6. echo gettype(false).'</br>';

el resultado es el siguiente:
Código:
string
string
integer
double
boolean
Como puedes ver, 1 no es igual a '1' (estar entre comillas o apostrofes), el primero se define como entero o int, el segundo como string, ahora, el error es desde la función mysqli_prepare, para saber que es lo que esta pasando se debe depurar consulta...

Código PHP:
Ver original
  1. $sql = 'SELECT * FROM mitabla';
  2.  
  3. $query = mysqli_prepare($conexion,$sql);
  4. if ($query === false) {
  5.      die('Error en la sentencia: '.mysqli_error($conexion));
  6. }

Aunque también es posible que sea por problemas en la conexión de la base de datos...

Actualización: no vi tu segundo post, mysqli_stmt_bind_param dará error si el tipo de dato no es igual al tipo indicado (isdb), esto es por seguridad
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #22 (permalink)  
Antiguo 26/10/2012, 18:26
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Gracias por responderme.
mysqli->connect_error no funciona en mi servidor de 1and1 porque esta con la version php 5.2.17.
Lo que te quiero preguntar es que al tener esta version, pueda tener algun problema para ejecutar
mysqli_stmt_bind_param.
Mi silencio, era debido a que le estaba dando valores a las variables antes de ejecutar la
mysqli_stmt_bind_param, pero aun asi no me funciona, me da el mismo error
  #23 (permalink)  
Antiguo 26/10/2012, 18:36
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: update vs mysql_num_rows

mysqli->connect_error es diferente a mysqli_connect_error, el primero efectivamente solo funciona correctamente a partir de la versión 5.2.9 y 5.3, mysqli_connect_error funciona a partir de la 5.0, en todo caso, tu servidor funcionaria correctamente con cualquiera de las dos, en todo caso usa mysqli_error($conexion) o mysqli_stmt_error($conexion) según sea el casó, también publica el código que tienes para ver que estas haciendo...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #24 (permalink)  
Antiguo 26/10/2012, 18:50
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Muchas gracias por tu aclaracion.

Habia puesto las variables pero nada cambio.

He cambiado solo dos cosas. Los campos de las variables son varchar en la base de datos.

Muchas gracias. Es este.......


<?php

require('');
$conexion = mysqli_connect('','','','') or die('Error en la conexión: ');



//preparamos la sentencia SQL, ojo que no eh indicado los valores nuevos ni el valor para el where, esto lo dejamos para despues
$sql = 'UPDATE agenda SET apellidos = ?, preferencias = ?, WHERE nombre = ?';

//ahora le decimos a mysqli que prepare la sentencia SQL anterior para pasarle los valores necesarios
$query = mysqli_prepare($conexion,$sql);

/**
* ahora le indicamos a mysqli los valores, primero le pasamos la sentencia preparada, luego el tipo de dato que se va a entregar
* para saber el tipo de dato es:
* s: el tipo es string
* i: el tipo es entero
* d: el tipo es double
* b: el tipo es blob y se envia en paquetes
* como las tres variables son string indicamos 3 s (sss), cada letra es por cada variable, si tubieramos 3 variables string y 2 enteros o int
* seria sssii...
*/

mysqli_stmt_bind_param($query, 'sss', $_POST['apellidos'], $_POST['preferencias'], $_POST['nombre']);

//ejecutamos la sentencia SQL
mysqli_stmt_execute($query);

//verificamos cuantos registros fueron afectados
if (mysqli_stmt_affected_rows($query) != 0) {
echo '<p>Tiene permisos</p>';
}else {
echo '<p>No tiene permisos</p>';
}

mysqli_stmt_close($query);
mysqli_close($conexion);
?>
  #25 (permalink)  
Antiguo 26/10/2012, 19:11
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: update vs mysql_num_rows

Esto ya se alargo mucho, y por lo que veo pasas de mis ultimos comentarios, en fin, prueba esto, ve los errores y analiza que es lo que sucede...

Código PHP:
Ver original
  1. <?php
  2.  
  3. $conexion = mysqli_connect('','','','') or die('Error en la conexión: ');
  4.  
  5. $sql = 'UPDATE agenda SET apellidos = ?, preferencias = ?, WHERE nombre = ?';
  6. $query = mysqli_prepare($conexion,$sql) or die('Error al preparar la sentencia: '.mysqli_error($conexion));
  7. mysqli_stmt_bind_param($query, 'sss', $_POST['apellidos'], $_POST['preferencias'], $_POST['nombre']) or die('Error al asociar variables: '.mysqli_stmt_error($query));
  8.  
  9. //verificamos cuantos registros fueron afectados
  10. if (mysqli_stmt_affected_rows($query) !== false) {
  11. echo '<p>Tiene permisos</p>';
  12. }else {
  13. echo '<p>No tiene permisos</p>';
  14. }
  15.  
  16. mysqli_close($conexion);
  17. ?>

Analiza bien los errores, si no sabes ingles usa el traductor de Google, y después busca una solución, yo tengo que salir así que no podré ayudarte hasta mas tarde...

Se me olvidaba, el código ya lo probe en mi equipo y funciona correctamente, verifica que los datos de conexión sean correctos y que tu sentencia SQL también sea correcta...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 26/10/2012 a las 19:17
  #26 (permalink)  
Antiguo 26/10/2012, 19:18
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Gracias por responderme.
No hago caso en vano de ninguno de tus comentarios; hasta he probado yu ultimo codigo que me dijiste y no me daba resultado alguno.
Probare ahora tu codigo y te enviare la respuessta por este medio. Yo, estare dos horas mas, despues mañana por la mañana ya estare de nuevo operativo para intentar solucionar este problema que se me ha presentado porque el insert esta con el delete atajado pero el update siempre y cuando haya una variable ya dada en un campo de la base de datos se presenta, de momento, dificil.
Por favor, si puedes mira este post cuando puedas y tengas tiempo.
Muchas gracias Nemutagk.
Un saludo
  #27 (permalink)  
Antiguo 26/10/2012, 19:45
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

Ahora mismo, tu script funciona, era porque habia una coma antes del WHERE en la linea de $sql.
Pero hay un problema todavia.
Independientemente del nombre que se ponga en el formulario (este o no este en la base de datos), me da como resultado esto en pantalla.......

Tiene permisos

Y lo que queria era que un usuario pueda modificar sus datos como puede ser su apellido y sus preferencias siempre que figure su nombre en la base de datos, que un script le diga que ha podido actualizar sus datos siempre que su nombre figurara en un campo de la base de datos .

Si tienes un momento, mira esto por favor Nemutagk.

el codigo definitivo es este,...

<?php

$conexion = mysqli_connect('','','','') or die('Error en la conexión: ');

$sql = 'UPDATE agenda SET apellidos = ?, preferencias = ? WHERE nombre = ?';
$query = mysqli_prepare($conexion,$sql) or die('Error al preparar la sentencia: '.mysqli_error($conexion));
mysqli_stmt_bind_param($query, 'sss', $_POST['apellidos'], $_POST['preferencias'], $_POST['nombre']) or die('Error al asociar variables: '.mysqli_stmt_error($query));
mysqli_stmt_execute($query);

//verificamos cuantos registros fueron afectados
if (mysqli_stmt_affected_rows($query) !== false) {
echo '<p>Tiene permisos</p>';
}else {
echo '<p>No tiene permisos</p>';
}

mysqli_stmt_close($query);
mysqli_close($conexion);
?>




Muchisimas gracias por tu tiempo

Última edición por maquinistas; 26/10/2012 a las 19:46 Razón: fallo en la escritura
  #28 (permalink)  
Antiguo 26/10/2012, 19:57
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: update vs mysql_num_rows

Te estoy contestando desde mi celular, eso ya es cuestión de la comprobación de mysqli_stmt_affected_rows, en realidad esta mal comparar contra false (error mio), la comprobación debe ser != -1, si es igual a -1 quiere decir que no se encontro ninguna coincidencia en el where, checa el manual de la función para mas datos...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #29 (permalink)  
Antiguo 26/10/2012, 20:08
 
Fecha de Ingreso: agosto-2012
Ubicación: vigo
Mensajes: 84
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: update vs mysql_num_rows

he probado los siguientes.....
if (mysqli_stmt_affected_rows($query) != -1) { da tiene permisos dando igual el nombre q ponga
if (mysqli_stmt_affected_rows($query) != 0) { da no tiene permisos dando igual el nombre q ponga
if (mysqli_stmt_affected_rows($query) != 1) { da tiene permisos dando igual el nombre q ponga

Y ya he puesto con anterioridad, false y true. Yo creo que se acaban los condicionales.

Te agradezco mucho tus contestaciones.
Gracias
  #30 (permalink)  
Antiguo 26/10/2012, 20:34
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: update vs mysql_num_rows

Ya estoy en casa, a mi me funciona correctamente, no se si sea por la versión (la versión de PHP que uso es 5.4), en fin, puedes usar...

Código PHP:
Ver original
  1. if (mysqli_stmt_affected_rows($query) > 0) {
  2.      echo 'registros modificados!';
  3. }else {
  4.      echo 'no hay registros modificados';
  5. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:57.