Menú
Está libre
registrarse
el principal  /  Consejo / Nacimiento al elemento de búsqueda del hombre PHP I. Menú multinivel en PHP y MySQL

Nacimiento de un elemento de búsqueda de hombre PHP I. Menú multinivel en PHP y MySQL

Por Ibrahim Diallo.

Publicado jul 2 2014 ~ 16 minutos Leer

La búsqueda es una característica importante en un sitio web. Cuando mis pocos lectores quieren buscar un pasaje en particular en mi blog, el cuadro de búsqueda. Solía \u200b\u200bser alimentado por la búsqueda de Google, pero desde entonces lo he cambiado a mi propia versión en casa, no porque puedo hacerlo mejor, pero porque era un desafío interesante.

Si tiene prisa y simplemente quiere que su sitio se esté de búsqueda, haga lo que hice antes, use Google.

// en Search.php archivo $ TERM \u003d ISSET ($ _ obtenga ["consulta"]) $ _ Obtenga ["Consulta"]: ""; $ Término \u003d urlencode ($ plazo); $ Sitio web \u003d URLENCODE ("www.yourwebsite.com"); $ redirect \u003d "https://www.google.com/search?q\u003dsite%3a($Website) + ($ término)"; Encabezado ("Ubicación: $ Redirect"); Salida;

Lo que hace es bastante simple. Obtenga el término aprobado por el usuario y envíelo a la página de búsqueda de Google. Limite el resultado de la búsqueda a nuestro dominio actual usando el sitio: palabra clave en la consulta de búsqueda. Todas las páginas que están indexadas por Google estarán disponibles a través de la búsqueda ahora. Sin embargo, si quieres manejar tu búsqueda en casa, entonces sigue leyendo.

Solución de búsqueda casera

Antes de que vayamos más, intente usar el cuadro de búsqueda en este blog. Utiliza el mismo proceso que describiré a continuación. Si sientes que esto es lo que quieres, entonces continúe leyendo.

Esta solución se atiende a sitios web pequeños. Hago uso de Like with with wilds en ambos extremos, lo que significa que su búsqueda no se puede indexar. Esto significa que la solución funcionará bien para su blog o sitio web personal que no contiene toneladas de datos. Póngalo en un sitio web más grande y puede ser muy lento. MySQL ofrece una búsqueda completa de texto no es lo que estamos haciendo aquí.

Nota: Si tienes 5000 mensajes de blog, todavía estás bien. .

Tomaremos la estructura de este blog como referencia. Cada publicación de blog tiene:

  • Un titulo p_title
  • Una URL P_URL
  • Un resumen p_summary.
  • Un contenido de post p_contentnt
  • Y catterories category.tagname.

Forume Field que coincide con nuestro término de búsqueda, le daremos una puntuación. El puntaje se basará en la importancia del partido:

// Las coincidencias exactas del término se encuentran en el título $ PuntageFulTitle \u003d 6; // coincide con el título en la parte $ scoretitlekeyword \u003d 5; // Las coincidencias exactas del término se encuentran en el resumen $ PuntuaciónFullSmary \u003d 5; // coincide con el resumen en la parte $ scoresummarykeywordword \u003d 4; // Las coincidencias exactas del término se encuentran en el contenido $ PuntuaciónFuldocument \u003d 4; // coincide con el documento en la parte $ scoredocumentywordword \u003d 3; // coincide con una categoría $ scorecategorykeywordword \u003d 2; // coincide con la URL $ PORARLKEYWORK \u003d 1;

Antes de que comenzara WEIT, hay algunas palabras que no contribuyen mucho a una búsqueda que se debe eliminar. Ejemplo "en", "It", "A", "The" "," de "... Los filtraremos y nos sentiremos libre de agregar cualquier palabra que creas que es irrelevante. Otra cosa es que queremos limitar la longitud de nuestra consulta. No queremos que un usuario escriba una novela en el campo de búsqueda y bloquee nuestro servidor MySQL.

// Eliminar las palabras innecesarias del término de búsqueda y devolverlas como una función de matriz FilterSearchKeys ($ consulta) ($ consulta \u003d recortar (preg_replace ("/ (\\ s +) + /", "", $ consulta)); palabras \u003d Array (); // Expandir esta lista con tus palabras. $ LISTA \u003d Array ("" en "," It "," A "," The "," de "," You "," yo "," You " "Él", "yo", "nosotros", "ellos", "ella", "ella", "a", "," pero "," eso "," esto "," esos "," entonces "); $ c \u003d 0 ; Foreach (explotar (", $ consulta) como $ clave) (si (in_array ($ clave, listada)) (continúe;) $ palabras \u003d $ tecla; si ($ c\u003e \u003d 15) (romper;) $ c ++;) Devuelva $ PALABRAS;) // Limitar las palabras Número de caracteres Función Limitchars ($ consulta, $ límite \u003d 200) (Substrano de retorno ($ consulta, 0, límite $ $);)

Nuestras funciones de ayuda ahora pueden limitar el recuento de caracteres y filtrar palabras inútiles. El camino implementará nuestro algoritmo es dando una puntuación cada vez que encontramos un partido. Coincidiremos con las palabras usando la declaración de IF y acumularemos puntos a medida que coincidamos con más palabras. Al final podemos usar esa puntuación para ordenar nuestros resultados.

Nota: No mostraré cómo conectarse a la base de datos MySQL. Si tiene problemas para conectarse de manera eficiente a la base de datos, recomiendo leer esto.

Permítanos dar nuestra función una estructura primero. Nota Salí de marcadores de posición para que podamos implementar las secciones por separado.

Búsqueda de funciones ($ consulta) ($ consulta \u003d recortar ($ consulta); if (mb_strlen ($ consulta) \u003d\u003d\u003d 0) (// no necesidad de ¿Quecho vacío, ¿verdad? FALSO RETORNO; ) $ Consulta \u003d limitros ($ consulta); // Pesando puntajes $ PuntuaciónFullTitle \u003d 6; $ Scoretitlekeyword \u003d 5; $ PageFentlsummary \u003d 5; $ scoresumarykeyword \u003d 4; $ PuntuaciónFuldocument \u003d 4; $ scoredocumentkeyword \u003d 3; $ scorecategoryywordword \u003d 2; $ Página de puntuaciónLeyword \u003d 1; $ Palabras clave \u003d FilterSearchKeys ($ consulta); $ escquery \u003d db :: escape ($ consulta); // ver nota arriba para obtener el objeto DB $ titlesql \u003d array (); $ SumSQL \u003d Array (); $ docsql \u003d matriz (); $ CategoríaSQL \u003d Array (); $ URLSQL \u003d Array (); / ** Coincidencia de ocurrencias completas del titular de lugar ** / ** Palabras clave coincidentes Coloque el titular de lugar ** / $ SQL \u003d "Seleccione P.P_ID, P.P_TITLE, P.P_DATE_PUTRICH, P.P_URL, P.P_SULTARIO, P.P_CONTENT, P .Thumbnail, (- puntaje de título .Implode ("+", $ titlesql). ") + (- Resumen" .Impllede ("+", $ SumSQL). ") + (- Documento". Implodes ("+", $ docsql). ") + (- TAG / CATEGORÍA" .Impllede ("+", $ CategorySQL). ") + (- URL .Implode (" + ", $ URLSQL).")) Como relevancia de la Publicación P donde P.Status \u003d "Publicado" Tener relevancia\u003e

En la consulta, todas las puntuaciones se resumirán como la variable de relevancia y podemos usarlo para ordenar los resultados.

Coincidir con apariciones completas.

Nos aseguramos de que tengamos algunas palabras clave primero y luego agregamos nuestra consulta.

Si (cuenta ($ palabras clave)\u003e 1) ($ titlesql \u003d "if (p_title como"%. $ Escaque. "%", ($ Puntuación), 0) "; $ Sumsql \u003d" if (p_summary like "%. $ Escquery. "%", ($ Página de partidaLsumary), 0) "; $ docsql \u003d" if (p_content like "%." $ Escqueteros. "%", ($ Página), 0) ";)

Esos son los partidos con puntuación más alta. Si el término de búsqueda coincide con un artículo que contiene estos, tendrán que aparecer más alto en la parte superior.

Coincidentes palabras clave ocurrencias.

Lucamos por todas las palabras clave y revisamos si coinciden con cualquiera de los campos. Para la coincidencia de categoría, se administra una subcogación ya que una publicación puede tener múltiples categorías.

Foreach ($ palabras clave como $ clave) ($ titlesql \u003d "if (p_title como"% ". Db :: escape ($ clave)."% ", ($ Scoretlekeyword), 0)"; $ sumsql \u003d "if (p_summary Como "%". DB :: Escape ($ clave). "%", ($ Scoresumarykeywordword), 0) "; $ docsql \u003d" if (p_content like "%." Db :: escape ($ llave). "% ", ($ Scoredocumentykeyword), 0)"; $ URLSQL \u003d "IF (P_URL LIKE"%. "DB :: Escape ($ Tecla)."% ", ($ Página de margen), 0)" $ categorysql \u003d "if ( (Seleccionar conteo (category.tag_id) de la categoría Unirse post_category en post_category.tag_id \u003d category.tag_id donde post_category.post_id \u003d p.post_id y category.name \u003d "" .db :: escape ($ clave). "")\u003e 0, ($ scorecategoryywordword), 0) ";)

También tal como lo señala un comentarista a continuación, debemos asegurarnos de que estas variables no sean matrices vacías o la consulta fallará.

// solo en caso de que esté vacío, agregue 0 si (vacío ($ titlesql)) ($ titlesql \u003d 0;) si (vacío ($ sumsql)) ($ sumsql \u003d 0;) si (vacío ($ docsql)) ( Vacío $ docsql \u003d 0;) si (vacío ($ urlsql)) ($ urlsql \u003d 0;) si (vacío ($ tagsql)) ($ tagsql \u003d 0;)

Al final, los QUERS están concatenados y se suman para determinar la relevancia de la publicación al término de búsqueda.

// Eliminar las palabras innecesarias del término de búsqueda y devolverlas como una función de matriz FilterSearchKeys ($ consulta) ($ consulta \u003d recortar (preg_replace ("/ (\\ s +) + /", "", $ consulta)); palabras \u003d Array (); // Expandir esta lista con tus palabras. $ LISTA \u003d Array ("" en "," It "," A "," The "," de "," You "," yo "," You " "Él", "yo", "nosotros", "ellos", "ella", "ella", "a", "," pero "," eso "," esto "," esos "," entonces "); $ c \u003d 0 ; Foreach (explotar (", $ consulta) como $ clave) (si (in_array ($ clave, listada)) (continúe;) $ palabras \u003d $ tecla; si ($ c\u003e \u003d 15) (romper;) $ c ++;) Devuelva $ PALABRAS;) // Limitar las palabras Número de caracteres Función Limitchars ($ consulta, $ límite \u003d 200) (Substro de devolución ($ consulta, 0, $ límite);) Búsqueda de funciones (Consulta de $) ($ consulta) ($ consulta) \u003d Recorte ($ consulta); Si (mb_strlen ($ consulta) \u003d\u003d\u003d 0) (/ / No necesidad de búsqueda vacía ¿verdad? Retorno falso;) $ Query \u003d Limitchars ($ consulta); // Ponderación $ PuntuaciónFullltle \u003d 6 $ Scoretitlekeyword \u003d 5; $ PuntuaciónFullsUrmary \u003d 5; $ ScoresummaryKeyword yword \u003d 1; $ Palabras clave \u003d FilterSearchKeys ($ consulta); $ escquery \u003d db :: escape ($ consulta); // ver nota arriba para obtener el objeto DB $ titlesql \u003d array (); $ SumSQL \u003d Array (); $ docsql \u003d matriz (); $ CategoríaSQL \u003d Array (); $ URLSQL \u003d Array (); / ** Coincidencia completa de ocurrencias ** / if (contar ($ palabras clave)\u003e 1) ($ titlesql \u003d "if (p_title como"%. "$ Escqueteros."% ", ($ Puntuación), 0)"; $ Sumsql \u003d "Si (p_summary like"% ". $ Escquetería."% ", ($ Página de barrio), 0)"; $ docsql \u003d "if (p_content like"%. $ Escquery. "%", ($ Página), 0 ) ";) / ** Palabras clave de coincidencia ** / foreach ($ palabras clave como $ clave) ($ titlesql \u003d" if (p_title como "%". Db :: escape ($ clave). "%", ($ Scoretitlekeyword) , 0) "; $ Sumsql \u003d" if (p_summary like "%". Db :: escape ($ clave). "%", ($ Scoresumarykeywordword), 0) "; $ docsql \u003d" if (p_content like "%" .Db :: escape ($ clave). "%", ($ Scoredocumentkeywordword), 0) "; $ urlsql \u003d" if (p_url like "%." Db :: escape ($ clave). "%", ($ Página de puntuación), 0) "$ categorysql \u003d" if ((select contar (category.tag_id) de la categoría Unirse post_category en post_category.tag_id \u003d category.tag_id donde post_category.post_id \u003d p.post_id y categoría.name \u003d "" DB: : Escape ($ clave). "" ")\u003e 0, ($ scorecategoryywordword), 0)";) // simplemente en caso de que esté vacío, agregue 0 si (vacío ($ titlesql)) ($ titlesql \u003d 0;) Si (Vacío ($ SumSQL)) ($ SumSQL \u003d 0; ) Si (vacío ($ docsql)) ($ docsql \u003d 0;) si (vacío ($ urlsql)) ($ urlsql \u003d 0;) si (vacío ($ tagsql)) ($ tagsql \u003d 0;) $ sql \u003d " Seleccione P.P_ID, P.P_TITLE, P.P_DATE_PUPTRICH, P.P_URL, P.P_SULTARIO, P.P_CONTENT, P.Thumbnail, ((- Puntuación de título .Implode ("+", $ titlesql). ") + (- Resumen" .Impllede ("+", $ SumSQL). ") + (- Documento" .Implode ("+", $ docsql). ") + (- TAG / CATEGORÍA" .IMPLODE ("+ + ", $ categoríaSQL).") + (- URL. Relevancia Desc, P.Page_Views Desc Límite 25 "; $ Resultados \u003d db :: consulta ($ sql); Si (! $ resultados) (devolución falsa;) devuelve $ resultados; )

Ahora su archivo de búsqueda.php puede parecerse a esto:

$ TERM \u003d ISSET ($ _ Obtén ["Consulta"])? $ _ Obtenga ["Consulta"]: ""; $ search_results \u003d buscar ($ término); Si (! $ Search_Results) (Echo "sin resultados"; salida;) // imprimir página con los resultados aquí.

Creamos un simple algoritmo de búsqueda que puede manejar una buena cantidad de contenido. Elegí arbitrariamente la puntuación para cada partido, siéntase libre de modificarlo a algo que funciona mejor para usted. Y siempre hay espacio para mejorar.

Es una buena idea seguir el plazo de búsqueda que viene de sus usuarios, de esta manera puede ver si la mayoría de los usuarios buscan lo mismo. Si hay un patrón, entonces puede guardarlas un viaje y simplemente caché los resultados usando Memcached.

Si desea ver este algoritmo de búsqueda en acción, adelante e intente buscar un artículo en el cuadro de búsqueda en la parte superior de la página. He añadido funciones adicionales como devolver la parte donde se encontró el partido en el texto. Siéntase libre de agregar características al tuyo.

¿Te gustó este artículo? Puedes suscribirte a leer más impresionantes. .

En una nota relacionada, aquí hay algunos artículos interesantes.

Si hay una cosa que un servidor web hace que la ISS está conectando a la base de datos. He estado usando PHP durante muchos años, pero si me pide que escriba un script para recuperar los datos de la base de datos. No pude hacerlo sin volver al MANUAL Ultimate PHP para encontrar algunos ejemplos primero.

Hace unos meses actualicé mi versión PHP. PHP 5.4 a 5.5. Nunca tuve ningún problema actualizando PHP antes. Sigo su desarrollo de cerca y trato de eliminar mis funciones en desuso mucho antes de que se eliminen oficialmente. Pero esta vez fui atrapado de guardia. En silencio, se rompió parte de mi sitio web por la razón más difícil.

Comentarios (45)

Zarayel. 12 de agosto de 2015:

Ian Mustafa. 26 de septiembre de 2015:

Robar 29 de septiembre de 2015:

adeem. 11 de febrero de 2016:

Ivan Venediktov. 9 de abril de 2016.

Actualizado el 30 de abril de 2016.

Me voy a mostrar cómo crear una búsqueda simple con PHP y MySQL. Aprenderás:

  • Cómo utilizar. Obtener y Método POST.s.
  • Conectarse a la base de datos.
  • Comunicarse con la base de datos.
  • Encuentra las entradas de base de datos coincidentes Wort dada palabra o frase
  • Mostrar resultados.

Preparación.

Usted shald tiene Apache, MySQL y PHP instalados y funcionando, por supuesto (puede usar para diferentes plataformas o WAMP para ventanas, MAMP para MAC) o un servidor / hosting web que admite las bases de datos PHP y MySQL.

Vamos a crear una base de datos, tabla y complete algunas entradas que podemos usar para la búsqueda:

  • Vaya a PhpMyAdmin, si tiene un servidor en su computadora, puede acceder a él en http: // localhost / phpmyadmin /
  • Crea una base de datos, llamé a Mine Tutorial_Search
  • Crea Tabla I usé 3 campos, llamé artículos de minas.
  • Configuración para el primer campo. Nombre: ID, Tipo: INT, COMPROBACIÓN AUTO_INCREMENT, ÍNDICE: PRIMARIO

Int significa que es entero
Auto_inscrement significa que las nuevas entradas tendrán otro número (más alto) que antes
Índice: Primaria significa que es una clave única utilizada para identificar la fila

  • 2do Campo: Nombre: Título, Tipo: VARCHAR, LONGITUD: 225

Varchar significa una cadena de texto, máximo 225 caracteres (se requiere para especificar la longitud máxima), úselo para títulos, nombres, direcciones
longitud significa que no puede ser más largo de 225 caracteres (puede configurarlo para reducir el número si lo desea)

  • 3er Campo: Nombre: Texto, Tipo: Texto

El texto significa que es una cadena larga, no es necesaria para especificar la longitud, úsela para un texto largo.

  • Llene la tabla con algunos sitios web de artículos aleatorios, por ejemplo: CNN, BBC, etc.). Haga clic en Insertar en el menú superior y copie el texto a un campo específico. Deje el campo "ID" vacío. Inserte al menos tres.

Debería lucir algo así:

  • Cree una carpeta en su directorio de servidores y dos archivos: index.php y search.php (en realidad, podemos hacer todo esto con un archivo, pero dejar que usen dos, será más fácil)
  • Lléalos con marcado HTML predeterminado, DOCTYPE, cabeza, etc.

Buscar.

  • Cree un formulario con el campo de búsqueda y envíe el botón en index.php, puede usar el método GET o POST, configure la acción en busques.php. Yo uso "Query" como nombre para el campo de texto

Obtener - significa que su información se almacenará en URL (http: //localhost/tutorial_search/search.php? Query \u003d su consulta.)
POST: significa que su información no se mostrará, se utiliza para las contraseñas, información privada, mucho más segura que obtener

Ok, vamos a empezar con PHP.

  • Abrir búsqueda.
  • Iniciar php ()
  • Conéctese a una base de datos (lee los comentarios en el siguiente código)

< to > $ Consulta \u003d mysql_real_escape_string ($ consulta); // se asegura de que nadie use SQL Inyection $ RAW_RESULTS \u003d MYSQL_QUERY ("Seleccione * de los artículos donde (` Título ", como"% ". $ Consulta."% ") O (` texto "como"%. $ Consulta ".%" ) ") O muere (mysql_error ()); // * significa que selecciona todos los campos, también puede escribir: `id`,` title`, `Text` // Artículos es el nombre de nuestra tabla //"% $ consulta% "es lo que estamos buscando ,% Significa cualquier cosa, por ejemplo, si $ consulta es hola //, coincidirá con "hola", "Hola hombre", "GOGOHELLO", si desea coincidir exactamente use `title` \u003d" $ consulta "// o si desea Para que coincida con solo una palabra completa, por lo que "GOGOHELLO" está fuera de uso "% $ consulta%" ... o ... "$ consulta%" ... o ... "% $ consulta" if (mysql_num_rows ($ raw_results)\u003e

"$ Resultados [" Título "]".

". $ Resultados [" texto "]".

"// Resultados de las publicaciones recibidas de la base de datos (título y texto) También puede mostrar ID ($ Resultados [ID"])))) (// Si no hay filas coincidentes, hagas a partir de ECHO "Sin resultados")) (// Si la longitud de la consulta es menor que el eco mínimo "La longitud mínima es". $ Min_length;)?\u003e

¡Hecho!

Ahora funciona. Intente diferentes palabras, variaciones, código de edición, experimento. Estoy agregando un código completo de ambos archivos en caso de que piense que "se ha perdido algo. Siéntase libre de hacer preguntas o solicitar tutoriales.

index.php.

Buscar.

search.php.

Resultados de la búsqueda. \u003d $ min_length) (// Si la longitud de la consulta es de longitud mínima más o igual, entonces $ QUERY \u003d HTMLSpecialchars ($ consulta); // cambia los caracteres utilizados en HTML a sus equivalentes, por ejemplo:< to > $ Consulta \u003d mysql_real_escape_string ($ consulta); // se asegura de que nadie use SQL Inyection $ RAW_RESULTS \u003d MYSQL_QUERY ("Seleccione * de los artículos donde (` Título ", como"% ". $ Consulta."% ") O (` texto "como"%. $ Consulta ".%" ) ") O muere (mysql_error ()); // * significa que selecciona todos los campos, también puede escribir: `id`,` title`, `Text` // Artículos es el nombre de nuestra tabla //"% $ consulta% "es lo que estamos buscando ,% Significa cualquier cosa, por ejemplo, si $ consulta es hola //, coincidirá con "hola", "Hola hombre", "GOGOHELLO", si desea coincidir exactamente use `title` \u003d" $ consulta "// o si desea Para que coincida con solo una palabra completa, por lo que "GOGOHELLO" está fuera de uso "% $ consulta%" ... o ... "$ consulta%" ... o ... "% $ consulta" if (mysql_num_rows ($ raw_results)\u003e 0) (// Si se devuelve una o más filas, realizan después de ($ Resultados \u003d mysql_fetch_array ($ RAW_RESULTS)) (// $ Resultados \u003d MySQL_Fetch_Array ($ RAW_RESULTS) pone datos de la base de datos en matriz, mientras que lo hace válido. El eco de bucle "

"$ Resultados [" Título "]".

". $ Resultados [" texto "]".

"// Resultados de las publicaciones recibidas de la base de datos (título y texto) También puede mostrar ID ($ Resultados [ID"])))) (// Si no hay filas coincidentes, hagas a partir de ECHO "Sin resultados")) (// Si la longitud de la consulta es menor que el eco mínimo "La longitud mínima es". $ Min_length;)?\u003e

En este artículo, mostraré cómo crear. menú multinivel en PHP y MySQL. Por supuesto, las opciones para su creación se pueden inventar mucho, pero a juzgar por el número de sus preguntas sobre este tema, necesita un ejemplo. Y lo daré en este artículo. Inmediatamente noté que este artículo solo tiene sentido para aquellos que saben PHP. y sabe cómo trabajar con Mysql. Todo el resto primero debe pasar por este, o leer algunos libros en PHP y MySQL.

Para empezar, cree una tabla en la base de datos con los siguientes campos:

  • identificación - Identificador único.
  • título - Enlaces de anclaje en el menú.
  • eNLACE. - La dirección a la que será el elemento del menú.
  • identificación de los padres - ID de Parental. Si no hay un artículo de los padres, entonces NULL estará aquí (o puede poner 0 más).

La mesa fue ordenada, ahora es el momento. Código php. Completo Código php Ubicado a continuación:

$ mysqli \u003d nuevo mysqli ("localhost", "raíz", "", "db"); // conectarse a la base de datos
$ Result_Set \u003d $ MySQLi-\u003e Consulta ("Seleccionar * de 'Menú'); // Hacemos una muestra de todas las entradas de la tabla con el menú
$ elementos \u003d matriz (); // Array para los elementos del menú
while (($ fila \u003d $ resultado_set-\u003e fetch_assoc ())! \u003d falso) $ los elementos [$ fila [«id]] \u003d $ fila; // Rellene la matriz de la muestra de la base de datos
$ Childrens \u003d Array (); // Array para la conformidad con sus elementos parentales
Foreach ($ artículos como $ artículo) (
Si ($ ítems ["" parent_id "]) $ childrens [$ ítem item [id"]] \u003d $ artículo ["Parent_ID"]; // llenar una matriz
}
Función PrintItem ($ Artículo, $ artículos, $ Childrens) (
/ * Muestra el elemento del menú * /
Eco "

  • ";
    Echo ". $ Artículo [" Título "]." ";"
    $ ul \u003d falso; // se habían mostrado los elementos secundarios?
    Mientras (verdad) (
    / * Bucle infinito en el que estamos buscando todos los elementos infantiles * /
    $ KEY \u003d Array_Search ($ artículo [ID "], $ Childrens); // estamos buscando un elemento secundario
    Si (! $ clave) (
    / * Artículos hija no encontrados * /
    Si ($ ul) eco ""// Si los elementos infantiles se emiten, cierre la lista
    Rotura; // salga del ciclo
    }
    Desactivar ($ childrens [$ clave]); // Eliminar el elemento encontrado (para que no aparezca de nuevo)
    Si (! $ ul) (
    Eco "
      "// Comenzamos la lista interna si los elementos secundarios aún no han sido
      $ Ul \u003d verdadero; // establecer la bandera
      }
      Echo printitem ($ artículos [$ Tecla], $ artículos, $ Childrens); // mostrar recursivamente todos los elementos secundarios
      }
      Eco "";
      }
      ?>

      Este código es totalmente trabajador, sin embargo, debe comprender que nadie escribe (en particular, la conclusión a través de eco. Html Tagov). Y su tarea es tomar el algoritmo de este código, pero no el código en sí. Y luego este algoritmo está conectado a su motor. Intenté comentar cuidadosamente el código de salida. menú multinivel en PHP y MySQLPero, por supuesto, no es lo más transparente y requiere un buen conocimiento inicial. Si todavía sabes PHP y MySQLLuego al principio recomiendo encarecidamente pasar por esto

      Guión de cumpleaños masculino Requiere atención especial. Después de todo, el piso fuerte suele ser rigoring evalúa el formato de las vacaciones. Nuestra vasta experiencia de vacaciones le permite encontrar el escenario perfecto para el cumpleaños, dependiendo de la edad, el almacén de caracteres y los intereses del oficial de cumpleaños. Ofrecemos, por ejemplo, el escenario de los hombres de cumpleaños que son más populares con nuestros clientes:

      Pronunciación dirigida tostadas para la sala de cumpleaños. Y lo termina con las palabras:

      Champagne en gafas vierte
      ¡Y ellos beben todo juntos hasta el fondo!
      Para los jóvenes su tostada planteamos,
      ¡Y la juventud no está sola!

      El primer círculo está terminado, comenzó uno nuevo,
      Te uniste a la segunda juventud.
      Hombre prominente, fuerte y saludable,
      Estás lleno de ideas frescas y fortalezas.

      También permanecer enérgico
      Después de todo, no trabajaste en vano tantos años!
      Así que sé divertido, bonito,
      ¡Y deja que el destino te mantenga de los problemas!

      Se realizan invitados para el perpetrador de la celebración. antiguo romance gitano
      (Dos pueden mantener, y todos los demás recogen coros):

      Las gafas son vertidas
      En ellos brillar ámbar,
      Y caras se iluminan
      ¡Qué amanecer cómico!

      Con vino, anhelo desgastado,
      Se convierte en luz
      Y la tostada en el corazón está preguntando:
      ¡Bebemos para el aniversario!

      Coro:

      Nuestro coro canta antiguo antiguo,
      ¡Vierte el río Champagne!
      Para ti, nuestro amigo es amado,
      Nuestro libro de cumpleaños (tal vez nombre) ¡Querida!

      Que podría ser maravilloso
      Cuando, amor taya,
      Te conoces con una canción
      ¡Nativo y amigos!

      Que comience la noche,
      Cómo la vida es un nuevo círculo,
      Y todos los sueños se hacen realidad,
      ¡Y todo florece!

      Coro:
      Fondo arriba! Fondo arriba! Fondo arriba!

      Pausa musical.

      Luego llame tostadas para los padres.

      Principal:

      Bueno, ahora, amigos, el momento ha llegado.
      Llena un vaso para padres!
      Para aquellos que dieron la alegría de la vida.
      Y en el mundo, las maravillosas puertas desafiaron,

      Para aquellos que lo enseñan.
      Y el relé de la batería fue entregado.
      Para aquellos gracias a quien, ahora
      ¡Nuestro cumpleaños está sentado entre nosotros!

      Así que bebe para padres ... (los llama por nombre-patronímica)

      Pausa musical.

      El presentador habla brevemente sobre el camino de la vida del jubileo.

      Anfitrión: y ahora estamos cantando "Antiguas canciones sobre el héroe principal de nuestras vacaciones".

      (Los huéspedes cantan en el motivo de las canciones sobre los pilotos)


      Sin un jubileo, digamos recto, no hay nada que ver.
      Nos reuniremos en la mesa,
      Gafas llenas nalmes
      Y por sus canciones de salud cantamos:

      Es hora de que notemos
      Y este día para reunirse

      ¡Que no tengas veinte años y no treinta, dejes!
      ¡No bajas tu barrera!
      Mira, seremos estrictamente
      ¡No nos lastimas, también lo sabes!

      Vemos valientes, valientes, valientes.
      Hombres delgados, hermosos, rizados!
      Deja que la serie se vaya durante años.
      Pero te deseamos siempre
      ¡Tu alma seguía siendo joven!

      Es hora de que notemos
      ¡Es hora de celebrar, celebrar el glorioso aniversario!
      Y este día para reunirse
      En la gran compañía de familiares, amigos!

      Deja que el destino a veces sea cruel con nosotros, ¡Que!
      En respuesta, dejaste ir tus chistes!
      Seguir lo mismo estrictamente
      ¡No admita un desaliento alrededor!

      Esta noche, por la tarde, por la tarde.
      Sin un jubileo caro, ¡no hay nada que hacer!
      Beberemos una vez, beberemos dos.
      Para el aniversario y para los asuntos,
      ¡Pero eso mañana no metimé la cabeza!

      Somos un amor jubileo, respeto.
      ¡Y nuestras felicitaciones continúan!

      (Los huéspedes cantan en un tono de llamada "No puedo en tu cumpleaños ..." :)

      No podemos en tu cumpleaños.
      Querido Mercedes da,
      Pero un regalo entregado, sin duda.
      Y listo para repetir cien veces:

      Que eres amable, alegre, atento
      Y en asuntos generalmente aceptados especiales,
      Que eres maravilloso
      ¡Y camarada, y marido, y padre!

      Principal:

      Queremos felicitarte del alma.
      Así como la edad del pasaporte,
      Después de todo, dice tu amable, tu sonrisa,
      ¡Qué hay de diez años en el error de pasaporte!

      (Los huéspedes cantan en el motivo de la canción del soldado "El camino está lejos de nosotros con usted ...")

      Hombre de cumpleaños - chico valiente
      ¡Mirando a Sokol en las filas!
      Respetar a todos él con razón
      Y en el servicio, como en la batalla!

      Coro:

      ________ (nombre de cumpleaños) en la carretera! ¡Vamos a salir a la carretera! ¡Vamos a salir a la carretera!
      A cien años alcanzan
      Y permanecen fuertes
      ¡El destino te llama!
      ________ (nombre de cumpleaños) adelante!

      Querido Jubileo.
      Felicitaciones del alma!
      Y la mano de la medalla, y un regalo.
      ¡En los medios de mérito de su grande!

      Coro.

      El aniversario es galardonado con un regalo y memorable. medalla con inscripción: "Por grandes méritos en el trabajo, la amistad y el amor". (La medalla se puede llenar del árbol y colgarla en el cuello de la fiesta de cumpleaños en la cinta

      Concurso sobre el tema "¿Quién sabe mejor el cumpleaños"!

      El juez será el cumpleaños en sí.
      El líder hace preguntas y presenta los chips para las respuestas correctas. El que al final del juego se convirtió en el propietario del mayor número de fichas, recibe un premio con el abogado del cumpleaños.

      Pausa musical.

      Cuestionario en cumpleaños

      ¡Queridos amigos! ¡Tratemos de determinar el huésped muy erudito! El tema, por supuesto, sigue siendo el mismo - cumpleaños. Sólo en la vida, sino en la pantalla!

      Por cada respuesta correcta o ingeniosa, se da un chip. Tras el cuestionario para el mayor número de chips se otorga un premio. Por ejemplo, chocolate. Si los invitados no pueden adivinar, el líder debe dar un mensaje, un poco recordatorio de esta película.

      Preguntas y respuestas cómicas.

      Haces dos sofá con preguntas y respuestas. Al principio, una persona anuncia a la que hará la pregunta, saca la pregunta y lee. Esquile las pollas con las respuestas a las que llamó. Luego el que llamó, saca la respuesta y lee. Luego también anuncia a quién hará una pregunta, saca la pregunta y lee. Etc.

      Baila por el plomo del equipo

      Saludo telegramas-enigmas (incluidos los invitados)

      Anuncia de destacados: vinieron los telegramas de felicitación de Tanya, pero todos ellos sin firma. Necesitas adivinar el remitente. Estas son personas conocidas, así como a los huéspedes. ¡E incluso héroes fabulosos!

      ¡Déjalos susurrar al amor para ti en la oreja!
      Tsarevna para apodo ... Rana

      ¡Solo deseo beber vinos vintage!
      Felices vacaciones a usted! ... Malvina

      ¡Deseo cantar más a menudo bajo la guitarra!
      Buena empresa para ti! ... Rotaru.

      ¡Deseo no encontrar el amor de no programado!
      Hola musical de ... Bulanova

      Vive, Seryozha, divertido y fresco!
      ¡No te olvides de la infancia! ... reina

      Te deseo mucha música y risas,
      ¡Amor y joven eterna! ... Pieha

      ¡Deja que el dinero siempre vaya a la figura!
      Y las piernas de pollo! ... Baba yaga

      ¡Por más frecuencia en el campo y en el bosque!
      Salud para usted fuerte! ... Alsu

      ¡Saddy nunca lo permite!
      ¡Gran hola de mamá! ... Orloe.

      ¡No te pongas en PE y Shootout!
      ¡Te deseo una larga vida! Grupo… Flechas

      El que primero dio la respuesta correcta se da fichas. Para el mayor número de chips se otorga un premio.

      Misterio de lotería

      El premio recibe uno que supuso que para el sujeto de la ventaja en la bolsa. Puedes hacer preguntas líderes. Él responde "sí" o "no".

      Lotería - pronóstico

      Todos tiran de boletos o los consiguen una broma, la anécdota. Durante el presentador Dibujo dice:
      - Ahora experimentaremos el destino y descubriremos lo que cocinó.
      Dando regalos, a partir de la primera habitación y lee el pronóstico para el próximo año.

      Prueba "Dibuja un animal inexistente"

      Pide a los huéspedes que dibujen un animal inexistente y escribe su nombre.

      Prueba "Dibuja a un pequeño hombre"

      Es necesario dibujar a una persona de 12 figuras: debe usar todas las formas, un círculo y triángulos, cuadrados. (En la cantidad de ellos 12)

      A la conclusión de la noche, puede ofrecer a los huéspedes a abrir una cuenta para el teléfono de cumpleaños. Después de eso, para soportar el frasco de 3er - un litro donde todos los huéspedes pueden lanzar en los diez primeros.