PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Komisches Tabellen Problem (https://www.php-resource.de/forum/php-developer-forum/105870-komisches-tabellen-problem.html)

peroja 12-01-2017 05:09

Komisches Tabellen Problem
 
Hallo ihr guten,
Jetzt brauch ich doch Hilfe bei meinem Map versuch.

In der DB hab ich 5 Einträge

http://www.soundwerkstatt.ch/programmieren/tabelle.jpg


Und hier mein PHP Code dazu:

PHP-Code:


error_reporting
(E_ALL);

$dbhost 'localhost';
$dbuser '*******';
$dbpass '*******';
$con mysqli_connect($dbhost$dbuser$dbpass) or die ('MySQL: Error connecting to local database');
$dbname 'test';
mysqli_select_db($con,$dbname);


$sql "SELECT * from coordinaten ORDER by 'user_id'"
$result mysqli_query($con,$sql);
while(
$row mysqli_fetch_array($result)) {
$user_id $row['user_id'];
$coordX $row['x'];
$coordY $row['y'];

echo 
"<table border=0>"
//$coordX =1;
//$coordY =1;      
    
     
for($x=1;$x<=10;$x++)
    {
        echo 
"<tr>";
    for(
$y=1;$y<=10;$y++)
        {
      if(
$x==$coordX and $y==$coordY)
      {
      echo 
"<td>";
      echo 
"<div style='float: left; width: 50px; height: 50px; margin-right: 1px; margin-bottom: 1px; background-color: orange ; text-align: center;'>$user_id</div>";
        }
      else
      {
      echo 
"<td>";
      echo 
"<div style='float: left; width: 50px; height: 50px; margin-right: 1px; margin-bottom: 1px; background-color: green ; text-align: center;'>$x/$y</div>";
      }
      echo 
"</td>";
    } 
    echo 
"</tr>";     
  }             
  echo 
"</table>";    


Wo mach ich was falsch? Es generiert mir 5 Tabellen untereinander. Jeder Eintrag generiert eine neue Tabelle. Ich will aber alle Einträge in einer Tabelle haben. Ich bin langsam echt am verzweifeln. Ich bin der Meinung dass ich den Loop zum richtigen Zeitunkt abbreche.

Ich hoffe jemand von euch sieht den Fehler den ich nicht sehe.
Muss jetzt auch zugeben das ist mir peinlich weil ich hab ansonsten keine Probleme eine Tabelle aus DB einträgen zu generieren. Nur hier sind es fix 10x10 Felder und die, welche keine Einträge haben erscheinen Grün mit der Koordinate und die anderen Orange mit der User ID

Lieben Dank
Peroja

SysOp 12-01-2017 09:49

Dein <Table> Tag steht IN der while Schleife..
HTML Grundlagen...

peroja 12-01-2017 16:10

trotzdem
 
Ich hab trotzdem das gleiche Ergebniss wenn ich den Table aus der While herausnehme

PHP-Code:

<?PHP
error_reporting
(E_ALL);
require(
'lib/connection.php');
echo 
"<table border=0>"

$sql "SELECT * from coordinaten ORDER by 'user_id'"
$result mysqli_query($con,$sql);
   
while(
$row mysqli_fetch_array($result)) {
$user_id $row['user_id'];
$coordX $row['x'];
$coordY $row['y'];

//$coordX =1;
//$coordY =1;      
  
     
for($x=1;$x<=10;$x++)
    {
    echo 
"<tr>";     
    for(
$y=1;$y<=10;$y++)
        {   
    echo 
"<td>";
      if(
$x==$coordX and $y==$coordY)
      {
             echo 
"<div style='float: left; width: 50px; height: 50px; margin-right: 0px; margin-bottom: 0px; background-color: orange ; text-align: center;'>$user_id</div>";
         }
      else
      {
            echo 
"<div style='float: left; width: 50px; height: 50px; margin-right: 0px; margin-bottom: 0px; background-color: green ; text-align: center;'>$x/$y</div>";
      }
    echo 
"</td>";             
    } 
  echo 
"</tr>";       
  }             
}            
echo 
"</table>"
                               
?>


bandit600 13-01-2017 08:09

1. Das kann nicht sein
2. Tue dir selber einen Gefallen und formatiere deinen Quellcode ordentlich, damit er besser lesbar wird

PHP-Code:

<?PHP
  error_reporting
(E_ALL);
  require(
'lib/connection.php');

  echo 
"<table border=0>"

  
$sql "SELECT user_id, x, y from coordinaten ORDER by 'user_id'"
  
  
$result mysqli_query($con,$sql)
    or die (
"MySQL-Error: " mysqli_error($con));
   

  while(
$row mysqli_fetch_array($result)) 
  {
     
$user_id $row['user_id'];
     
$coordX $row['x'];
     
$coordY $row['y'];

  
     for(
$x 1$x <= 10$x++)
     {
        echo 
"<tr>";     
        
        for(
$y 1$y <= 10$y++)
        {   
           echo 
"<td>";
           
           if(
$x == $coordX and $y == $coordY)
           {
             echo 
"<div style='float: left; width: 50px; height: 50px; margin-right: 0px; margin-bottom: 0px; background-color: orange ; text-align: center;'>$user_id</div>";
           }
           else
           {
              echo 
"<div style='float: left; width: 50px; height: 50px; margin-right: 0px; margin-bottom: 0px; background-color: green ; text-align: center;'>$x/$y</div>";
           }
           
           echo 
"</td>";             
        } 
        
        echo 
"</tr>";       
     }             
 }            

 echo 
"</table>"
                               
?>


peroja 13-01-2017 18:27

Kritik?
 
Und Du mein lieber Bandit600 tu mir den Gefallen und prüfe erst Codes nachdem du sie "korrigiert" hast und mit Kritik an mich Publitzierst. Ich danke Dir dass du mir Helfen willst, ganz klar, aber Dein Code macht genau das gleiche wie meiner. Das hier ist von Dir:

http://www.soundwerkstatt.ch/programmieren/test/map.php

Auch Dein Code erzeugt 5 Tabellenanstatt nur eine mit aber allen 5 Einträgen drinnen. Scheint doch nicht so einfach zu sein gelle... :)

Allgemein, ich bin ja nicht blöd und ich hab mich auch versucht zu konzentrieren und logisch versucht zu Denken. Da ich alle 5 Einträge in die while schlaufe nehmen muss um diese auszugeben muss ich das while abschluss "}" als letztes setzen und zwar NACH dem Generieren der Tabelle sonst hab ich logischerweise nur den letzten Eintrag. Wenn ichjetzt aber die ganze while schlaufe im TD block unterbringe hab ich auch ein durcheinander.

Liebe Grüsse
Pero

bandit600 13-01-2017 19:04

Ich habe deinen Quellcode auch nicht verändert, sondern anständig formatiert, um dir ein Beispiel zu geben.

Und der HTML-Code enthält nur eine Tabelle!

peroja 22-01-2017 20:29

hmm
 
Hallo,

Es scheint niemand gewilllt zu sein mir bei diesem Problem helfen zu wollen?
Ich schaff es einfach nicht. Ein TableGrid zu erzeigen mit 10x10 feldern ist weniger ein Problem. Aber die Felder darin mit Daten aus der DB zu füllen schon. Also auf feld X,Y steht ein Eintrag. z.B 3/6 ist eine $user_id und auf 5/2 eine andere $user_id und auf 4/4 wiederum eine usw....
Das problem ist dass mein Code für jeden einzelnen Eintrag ($user_id) einen komplett neue Table erzeugt. Ich versteh das einfach nicht :confused:

Ich will eine einfache Map erstellen bei einem klick auf en besetztes Feld eine url erzeugt. (test.php?coord_x=$x&coord_y=$y) und besagtes Feld je nach DB eintrag grün oder blau ist, was auch immer....

Schönen Abend noch
LG
Peroja

bandit600 23-01-2017 10:59

Zitat:

Zitat von peroja (Beitrag 673467)
Das problem ist dass mein Code für jeden einzelnen Eintrag ($user_id) einen komplett neue Table erzeugt. Ich versteh das einfach nicht :confused:

Nochmal, und diesmal tippe ich auch ganz langsam, damit du es vielleicht jetzt verstehst: Das Script erzeugt genau 1 Tabelle, nicht mehr und nicht weniger!

Quetschi 23-01-2017 11:41

Versteh ich das richtig, dass du EINE Tabelle mit 10x10 Feldern erzeugen willst? Und in dieser Tabelle sollen dann die Koordinaten, welche sich in deiner DB befinden entsprechend belegt werden?

Falls du beide Fragen mit Ja beantworten kannst, ist dein Ansatz schlicht nicht tauglich dafür.

peroja 23-01-2017 15:31

Das ist Richtig. Die Tabelle kann auch 100x100 sein

Ich möchte im Prinzip so etwas machen:

testgame - map

Einfach auf das rudimentäre reduziert. Diese Map ist zwar auf meinem Server und voll Funktionstüchtig wie man sieht aber ich will weder fremde sachen klauen noch passt diese Map visuell in die Art von Game welche ich grad baue. Zudem ist der Code dafür derart gross und Verflechtet in andere Scripte wie Javascript und 3 weitere PHP welche knapp 25KB gross sind. Der Aufwand dies zu entflechten ist es nicht Wert.

Wie würdet Ihr ein solches Projekt angehen? Bin mal gespannt auf Input

Quetschi 23-01-2017 15:41

Wenn du das selber programmieren willst, dann würd ich mich an deiner Stelle nochmal gedanklich mit deinem Code auseinandersetzen und versuchen zu verstehen, was da passiert.

Du liest deine DB aus und für jeden User erzeugst du zehn Tabellenzeilen mit jeweils zehn Zellen - klingelt da irgendwas? ;)
Es geht mir jetzt erstmal nur darum ob du verstehst, warum dein Ansatz nicht funktioniert.

peroja 23-01-2017 16:57

nun ja
 
Quetschi, ich hab schon genau geschaut und das Problem liegt innerhalb der WHILE schlaufe. Ich denk ich habs begriffen. Programmiertechnisch unmöglich.

Ich möcht aber trotzdem so ein Modul bauen, wenn auch nicht Isometrisch.
Ich könnt ja auch die Faulenzer Version machen und einen Table generieren und dann den HTML Coder daraus in ein neues File Pasten und dann von Hand den Link reintun. Aber des ist Doof.

Nun ich schau mal.

Quetschi 23-01-2017 17:09

Dein Problem ist im Grunde genommen, dass du dich nicht an das EVA-Prinzip hältst. Zumindest Verarbeitung und Ausgabe sind bei dir mehr oder weniger in einem Schritt zusammengefasst. Du musst dich erst um die Verarbeitung kümmern und wenn diese abgeschlossen ist, kümmerst du dich noch um die Ausgabe.

Für dein Vorhaben könnte z.B. ein mehrdimensionales Array hilfreich sein, dass du in der Größe des gewünschten Feldes anlegst. Beim Durchlauf der Datensätze befüllst du dann die Felder des Arrays entsprechend. Zum Schluss überlegst du dir, wie du das Array als HTML-Tabelle ausgeben kannst.

bandit600 23-01-2017 19:01

PHP-Code:

<?PHP
  $con 
mysqli_connect("localhost""root""""test");

  
$sql "SELECT user_id, x, y from t3"
  
  
$result mysqli_query($con,$sql)
    or die (
"MySQL-Error: " mysqli_error());
   

  
$data = array();
  
  while(
$row mysqli_fetch_array($result)) 
    
$data[$row['x'] . "/" $row['y']] = $row['user_id'];

  echo 
"<table border=0>"
  
  for(
$x 1$x <= 10$x++)
  {
    echo 
"<tr>";  
    
    for(
$y 1;$y <= 10$y++)
    {   
       
$key $x "/" $y;
       
       if (
array_key_exists($key$data))
       {
          
$output $data[$key];
          
$color "green";
       }
       else
       {            
           
$output $key
           
$color "red";
       }
       
       echo 
"<td>
               <div style='float: left; width: 50px; height: 50px; margin-right: 0px; margin-bottom: 0px; background-color: $color ; text-align: center;'>$output</div>
             </td>"
;             
    } 
    
    echo 
"</tr>";       
  }             

  echo 
"</table>"
                               
?>


Quetschi 23-01-2017 19:08

@bandit600

dein Codebeispiel stellt keinerlei Verbesserung gegenüber dem bisherigen Code dar?! :dontknow:


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:19 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG