Por lo tanto, quiero crear mi propio motor de búsqueda para encontrar datos escribiendo el título en el cuadro de búsqueda y obtener los datos de mi base de datos y el resultado como lo que ingresan los usuarios en el cuadro de búsqueda ... así que aquí está mi código: 1 CÓDIGO HTML (CUADRO DE BÚSQUEDA)
<form id="hform-search" class="hform-search" method="post" action=""> <input id="search-box" class="form-control" type="text" placeholder=" I want to learn.." name="keyword" autocomplete="off" autofocus="" /> <div id="suggesstion-box"></div> <input type="submit" class="btn btn-default f-tutorials" name="go_t" value="Find Tutorials" /> <input type="submit" class="btn btn-default f-course" name="go_c" value="Find Courses" /> <p class="hero-subtitle"><em>"Let us help you to involve"</em> </p> </div> </form>
CÓDIGO PHP
$conn = mysqli_connect("localhost","root","","neurorial"); if ($_POST[go_t] == 'Find Tutorials') { $keyword_t = $_POST[keyword]; $find_t = mysqli_query($conn, "SELECT * FROM search WHERE video_tutorial LIKE '%$keyword_t%' "); $check_t = mysqli_num_rows($find_t); if ($check_t == 0) { echo 'sorry the video with this " $keyword_t " keyword is not found'; }else { while ($rows_t=mysqli_fetch_array($find_t) ) { echo "$rows_t[video_tutorial]<br>"; } } } if ($_POST['go_c'] == 'Find Courses') { global $conn; $keyword_c = $_POST['keyword']; $find_c = mysqli_query($conn, "SELECT * FROM search WHERE course LIKE '%$keyword_c%'"); $check_c = mysqli_num_rows($find_c); if ($check_c == 0) { echo "maaf pencarian Course dengan keyword $keyword_c tidak di temukan"; }else { while ($find_c = mysqli_fetch_array($find_c) ) { echo "$find_c[course]<br>"; } } }
Entonces siempre obtuve este resultado:
Aviso: Uso de go_t constante indefinido - asumido 'go_t' en D:\KAMPUS\Server\htdocs\PW\Neuro.inc\index.php en la línea 87
Aviso: Índice indefinido: go_t en D:\KAMPUS\Server\htdocs\PW\Neuro.inc\index.php en la línea 87
Aviso: Índice indefinido: go_c en D:\KAMPUS\Server\htdocs\PW\Neuro.inc\index.php en la línea 100
¿Alguien podría resolver este problema y decirme por qué siempre recibí este error? ¡Gracias por adelantado! :)
Es porque su código también se ejecuta antes de enviar el formulario
<?php if ($_POST){ //<------------ Add this condition $conn = mysqli_connect("localhost","root","","neurorial"); if ($_POST['go_t'] == 'Find Tutorials') { //<---------------- change here $keyword_t = $_POST[keyword]; $find_t = mysqli_query($conn, "SELECT * FROM search WHERE video_tutorial LIKE '%$keyword_t%' "); $check_t = mysqli_num_rows($find_t); if ($check_t == 0) { echo 'sorry the video with this " $keyword_t " keyword is not found'; }else { while ($rows_t=mysqli_fetch_array($find_t) ) { echo "$rows_t[video_tutorial]<br>"; } } } if ($_POST['go_c'] == 'Find Courses') { global $conn; $keyword_c = $_POST['keyword']; $find_c = mysqli_query($conn, "SELECT * FROM search WHERE course LIKE '%$keyword_c%'"); $check_c = mysqli_num_rows($find_c); if ($check_c == 0) { echo "maaf pencarian Course dengan keyword $keyword_c tidak di temukan"; }else { while ($find_c = mysqli_fetch_array($find_c) ) { echo "$find_c[course]<br>"; } } } } ?>
Obtiene el error específico que mencionó porque no citó go_t
en la segunda línea de su código PHP.
$_POST[go_t]
debe ser $_POST['go_t']
.
También debe verificar para asegurarse de que la clave también esté configurada en la matriz; eso hace que sus declaraciones if
se vean como las siguientes:
if (isset($_POST['go_t']) && $_POST['go_t'] == 'Find Tutorials') {
if (isset($_POST['go_c']) && $_POST['go_c'] == 'Find Courses') {
Como @b-desai también señaló, también podría agregar la condición if ($_POST)
; pero eso solo significa que el código no se ejecutará en absoluto a menos que la solicitud haya llegado a través de POST.
Sin embargo, tal como está, su código tiene algunas fallas realmente significativas que volverán a morderlo más adelante. Lo que es más importante, está sujeto a inyección SQL, secuencias de comandos entre sitios (XSS) y CSRF. Esto último no lo abordaré aquí, pero deberías investigarlo por ti mismo.
Para abordar la inyección SQL, nunca use cadenas interpoladas en consultas SQL, como lo ha hecho en estas líneas:
$find_t = mysqli_query($conn, "SELECT * FROM search WHERE video_tutorial LIKE '%$keyword_t%' ");
$find_c = mysqli_query($conn, "SELECT * FROM search WHERE course LIKE '%$keyword_c%'");
Por la forma en que están escritos, todo lo que un usuario escriba en su filtro de búsqueda pasará directamente a su base de datos; necesita escapar de eso, o mejor aún, use declaraciones preparadas (Google será su amigo aquí; busque PDO).
Para abordar las secuencias de comandos entre sitios; si no se encuentran resultados de búsqueda, está enviando la palabra clave del usuario directamente al navegador sin escapar. Si agregaron una etiqueta <script>
o similar, podrían robar cookies de sus usuarios, o algo peor.
Siempre debe asegurarse de escapar de todos los resultados y siempre asumir que sus usuarios son malintencionados, algunos de ellos lo serán.
Me doy cuenta de que este es solo un pequeño ejemplo, pero advierto que no se debe poner en producción un código de este tipo.