Ankündigung

Einklappen
Keine Ankündigung bisher.

html Tabelle mit php einlesen und in mysql einfügen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • html Tabelle mit php einlesen und in mysql einfügen

    Hallo miteinander,

    ich habe den ganzen Tag im Internet nach Lösungen gesucht, aber ich habs einfach nicht gechecked aufgrund von den vorhanden parser Beispielen mit Javascript etc. ein Array zu erstellen und dann in php einlesen usw.
    Jedenfalls muss ich eben zzgl. zu einem Formular so eine dynamische Tabelle haben, wo man mit einem Button eine neue Tabellen-row machen kann und da habe ich was gefunden was auch funktioniert. -Nun muss ich eben noch die generierte Tabelle mit den Inhalten per PHP in die MySQL hineinkriegen ich arbeite mit MySQLI-Prozedural. Ich wäre echt froh, wenn mir jemand auf die Sprünge helfen kann. Hier ist der bisherige code der Tabelle mit dem JavaScript:
    Code:
    //add dynamic tablerows
     <script language="javascript">
     function addRow(tableID)
     {var table=document.getElementById(tableID);
    		var rowCount=table.rows.length;
    		var row=table.insertRow(rowCount);
    		var colCount=table.rows[0].cells.length;
    		for(var i=0;i<colCount;i++)
    		{var newcell=row.insertCell(i);
    		newcell.innerHTML=table.rows[0].cells[i].innerHTML;
    		switch(newcell.childNodes[0].type)
    		{case"text":newcell.childNodes[0].value="";
    		break;
    		case"checkbox":newcell.childNodes[0].checked=false;
    		break;
    		case"select-one":newcell.childNodes[0].selectedIndex=0;
    		break;}}}
    		
    	
    function deleteRow(tableID)
    	{try
    		{var table=document.getElementById(tableID);
    			var rowCount=table.rows.length;
    			for(var i=0;i<rowCount;i++)
    				{var row=table.rows[i];
    				var chkbox=row.cells[0].childNodes[0];
    				if(null!=chkbox&&true==chkbox.checked)
    					{if(rowCount<=1)
    						{alert("Cannot delete all the rows.");
    						break;
    						}
    					table.deleteRow(i);
    					rowCount--;
    					i--;
    				}
    			}
    		}catch(e){alert(e);}
    	}
    	
    </script>
     
     
     
        <input value="Add Row" onclick="addRow('dataTable')" type="button">
     
        <input value="Delete Row" onclick="deleteRow('dataTable')" type="button">
     
        <table id="dataTable" border="1" width="350px">
            <tbody><tr>
                <td><input name="chk" type="checkbox"></td>
                <td><input name="txt" type="text"></td>
            </tr>
        </tbody></table>


  • #2
    Hallo,
    Das Skript erstellt und löscht Tabellenreihen, das hat nix mit PHP oder MYSQL zu tun. Es ist nur für die Dynamische erstellung von Tabellenreihen auf der Internetseite selbst.
    Du brauchst jetzt noch einen Button oder Bild, wo du ein http-requestauslöst und dann die Daten aus der Tabelle im Content übergibst. Diese liest du dann in php aus und speicherst sie dann in der Datenbank.
    Grüße Skaduro

    Kommentar


    • #3
      Hallo Skaduro,

      genau
      dann die Daten aus der Tabelle im Content übergibst. Diese liest du dann in php aus und speicherst sie dann in der Datenbank.
      ^ das ist meine Frage wie parse ich diese Tabelle in PHP übergebe die Daten in die MySQL?

      Kommentar


      • #4
        Ich glaube du suchst eher sowas, dh die HTML Tabelle wird mit PHP aus der DB erzeugt, dann sollen Clientseitige JS-Manipulationen auch ebenfalls so in der DB erfolgen?

        Also grob sowas (hier auf Basis jQuery) via google gefunden.
        https://sarfraznawaz.wordpress.com/2...query-and-php/

        LG
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Hallo Hausl,

          danke, das ist nicht schlecht, aber leider nicht genau was ich suche.

          Ich suche eine Möglichkeit, eine einfache html Tabelle mit PHP zu parsen und dann die geparsten Daten in ein array zu laden um sie dann in die DB zu schreiben.

          Das vorhandene Jscript benötige ich nur, um rows zu löschen oder zu addieren.

          Desweiteren ist diese Tabelle auch nur ein Bestandteil eines grösseren Forms, das ich via POST einer PHP-Page übergebe um sie dann in die DB zu schreiben.

          Kommentar


          • #6
            Bevor du das Formular abschickst, generierst Du ein Json String aus der Tabelle mittels Javascript und sendest den String auch mit Post ab. Dann ist es doch ein leichtest mit Php die Daten zu verarbeiten.

            Kommentar


            • #7
              Hallo Strub,

              naja, in Anbetracht, dass ich vor 2 Wochen mit PHP und JavaScript angefangen habe, ist es nicht so leicht für mich... Aber wenn es ja soo einfach ist, kannst Du es mir bestimmt zeigen und ich wäre Dir auch sehr dankbar dafür.

              Kommentar


              • #8
                Einfach ist es erst wenn Du ein Json string hast. Doch den String zu generieren ist ein bischen zeitaufwändiger und kommt auf die Tabelle darauf an und welche Daten du benötigst.

                Ich schaue mal ob ich ein kleines Beispiel erstellen kann. Gib mir eine Stunde.

                Kommentar


                • #9
                  So mal ein kleines Beispiel. Kannst die Daten natürlich auch anders speichern. So wie du Sie eben am besten benötigst. Wenn Du mehrere Tabellen hast must Du eben noch gewisse Anpassungen machen. Doch es zeigt mal etwa einen Lösungsansatz.

                  Natürlich musst Du die Daten zuerst noch Validieren wenn Du Sie z.B. ind die DB speicherst.

                  Einfach auf send form drücken und die Daten werden angezeigt in einem Array.

                  Hoffe das ist wonach Du suchst.

                  Code:
                  <!DOCTYPE html>
                  <html lang="de-DE">
                  <head>
                  
                  <meta charset="utf-8">
                  <meta name="viewport" content="width=device-width, initial-scale=1.0">
                  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
                  <script>
                  $(document).ready(function() {
                  	$('#btn-send').click(function() {
                  		$('input[name=table_data]').val( generateTableData('#tableA') );
                  		$('form[name="form_name"]').submit();
                  	});	
                  });
                  
                  function generateTableData(finder) {
                  	var TableObj = $(finder),
                  		Data = {};
                  	
                  	TableObj.find('tr').each(function(tr_index){
                  		$(this).find('td').each(function(td_index){
                  			var TableTh = TableObj.find('th:eq('+td_index+')').text();
                  			
                  			if (typeof Data[tr_index] == 'undefined') {
                  				Data[tr_index] = {};
                  			}
                  			Data[tr_index][TableTh] = $(this).text();
                  		});
                  	});
                  	return JSON.stringify(Data);
                  	//alert( JSON.stringify(Data) );
                  }
                  </script>
                  
                  <title>Test</title> 
                  
                  
                  <style type="text/css">
                  <!--
                  table{ width: 100%; border: 1px solid #333; margin-top: 10px; margin-bottom: 50px;}
                  table th{ padding: 4px 7px 2px; background: #333; color: #fff;}
                  table td{ padding: 4px 7px 2px; vertical-align: top;}
                  table img{ display: block; }
                  table tr{ border-top: 1px solid #333;}
                  table tr:nth-child(odd) td{ background: #fff;}
                  table tr:nth-child(even) td{ background: #f0f0f0;}
                  -->
                  </style>
                  </head>
                  
                  <body>
                  <?php
                  if (isset($_POST['table_data'])) {
                  	$TableData = json_decode($_POST['table_data'], true);
                  	if (is_array($TableData)) {
                  		echo '<pre>';
                  		print_r($TableData);
                  		echo '</pre>';
                  		foreach($TableData as $Data){
                  			//or do whatever you want
                  		}
                  	}
                  }
                  ?>
                  
                  <table id="tableA">
                    <tr>
                      <th>id</th>
                      <th>brand</th>
                      <th>color</th>
                      <th>price</th>
                    </tr>
                    <tr>
                      <td>7</td>
                      <td>BMW</td>
                      <td>rot</td>
                      <td>20.000</td>
                    </tr>
                    <tr>
                      <td>4</td>
                      <td>VW</td>
                      <td>blau</td>
                      <td>18.000</td>
                    </tr>
                  </table>
                  
                  
                  <form method="post" name="form_name" action="">
                      <input name="table_data" type="hidden" value="">
                      <input name="whatever" type="text" value="">
                      <span id="btn-send">Send form</span>
                  </form>
                  
                  
                  </body>
                  </html>

                  Kommentar


                  • #10
                    Sofern die Tabellenspalten tatsächlich eine eindeutige ID haben kannst du auch mit simpleXML arbeiten. Musst eben nur einen entsprechenden Header davorschalten.

                    Andernfalls kommst du um REGEX nicht rum.

                    Kommentar


                    • #11
                      ^^ hey wow super, danke, das ist echt nett und hilfreich von Dir! Ich denke mit dem Beispiel kann ich definitiv was anfangen. Nun werde ich mal ein paar Anpassungen für meine Bedürfnisse probieren um zu setzen und melde mich ggf. wieder wenn ich nicht mehr weiterkomme oder poste mein Ergebnis hier. Vielen Dank nochmals.

                      Kommentar


                      • #12
                        Kein Problem. Jedoch gehe ich Morgen in die Ferien und daher kann ich Dir nicht mehr weiterhelfen.

                        Kommentar


                        • #13
                          Hallo,

                          ich habe es leider nicht hingekriegt mit dem Javascript. Ich habe gesehen, dass es mit der DOM Methode möglich ist. Wie müsste ich da vorgehen für meine Tabelle?

                          PHP-Code:
                           <table id="siteartefacts" style="background-color: rgb(13, 128, 164); width: 1000px; text-align: left; margin-left: auto; margin-right: auto;" border="1" cellpadding="1">
                            <
                          tbody><tr align="left">
                              <
                          td style="width: 15%;"><input name="chk" type="checkbox"></td>
                              <
                          td width="88%" align="left"><input name="txt" size="132" type="text" value=" Gestein mit magnetischen Anomalien  "></td>
                              </
                          tr><tr align="left">
                              <
                          td style="width: 15%;"><input name="chk" type="checkbox"></td>
                              <
                          td width="88%" align="left"><input name="txt" size="132" type="text" value=" Sehr hartes Tiefengestein (Andesit)  "></td>
                              </
                          tr><tr align="left">
                              <
                          td style="width: 15%;"><input name="chk" type="checkbox"></td>
                              <
                          td width="88%" align="left"><input name="txt" size="132" type="text" value=" Astroarchäologische Ausrichtung der Stätte  "></td>
                              </
                          tr><tr align="left">
                              <
                          td style="width: 15%;"><input name="chk" type="checkbox"></td>
                              <
                          td width="88%" align="left"><input name="txt" size="132" type="text" value=" Unglaubliche Steinbearbeitung  "></td>
                              </
                          tr></tbody>
                              </
                          table

                          Kommentar


                          • #14
                            Hallo,

                            habe mal empirisch probiert was zu basteln aber ich erhalte diese Fehlermeldung und weiss nicht wie ich den NodeValue in einen String kriege oder ob ich grundsätzlich komplett falsch liege. Hat jemand ne Ahnung?

                            hier die Fehlermeldung:
                            Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseStartTag: misplaced <body> tag in Entity, line: 44 in ..\test.php on line 16

                            Catchable fatal error: Object of class DOMElement could not be converted to string in ..\test.php on line 29
                            hier meine Seite mit dem Code:
                            PHP-Code:
                            <!DOCTYPE html>
                            <html lang="de-DE">
                            <head>

                            <meta charset="utf-8">
                            <meta name="viewport" content="width=device-width, initial-scale=1.0">


                            </head>


                            <?php
                            $PageString 
                            file_get_contents('test.php');

                            $doc = new DOMDocument();
                            $doc->loadHTML($PageString);
                            //echo $doc->saveHTML();


                            if(!doc) {
                                exit (
                            "Fehler!");
                            } else {
                                
                            //echo $doc->saveHTML();
                                
                            $trs $doc->getElementsByTagName('tr');
                                foreach(
                            $trs as $tr) {

                                    
                            $tds $tr->getElementsByTagName('td');
                                    foreach(
                            $tds as $td) {
                                        
                            $TheString $td.nodeValue;
                                        echo 
                            $TheString;
                                        
                                    }
                                }
                            }  




                            ?>


                            <body>



                             <table id="siteartefacts" style="background-color: rgb(13, 128, 164); width: 1000px; text-align: left; margin-left: auto; margin-right: auto;" border="1" cellpadding="1">
                              <tbody><tr align="left">
                                <td style="width: 15%;"><input name="chk" type="checkbox"></td>
                                <td width="88%" align="left"><input name="txt" size="132" type="text" value=" Gestein mit magnetischen Anomalien  "></td>
                                </tr><tr align="left">
                                <td style="width: 15%;"><input name="chk" type="checkbox"></td>
                                <td width="88%" align="left"><input name="txt" size="132" type="text" value=" Sehr hartes Tiefengestein (Andesit)  "></td>
                                </tr><tr align="left">
                                <td style="width: 15%;"><input name="chk" type="checkbox"></td>
                                <td width="88%" align="left"><input name="txt" size="132" type="text" value=" Astroarch�ologische Ausrichtung der St�tte  "></td>
                                </tr><tr align="left">
                                <td style="width: 15%;"><input name="chk" type="checkbox"></td>
                                <td width="88%" align="left"><input name="txt" size="132" type="text" value=" Unglaubliche Steinbearbeitung  "></td>
                                </tr></tbody>
                                </table> 
                             


                            </body>
                            </html>

                            Kommentar

                            Lädt...
                            X