Powered by emcons.net

How to create a script which helps solving crossword puzzles

From How2s

This is a PHP example of a crossword puzzle solving script. See the crossword puzzle solver in action! (http://emcons.net/dev/crossword_puzzle_solver/index.php)


index.php

<?php

include_once("config.php");    // include configuration
include_once("db.class.php");  // include the db wrapper

$db = new db;
$db->connect();

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Online Crossword Puzzle Solver</TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Christoph Burgdorfer">
<META NAME="Keywords" CONTENT="crossword, cross, word, puzzle, solver, solutions, cheat, words, free">
<META NAME="Description" CONTENT="solve any crossword in the English language for free with this online crossword puzzle solver">
</HEAD>

<BODY>

<h1>Online Crossword Puzzle Solver</h1>

<p>This is a free online crossword puzzle solver where you can input the known letters. If you hit the search button, the site will return all words in the English language which match the known letters. This service is completely free of charge.
</p>

<strong>How many letters does your word have?</strong>

<?

// set the amount of letters the word has
if(!isset($_GET["letters"])) {
	$letters = 0;
} else {
	$letters = $_GET["letters"];
}

// the amount of letters navigation
for($i=1; $i<22; $i++) {
	if($i == $letters) { 
		$echo .= "<b>".$i."</b> ";
	}
		else
	{
		$echo .= '<a href="index.php?letters='.$i.'">'.$i.'</a> ' ;
	}
}

// if the letters are set, show the form
if($letters > 0) {

	$echo .= '<div id="form" style="float: center; margin: 50px;"><form action="index.php" method="post">';

	for($j = 1; $j<$letters+1; $j++){
		$echo .= '<input type="text" name="letters['.$j.']" size="1" length="1" maxlength="1" style="width: 50px; height:50px; font-size: 36px; text-transform: uppercase"/>';
	} 

	$echo .= '<input type="hidden" name="length" value="'.$letters.'" />';	
	$echo .= '<br/><input type="submit" name="submit" value="search!" />';

	$echo .= '</form></div>';
}

// if the form has submitted, do a query
if(sizeof($_POST) > 0) {

	$sql = "select * from words where ";

	foreach($_POST["letters"] as $pos => $letter) {
		if($letter) { 
			$sql .= "letter".$pos."='".$db->escape($letter)."' and ";
			}	
		}

	$sql .= "length='".$db->escape($_POST["length"])."';";

	$res = $db->query($sql);	

	$echo .= "<hr/>".mysql_affected_rows()." results<hr/><div>";

	while($row = $db->fetch($res)) {
		$echo .= '<a href="http://www.google.com/search?q=define%3A'.$row["word"].'">'.$row["word"].'</a><br/>';
	}

	$echo .= "</div>";
}

echo $echo;

$db->close();

?></BODY>
</HTML>

db.class.php

<?php


#doc
#	classname:	db
#	scope:		PUBLIC
#
#/doc
class db {
	var $username 	= DB_USER;
	var $password 	= DB_PASS;
	var $dbname		= DB_NAME;
	var $dbhost		= DB_HOST;
	
	function connect() {
		$this->connection = mysql_connect(
							$this->dbhost,		
							$this->username,
							$this->password
						);
						
		mysql_select_db($this->dbname);
	
	}
	
	function query($query) {
		$ret = mysql_query($query, $this->connection);
		if(!$ret)
			echo mysql_error();
		else
			return $ret;
	}
	
	function fetch($res) {
		return mysql_fetch_assoc($res);
	}
	
	function num_rows($res) {
		return mysql_num_rows($res);
	}
	
	function close() {
		mysql_close($this->connection);
	}
	
	function escape($str) {
		return mysql_escape_string($str);
	}
}
###
?>

config.php

define("DB_NAME", "db_name");
define("DB_USER", "user");
define("DB_PASS", "password");
define("DB_HOST", "host");

db-scheme

CREATE TABLE `words` (
  `id` int(11) NOT NULL auto_increment,
  `word` varchar(255) collate latin1_general_ci NOT NULL,
  `letter1` varchar(1) collate latin1_general_ci NOT NULL,
  `letter2` varchar(1) collate latin1_general_ci NOT NULL,
  `letter3` varchar(1) collate latin1_general_ci NOT NULL,
  `letter4` varchar(1) collate latin1_general_ci NOT NULL,
  `letter5` varchar(1) collate latin1_general_ci NOT NULL,
  `letter6` varchar(1) collate latin1_general_ci NOT NULL,
  `letter7` varchar(1) collate latin1_general_ci NOT NULL,
  `letter8` varchar(1) collate latin1_general_ci NOT NULL,
  `letter9` varchar(1) collate latin1_general_ci NOT NULL,
  `letter10` varchar(1) collate latin1_general_ci NOT NULL,
  `letter11` varchar(1) collate latin1_general_ci NOT NULL,
  `letter12` varchar(1) collate latin1_general_ci NOT NULL,
  `letter13` varchar(1) collate latin1_general_ci NOT NULL,
  `letter14` varchar(1) collate latin1_general_ci NOT NULL,
  `letter15` varchar(1) collate latin1_general_ci NOT NULL,
  `letter16` varchar(1) collate latin1_general_ci NOT NULL,
  `letter17` varchar(1) collate latin1_general_ci NOT NULL,
  `letter18` varchar(1) collate latin1_general_ci NOT NULL,
  `letter19` varchar(1) collate latin1_general_ci NOT NULL,
  `letter20` varchar(1) collate latin1_general_ci NOT NULL,
  `letter21` varchar(1) collate latin1_general_ci NOT NULL,
  `length` int(11) NOT NULL,
  `created` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=62484 ;