Sudoku mit nur einer Überprüfung

darkii

Mitglied
Also Leute ;)

Ich versuche gerade ein Sudoku zu erstellen das mir aus einer Datei ein Sudoku hollt und dieses dann in eine Tabelle einträgt und dann dem user ermöglicht weitere Zahlen einzugeben. So weit funktioniert das ganze nur jetzt möchte ich eig nurnoch das wenn der user das komplette sudoku eingetragen hatt das überprüft wird ob das sudoku mit den Zahlen die eingegeben sind möglich ist.

Also keine Zahlen dürfen in Reihe Block und Spalte doppelt vorgekommen sein. Bis dahin klingts ja einfach aber bei mir läd er immer das ganze sudoku bei button klick neu und vergisst trotz session alles was ich eingetragen habe.

Meine File:
PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sudoku</title>
<link rel="STYLESHEET" type="text/css" href="sudoku.css">
<script type="text/javascript"></script>
</head>
<body>




<div id=sudoku>
<table width="266" height="117" border=0>
<tr>
<td><center>
<table width="266" height="117" border=0>
<tr>
<td><center>
<h1 class=sudoku>Sudoku</h1>
</center></td>
</tr>
<tr>
<td><center>
</center></td>
</tr>
<tr>
<td class="sudoku"><?php

session_start();
function getSudoku ()
{
$anzahl_benoetigter_zeichen = 162; //Anzahl der Zeichen
$inhalt_datei = "sudoku.txt"; //Die Zeichen aus der Datei in einer variablen speichern
$zeichen_dokument = filesize ($inhalt_datei); //Die Anzahl der Zeichen in der Variablen bestimmen
$moegliche_sudokus_z = $zeichen_dokument / $anzahl_benoetigter_zeichen; //Anzahl der möglichen Sudokus
$rand = rand(0, $moegliche_sudokus_z); //Zufällige Zahl aus .....
$handle = fopen ($inhalt_datei, "r"); //Öffnet den Inhalt und setzt Dateizeiger an den Anfang
$position_zeiger = $anzahl_benoetigter_zeichen * $rand; //Berechnet die Stelle für den Dateizeiger
fseek ($handle, $position_zeiger, SEEK_SET); //Platziert den Dateizeiger
$contents = fread ($handle, $anzahl_benoetigter_zeichen); //Holt die benötigten Zeichen für ein Sudoku
fclose ($handle);
return $contents;
}


$sudokustr = getSudoku ();
$sudoku = explode(";", $sudokustr);
$_SESSION['sudoku'] = $sudoku;
var_dump($_SESSION['sudoku']);
echo "<form method=post>";
echo "<table cellspacing=0 cellpadding=1 border=0 bgcolor=#000000>";
$count = 0;
for ($zeile = 0; $zeile < 9; $zeile++)
{
echo "<tr>";
for ($kasten = 0; $kasten < 9; $kasten++)
{
echo "<td><div class=cell>";
$data = "";
if ($kasten == 2 || $kasten == 5) //Nach 2 und nach 5 Kästchen dicker Strich
{
$border = "border-right:2px solid #000000;";
} else {
$border = "";
}
if ($zeile == 2 || $zeile == 5) //Nach der 2ten und nach der 3ten dicker Unterstrich auf der ganzen Zeile
{
$border .= "border-bottom:2px solid #000000;";
}
if (intval($_SESSION['sudoku'][$count]) > 0 )
{
$data = "value='" . $_SESSION['sudoku'][$count] . "' readonly style='background:#6E6E6E; " . $border . "'";
} else {
$data = "style='" . $border . "'";
}
echo "\r\n<input valign=middle type=text id=i" . $count . " name=" . $count . " " . $data . " size=5 maxlength=1
class=cell onkeyup='fontsize(this, this.value)'>\r\n"; //überflüssiges entfernen
echo "</div></td>";
$count ++;
}
echo "</tr>";
}
echo "</table>";
echo "<input type='submit' value='OK'>";
echo "</form>";
var_dump ($_POST);
if (isset($_POST))
{
$_SESSION['sudoku'] = $_POST;
echo $_SESSION['sudoku'];
}




?>
<script language="JavaScript" type="text/javascript">
function neuesFenster() {
window.open(
"function_****.php",
"Loesung",
"width=400,height=300,resizable=1,scrollbars=1,menubar=1,toolbar=1,location=1,status=1" );
}
</script></td>
</td>
</tr>
<tr>
<td height=28 valign=bottom><center>
<form method=post>
<input type="button" value="Lösung zeigen" onClick="------------">
<input type="button" value="Prïüfung" onClick="------------">
<input type="submit" value="Neues Sudoku" onClick"--">
<input type="button" value="Fertig" onClick="------------">


<div id=bild>
<img src="bilder/Android.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild2>
<img src="bilder/Android2.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild3>
<img src="bilder/Android3.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild4>
<img src="bilder/Android4.png" alt="Das Bild kann leider nicht angezeigt werden O.o" width="135">
</div>
<div id=bild5>
<img src="bilder/hintergrund.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>

</body>
</html>

Was müsst ich ausbessern um in etwa das hinzubekommen ? Und warum speichert er die session nicht ...
 
Zuletzt bearbeitet:
session_start(); muss als erstes kommen - vor den ganzen HTML-Tags.
PHP:
<?php session_start(); ?>
<html>
<head>
<meta .....

Aus der PHP-Doku zu session_start()
Hinweis: Bei Verwendung Cookie-basierter Sessions müssen Sie session_start() aufrufen, bevor irgend etwas an den Browser geschickt wird.
 
Wenn du mal ein Beispiel für sudoku.txt hast, dann könnte man testen.

Ansonsten ist es zu viel Code um einfach so auf die Schnelle einen logischen Fehler zu finden
 
PHP:
<?php session_start(); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sudoku</title>
<link rel="STYLESHEET" type="text/css" href="sudoku.css">
<script type="text/javascript"></script>
</head>
<body>




<div id=sudoku>
<table width="266" height="117" border=0>
<tr>
<td><center>
<table width="266" height="117" border=0>
<tr>
<td><center>
<h1 class=sudoku>Sudoku</h1>
</center></td>
</tr>
<tr>
<td><center>
</center></td>
</tr>
<tr>
<td class="sudoku"><?php


function getSudoku ()
{
$anzahl_benoetigter_zeichen = 162; //Anzahl der Zeichen
$inhalt_datei = "sudoku.txt"; //Die Zeichen aus der Datei in einer variablen speichern
$zeichen_dokument = filesize ($inhalt_datei); //Die Anzahl der Zeichen in der Variablen bestimmen
$moegliche_sudokus_z = $zeichen_dokument / $anzahl_benoetigter_zeichen; //Anzahl der möglichen Sudokus
$rand = rand(0, $moegliche_sudokus_z); //Zufällige Zahl aus .....
$handle = fopen ($inhalt_datei, "r"); //Öffnet den Inhalt und setzt Dateizeiger an den Anfang
$position_zeiger = $anzahl_benoetigter_zeichen * $rand; //Berechnet die Stelle für den Dateizeiger
fseek ($handle, $position_zeiger, SEEK_SET); //Platziert den Dateizeiger
$contents = fread ($handle, $anzahl_benoetigter_zeichen); //Holt die benötigten Zeichen für ein Sudoku
fclose ($handle);
return $contents;
}


$sudokustr = getSudoku ();
$sudoku = explode(";", $sudokustr);
$_SESSION['sudoku'] = $sudoku;
if (isset($_POST))
{
$_SESSION['sudoku'] = $_POST;
echo $_SESSION['sudoku'];
}

var_dump($_SESSION['sudoku']);
echo "<form method=post>";
echo "<table cellspacing=0 cellpadding=1 border=0 bgcolor=#000000>";
$count = 0;
for ($zeile = 0; $zeile < 9; $zeile++)
{
echo "<tr>";
for ($kasten = 0; $kasten < 9; $kasten++)
{
echo "<td><div class=cell>";
$data = "";
if ($kasten == 2 || $kasten == 5) //Nach 2 und nach 5 Kästchen dicker Strich
{
$border = "border-right:2px solid #000000;";
} else {
$border = "";
}
if ($zeile == 2 || $zeile == 5) //Nach der 2ten und nach der 3ten dicker Unterstrich auf der ganzen Zeile
{
$border .= "border-bottom:2px solid #000000;";
}
if (intval($_SESSION['sudoku'][$count]) > 0 )
{
$data = "value='" . $_SESSION['sudoku'][$count] . "' readonly style='background:#6E6E6E; " . $border . "'";
} else {
$data = "style='" . $border . "'";
}
echo "\r\n<input valign=middle type=text id=i" . $count . " name=" . $count . " " . $data . " size=5 maxlength=1
class=cell onkeyup='fontsize(this, this.value)'>\r\n"; //überflüssiges entfernen
echo "</div></td>";
$count ++;
}
echo "</tr>";
}
echo "</table>";
echo "<input type='submit' value='OK'>";
echo "</form>";
//var_dump ($_POST);






?>
<script language="JavaScript" type="text/javascript">
function neuesFenster() {
window.open(
"function_****.php",
"Loesung",
"width=400,height=300,resizable=1,scrollbars=1,menubar=1,toolbar=1,location=1,status=1" );
}
</script></td>
</td>
</tr>
<tr>
<td height=28 valign=bottom><center>
<form method=post>
<input type="button" value="Lösung zeigen" onClick="------------">
<input type="button" value="Prïüfung" onClick="------------">
<input type="submit" value="Neues Sudoku" onClick"--">
<input type="button" value="Fertig" onClick="------------">


<div id=bild>
<img src="bilder/Android.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild2>
<img src="bilder/Android2.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild3>
<img src="bilder/Android3.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild4>
<img src="bilder/Android4.png" alt="Das Bild kann leider nicht angezeigt werden O.o" width="135">
</div>
<div id=bild5>
<img src="bilder/hintergrund.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>

</body>
</html>


Dadurch das ich die Session nun vor der Datei starte und auch meine Funktion vor den Print gebaut habe kann ich jetzt immerhin Zahlen eintragen und diese bleiben auch drin. Das Problem ist er läd mir jetzt kein sudoku mehr weil er warum auch imm den isset befehl ignoriert und einfach das ganze ausführt ...


Beispiel kommt in 1 minute mom

Edit: 6; ; ; ; ;2;8; ;1; ; ; ;8;4; ;3;6;9;8;5; ; ; ; ; ; ;7; ; ; ; ; ;4; ;8;2;2; ;5;9;3; ; ;7; ; ; ;8;2; ; ; ; ; ;3;8;6; ;1; ;7;2; ;1;9; ; ; ; ; ;3;4; ; ;7; ;2;6; ; ;8;6; ; ; ; ;2;8; ;1; ; ; ;8;4; ;3;6;9;8;5; ; ; ; ; ; ;7; ; ; ; ; ;4; ;8;2;2; ;5;9;3; ; ;7; ; ; ;8;2; ; ; ; ; ;3;8;6; ;1; ;7;2; ;1;9; ; ; ; ; ;3;4; ; ;7; ;2;6; ; ;8;

so schaut ein sudoku in meiner text datei aus ;)
 
Zuletzt bearbeitet:
Ich hab das Beispiel dazu editiert und wenn ich meinen if isst befehl auskomentiere erstellt er mir ein sudoku und wenn ich die kommentierung entferne fügt er mir sie dann auch wieder ein aber um ein neues sudoku zu erstellen müsste ich den befehl wieder uaskommentieren :D Also denk ich mal ich mss da irgendwas falsch machen ;)


Hab auch mal die beispiel datei angehängt ;)
 
Im Formular dem Submit ein Namen geben und mit isset auf dieses Element in $_POST prüfen

PHP:
...
if (isset($_POST['submit'])){
....
echo "<input type='submit' value='OK' name='submit'>";
....
 
string(2) "OK" string(2) "OK" steht dann in der post ...


PHP:
<?php session_start(); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sudoku</title>
<link rel="STYLESHEET" type="text/css" href="sudoku.css">
<script type="text/javascript"></script>
</head>
<body>




<div id=sudoku>
<table width="266" height="117" border=0>
<tr>
<td><center>
<table width="266" height="117" border=0>
<tr>
<td><center>
<h1 class=sudoku>Sudoku</h1>
</center></td>
</tr>
<tr>
<td><center>
</center></td>
</tr>
<tr>
<td class="sudoku"><?php


function getSudoku ()
{
$anzahl_benoetigter_zeichen = 162; //Anzahl der Zeichen
$inhalt_datei = "sudoku.txt"; //Die Zeichen aus der Datei in einer variablen speichern
$zeichen_dokument = filesize ($inhalt_datei); //Die Anzahl der Zeichen in der Variablen bestimmen
$moegliche_sudokus_z = $zeichen_dokument / $anzahl_benoetigter_zeichen; //Anzahl der möglichen Sudokus
$rand = rand(0, $moegliche_sudokus_z); //Zufällige Zahl aus .....
$handle = fopen ($inhalt_datei, "r"); //Öffnet den Inhalt und setzt Dateizeiger an den Anfang
$position_zeiger = $anzahl_benoetigter_zeichen * $rand; //Berechnet die Stelle für den Dateizeiger
fseek ($handle, $position_zeiger, SEEK_SET); //Platziert den Dateizeiger
$contents = fread ($handle, $anzahl_benoetigter_zeichen); //Holt die benötigten Zeichen für ein Sudoku
fclose ($handle);
return $contents;
}


$sudokustr = getSudoku ();
$sudoku = explode(";", $sudokustr);
$_SESSION['sudoku'] = $sudoku;
if (isset($_POST['sudoku']))
{
$_SESSION['sudoku'] = $_POST['sudoku'];
var_dump ($_SESSION['sudoku']);
}

var_dump($_SESSION['sudoku']);
echo "<form method=post>";
echo "<table cellspacing=0 cellpadding=1 border=0 bgcolor=#000000>";
$count = 0;
for ($zeile = 0; $zeile < 9; $zeile++)
{
echo "<tr>";
for ($kasten = 0; $kasten < 9; $kasten++)
{
echo "<td><div class=cell>";
$data = "";
if ($kasten == 2 || $kasten == 5) //Nach 2 und nach 5 Kästchen dicker Strich
{
$border = "border-right:2px solid #000000;";
} else {
$border = "";
}
if ($zeile == 2 || $zeile == 5) //Nach der 2ten und nach der 3ten dicker Unterstrich auf der ganzen Zeile
{
$border .= "border-bottom:2px solid #000000;";
}
if (intval($_SESSION['sudoku'][$count]) > 0 )
{
$data = "value='" . $_SESSION['sudoku'][$count] . "' readonly style='background:#6E6E6E; " . $border . "'";
} else {
$data = "style='" . $border . "'";
}
echo "\r\n<input valign=middle type=text id=i" . $count . " name='sudoku' ". $data . " size=5 maxlength=1
class=cell onkeyup='fontsize(this, this.value)'>\r\n"; //überflüssiges entfernen
echo "</div></td>";
$count ++;
}
echo "</tr>";
}
echo "</table>";
echo "<input type='submit' value='OK' >";
echo "</form>";
var_dump ($_POST);






?>
<script language="JavaScript" type="text/javascript">
function neuesFenster() {
window.open(
"function_****.php",
"Loesung",
"width=400,height=300,resizable=1,scrollbars=1,menubar=1,toolbar=1,location=1,status=1" );
}
</script></td>
</td>
</tr>
<tr>
<td height=28 valign=bottom><center>
<form method=post>
<input type="button" value="Lösung zeigen" onClick="------------">
<input type="button" value="Prïüfung" onClick="------------">
<input type="submit" value="Neues Sudoku" onClick"--">
<input type="button" value="Fertig" onClick="------------">


<div id=bild>
<img src="bilder/Android.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild2>
<img src="bilder/Android2.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild3>
<img src="bilder/Android3.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild4>
<img src="bilder/Android4.png" alt="Das Bild kann leider nicht angezeigt werden O.o" width="135">
</div>
<div id=bild5>
<img src="bilder/hintergrund.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>

</body>
</html>


meintest du ja so oder ?
 
Zuletzt bearbeitet:
also wenn ich dem typ ein submit gebe hab ich in jedem kästchen einen button daher geh ich mal davon aus du meinst den absende button

PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sudoku</title>
<link rel="STYLESHEET" type="text/css" href="sudoku.css">
<script type="text/javascript"></script>
</head>
<body>
<?php session_start(); ?>



<div id=sudoku>
<table width="266" height="117" border=0>
<tr>
<td><center>
<table width="266" height="117" border=0>
<tr>
<td><center>
<h1 class=sudoku>Sudoku</h1>
</center></td>
</tr>
<tr>
<td><center>
</center></td>
</tr>
<tr>
<td class="sudoku">
<?php


function getSudoku ()
{
$anzahl_benoetigter_zeichen = 162; //Anzahl der Zeichen
$inhalt_datei = "sudoku.txt"; //Die Zeichen aus der Datei in einer variablen speichern
$zeichen_dokument = filesize ($inhalt_datei); //Die Anzahl der Zeichen in der Variablen bestimmen
$moegliche_sudokus_z = $zeichen_dokument / $anzahl_benoetigter_zeichen; //Anzahl der möglichen Sudokus
$rand = rand(0, $moegliche_sudokus_z); //Zufällige Zahl aus .....
$handle = fopen ($inhalt_datei, "r"); //Öffnet den Inhalt und setzt Dateizeiger an den Anfang
$position_zeiger = $anzahl_benoetigter_zeichen * $rand; //Berechnet die Stelle für den Dateizeiger
fseek ($handle, $position_zeiger, SEEK_SET); //Platziert den Dateizeiger
$contents = fread ($handle, $anzahl_benoetigter_zeichen); //Holt die benötigten Zeichen für ein Sudoku
fclose ($handle);
return $contents;
}


$sudokustr = getSudoku ();
$sudoku = explode(";", $sudokustr);
$_SESSION['sudoku'] = $sudoku;
if (isset($_POST['submit']))
{
$_SESSION['sudoku'] = $_POST['submit'];
var_dump ($_SESSION['sudoku']);
}

var_dump($_SESSION['sudoku']);
echo "<form method=post>";
echo "<table cellspacing=0 cellpadding=1 border=0 bgcolor=#000000>";
$count = 0;
for ($zeile = 0; $zeile < 9; $zeile++)
{
echo "<tr>";
for ($kasten = 0; $kasten < 9; $kasten++)
{
echo "<td><div class=cell>";
$data = "";
if ($kasten == 2 || $kasten == 5) //Nach 2 und nach 5 Kästchen dicker Strich
{
$border = "border-right:2px solid #000000;";
} else {
$border = "";
}
if ($zeile == 2 || $zeile == 5) //Nach der 2ten und nach der 3ten dicker Unterstrich auf der ganzen Zeile
{
$border .= "border-bottom:2px solid #000000;";
}
if (intval($_SESSION['sudoku'][$count]) > 0 )
{
$data = "value='" . $_SESSION['sudoku'][$count] . "' readonly style='background:#6E6E6E; " . $border . "'";
} else {
$data = "style='" . $border . "'";
}
echo "\r\n<input valign=middle type=text id=i" . $count . " name=" . $count . " " . $data . " size=5 maxlength=1
class=cell onkeyup='fontsize(this, this.value)'>\r\n"; //überflüssiges entfernen
echo "</div></td>";
$count ++;
}
echo "</tr>";
}
echo "</table>";
echo "<input type='submit' value='OK' name='submit' >";
echo "</form>";
var_dump ($_POST['submit']);






?>
<script language="JavaScript" type="text/javascript">
function neuesFenster() {
window.open(
"function_****.php",
"Loesung",
"width=400,height=300,resizable=1,scrollbars=1,menubar=1,toolbar=1,location=1,status=1" );
}
</script></td>
</td>
</tr>
<tr>
<td height=28 valign=bottom><center>
<form method=post>
<input type="button" value="Lösung zeigen" onClick="------------">
<input type="button" value="Prïüfung" onClick="------------">
<input type="submit" value="Neues Sudoku" onClick"--">
<input type="button" value="Fertig" onClick="------------">


<div id=bild>
<img src="bilder/Android.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild2>
<img src="bilder/Android2.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild3>
<img src="bilder/Android3.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild4>
<img src="bilder/Android4.png" alt="Das Bild kann leider nicht angezeigt werden O.o" width="135">
</div>
<div id=bild5>
<img src="bilder/hintergrund.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>

</body>
</html>

genau wie du wolltest geändert und es spuckt nur zwei strings mit dem inhalt OK raus ... Auch wenn der Quellcode jetzt anders aussieht ich habs auch mit dem session start am anfangen nefor html startet probiert.
 
Zuletzt bearbeitet:
Zurück