Mysqul y php, problemas

Comencé hacer algunos ejemplos simple para realizar lo de mi proyecto solo que esta vez falla la consulta los códigos son los siguiente:
Formulario entrada
<form action="http://mysevidor/php/buscador.php3" method="post">
Palabra clave: <input name="T1" size="20" type="text" />
<input name="buscar" type="submit" value="Buscar" />
</form>
El siguiente script de búsqueda lo llamaremos buscador.php3, y será el encargado de hacer la búsqueda en la BD, y devolver por pantalla los registros encontrados.
Script búsqueda
Formulario entrada
<html>
<body>
<form method="POST" action="http://mysevidor/php/buscador.php3">
<strong>Palabra clave:</strong> <input type="text" name="T1" size="20"><br><br>
<input type="submit" value="Buscar" name="buscar">
</form>
</body>
</html>
El siguiente script de búsqueda lo llamaremos buscador.php3, y será el encargado de hacer la búsqueda en la BD, y devolver por pantalla los registros encontrados.
Script búsqueda
<html>
<body>
<?php
if (!isset($buscar)){
echo "Debe especificar una cadena a bucar";
echo "
</html>
</body>
\n";
exit;
}
$link = mysql_connect("localhost", "nobody");
mysql_select_db("mydb", $link);
$result = mysql_query("SELECT * FROM agenda WHERE nombre LIKE '%$buscar%' ORDER BY nombre", $link);
if ($row = mysql_fetch_array($result)){
echo "
<table border = '1'>
\n";
//Mostramos los nombres de las tablas
echo "
<tr>
\n";
while ($field = mysql_fetch_field($result)){
echo "
<td>$field->name</td>
\n";
}
echo "
</tr>
\n";
do {
echo "
<tr>
\n";
echo "
<td>".$row["id"]."</td>
\n";
echo "
<td>".$row["nombre"]."</td>
\n";
echo "
<td>".$row["direccion"]."</td>
\n";
echo "
<td>".$row["telefono"]."</td>
\n";
echo "
<td><a href='mailto:".$row["email"]."'>".$row["email"]."</a></td>
\n";
echo "
</tr>
\n";
} while ($row = mysql_fetch_array($result));
echo "
</table>
\n";
} else {
echo "¡ No se ha encontrado ningún registro !";
}
?>
</body>
</html>
Pero al hacer la búsqueda solo me muestra el siguiente mensaje:
Debe especificar una cadena a buscar. No se que este mal, ¿me podrías ayudar?
Gracias

1 respuesta

Respuesta
1
El problema es que están tomando las variables como globales y por seguridad el servidor las desactiva (register_global = off)
Entonces para asegurarte siempre y evitar este problema toma las variables GET de la url como $_GET['nombre_variable'] y las POST de los formularios como $_POST['nombre_variable']
Entonces en tu caso cambia la comprobación por esta:
if ( !isset ( $_POST['buscar'] ) ) { echo "Debes....
Gracias, ya lo intente pero sigue igual.
Pero estoy haciendo otro programa donde el primero se llama calificaciones e este pide matricula y contraseña el otro programas se llama mostrar y es el siguiente código:
$boleta = mysql_connect("localhost", "root");
mysql_select_db("boleta", $boleta);
$matricula="%".$_POST['matricula']."%";
$contrasena="%".$_POST['contrasena']."%";
if (!isset($matricula)){
echo "Debe especificar matricula y la contraseña";
echo "
\n";
exit;
}
else{
$consulta = "SELECT * FROM calificaciones WHERE matricula= '$matricula' AND contrasena = $contrasena";
$datos = mysql_query($consulta);
if ($row = mysql_fetch_array($datos)){
echo "
<table border="1">
\n";
do {
echo "
<tbody>
<tr>
\n";
echo "
<td>".$row["nombre"]."</td>
\n";
echo "
<td>".$row["direccion"]."</td>
\n";
echo "
<td>".$row["telefono"]."</td>
\n";
echo "
<td>".$row["materia1"]."</td>
\n";
echo "
<td>".$row["materia2"]."</td>
\n";
echo "
<td>".$row["materia3"]."</td>
\n";
echo "
<td>".$row["materia4"]."</td>
\n";
echo "
<td>".$row["materia5"]."</td>
\n";
echo "
<td>".$row["materia6"]."</td>
\n";
echo "
<td>".$row["calf1"]."</td>
\n";
echo "
<td>".$row["calif2"]."</td>
\n";
echo "
<td>".$row["calf3"]."</td>
\n";
echo "
<td>".$row["calif4"]."</td>
\n";
echo "
<td>".$row["calf5"]."</td>
\n";
echo "
<td>".$row["calif6"]."</td>
\n";
echo "
</tr>
\n";
} while ($row = mysql_fetch_array($datos));
echo "
</tbody>
</table>
\n";
}
else {
echo "¡ No se ha encontrado ningún registro !";
}
}
//mysql_free_result($boleta);
//mysql_free_result($mostar);
"
";
// mysql_close
//}
?>
Al ejecutarlo aparece esto:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\wamp\www\PaginaIMCED\mostrar_boleta2.php on line 79
¡ No se ha encontrado ningún registro !
¿Parece qué no entre al ciclos y al primer if que esta mal?
Gracias
El warning es porque estas intentando mostrar los datos cuando no los hay, esto puede suceder porque no te ha devuelto ningún valor o te ha generado un error, que creo que es tu caso
en la sentencia veo que utilizas los comodines del like en una comparación, es decir:
SELECT * FROM calificaciones WHERE matricula= '$matricula' AND contrasena = $contrasena
donde $contrasena y $matricula son:
$matricula="%".$_POST['matricula']."%";
$contrasena="%".$_POST['contrasena']."%";
si cambiamos $_POST por un valor lo veremos más claro:
$matricula="%test_matricula%";
$contrasena="%test_contrasena%";
si cambiamos en la sentencia sql:
SELECT * FROM calificaciones WHERE matricula= '%test_matricula%' AND contrasena = %test_contrasena%
entonces:
- primero: las cadenas de texto han de ir entre comillas simples -> contrasena = '%test_contrasena%'
- Segundo: El comodín % se usa en LIKE, no en = ya que en este caso te lo considera como un carácter más que ha de estar dentro del valor del campo
- Tercero: Si el dato a buscar ha de ser exacto no utilizar LIKE sino =, por ejemplo en la contraseña y si puede ser igual entonces si utilizarlo
entonces la sentencia SQL correcta sería así:
SELECT * FROM calificaciones WHERE matricula= 'test_matricula' AND contrasena = 'test_contrasena'
y en forma de variables:
$matricula=$_POST['matricula'];
$contrasena=$_POST['contrasena'];
$consulta = "SELECT * FROM calificaciones WHERE matricula= '$matricula' AND contrasena = '$contrasena' ";
Consejo: utiliza el phpMyadmin para probar si las sentencias están bien, después de la lines $consulta = "SELECT ... ... pon echo $consulta; y lo que te escriba ponlo en el phpmyadmin, ahí te dará el error y podrás ir ajustándolo hasta que encuentres el fallo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas