Warning en php

KoRMuZ

Buenas tardes, ya me estoy haciendo un habitual preguntando por aqui, pero no consigo dar con el fallo. Bueno, vamos al problema, me da este warning al intentar logearme

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/almagfxn/public_html/abraham/admin/autentificar.php on line 11
Nick y pass incorrectos?>

Os pongo las lineas 10 y 11

$usuarios=mysql_query("SELECT * FROM users WHERE nick='$POST[nick]' and pass='$POST[pass]' ");
if($user_ok = mysql_fetch_array($usuarios)){

no se por donde meterle mano ya. Si alguno me puede exar un cable, muchas gracias.

-nazgul-

Ese error indica un fallo en la sintaxis SQL.

"SELECT * FROM users WHERE nick='".$POST[nick]."' and pass='".$POST[pass]."'"

Prueba así.

KoRMuZ

Me da el mismo error exactamente

PD: me da otro error y no se porque, porque cuando lo tenia montado en mi ordenador funcionaba perfectamente todo. me da un error de la linea 30
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/almagfxn/public_html/abraham/noticias.php on line 30

este es el codigo, la linea 30 es la k pongo la doble barra

$result=mysql_query("SELECT * FROM noticias order by fecha desc");
$i=0;
for ($i=0;$i<5;$i++){
//$row=mysql_fetch_array($result);
echo "<table><tr><td>";?><span class="titular">
<? echo ("$row[Titular]");echo"<br>";?>
</span>
<? echo ("$row[Noticia]");echo"<br>";?>
<span class="fecha">
<? echo ("$row[fecha]");echo " ";?></span>
puesta por <span class="fecha"><? echo("$row[usuario]"); ?></span>
<? echo "</td></tr></table>";
}

guner

El error de nunca acabar de las variables concatenadas con strings y los índices de las matrices ....

$usuarios = mysql_query("SELECT * FROM users WHERE nick='${POST['nick']}' and pass='${POST['pass']}'");

if ($user_ok = mysql_fetch_array($usuarios)) {
...

de todas formas lo que puso -nazgul- debería haber solucionado el error en la cadena de la query, y debería funcionar pasando por alto el fallo del índice de la matriz

KoRMuZ

sigue sin funcionarme :(

Josepanaero

Prueba con esto a ver:

$usuarios=mysql_query("SELECT * FROM users WHERE nick='$POST[nick]' and pass='$POST[pass]' ");

if (mysql_num_rows($usuarios) == 1){
// Resto del código
}

Nota: lo de
$usuarios=mysql_query("SELECT * FROM users WHERE nick='$POST[nick]' and pass='$POST[pass]' ");
lo he dejado como lo tenías antes, sólo he cambiado lo otro.

Edit: la cuestión de esto es q creo q falla algo y no coges nada de la base de datos, sabes lo q te quiero decir? Q haces la consulta pero no te devuelve lo q esperabas, q te devuelve basura, o NULL o qué sé yo. Has comprobado si te conectas correctamente a la base de datos?

guner

pon error_reporting(E_ALL); al principio del script y ponnos todos los mensajes warning / error / notice ...

Y también, justo después del mysql_query y del mysql_connect pon print mysql_error();

KoRMuZ

Ya lo he mirado, y creo que la conexion está bien hecha, porque antes me daba un error de conexion, pero ahora ya no, por lo que supongo ke ese fallo ya estarí arreglado.

Mañana probaré eso que me has dicho, a ver si m tira, pero no se porque no me funciona, porque como ya dije antes, tngo otra pagina con el mismo codigo (solo cambio de nombres) pero en otro servidor y m funciona perfectamente.

B

en lugar de escribir la consulta sql directamente sobre el mysql_query, métela primero en una variable. rollo:

$Q="SELECT * FROM users
WHERE nick LIKE '".$POST['nick']."' AND pass LIKE '".$POST['pass']."';";

luego la imprimes por pantalla

echo "<p>".$Q."<p>"

y si ves que la consulta ha quedado bien, porque la de #1 no lo haría, la pruebas en el phpmyadmin para ver qué hace.

una vez sabes que la consulta tiene sentido y puede ejecutarse, el fallo sólo puede estar en la conexión. he visto que no la pasas explícitamente al mysql_query. yo la pondría, aunque fuese por desconfianza. así:

$result=mysql_query("SELECT * FROM noticias", $C);

donde $C viene de un previo:
$C = mysql_connect("localhost", "user_de_la_bdd", "pass_de_la_bdd");
mysql_select_db("nombre_de_la_bdd", $C);

ojo paligru esto que dices de "otro servidor". va a ser que pones el user, o el pass, o el nombre de la bdd incorrecto. fijo fijo.

EnTe

oye, en el query te falta el recurso de conexion!!!!! por eso pone ese error! xD. no se si alguien lo ha puesto antes que yo pero es igual, lo digo. tienes que poner como pongo yo aqui.

$conexion=mysql_connect("$servidor","$usuario_db","password") or die ("no se ha establecido la conexion");

$Q=mysql_query("SELECT * FROM users WHERE (nick='$POST['usuario']') && (password='$POST['password'])",$conexion);

de todas formas, pasa las variables globales a variables locales, te ahorrarás muchos problemas. He visto muchos ejemplo aqui y no puedes poner comillas dobles (") dentro de comillas dobles, no te deja, siempre hay que poner comillas simples ('). Prueba a ponerle el $conexion al final porque cuando te dice error con el resource al final suele ser porque falta el recurso de conexion.

Salu2

KoRMuZ

Llevais razon, kreo k es eso del param d conexion, k me lo he saltado xd

I

si no pones el parametro de conexión también debe funcionar, de toas formas deberias saber concatenar y usar los índices de los array y demas

Concatenar bien:

$q = 'la la la ' . $_POST['nick'] . ' le re le ';

esa es la mejor manera de hacerlo, no olvides poner las comillas en nick, que si no estas llamando a una constante que no existe.

Debug:

mysql_query(...) or die(mysql_error());

en el aso de que el query retorne false se ejecutará el die, que parará el script arrojando un mensaje por pantalla, ese mensaje es el mysql_error que es el error que ha dado mysql.

Foni

te falta el parámetro de la conexion, pero ese mismo fallo me lo daba a mi por un fallo en la sintasis del nombre de la tabla.

Asi que ese fallo te lo puede dar si no tienes la tabla users creada en mysql

KoRMuZ

Foni, eso lo miré y no era, porque a mi tambien me habia pasado en otra web.

Usuarios habituales