16. august 2005 - 16:10Der er
31 kommentarer og 1 løsning
sjov kombinering af array's samt mysql
jeg har en tabel hvor min Kolonner kan varierer og vil gerne have udskrevet alle mine poster, med en bestemt formatering alt efter hvilket slaks felt det er i min database.
og liste alle mine poster med en normal select query. men nu kommer det sjove at alle mine kolenner skal skal udskrives på en ftpside som en form der kan udfyldes og postes, hvor efter dataerne sendes til databasen.
Er der nogle der kan klare den, det giver gode Point
ja okay , rigtigt og hvad så når jeg skal udskrive det..??? hvor de forskellige felter skal udskrives på forskellige måder..??? (((ps lige et under spørgsmål kan man lave flere database forespørgelser inden i hianden.? har nelig haft nogle problemmer med det.. med to while sætninger...)))
hmmm det er egentlig det jeg ikke kan... men jeg kan prøve at beskrive det lidt bedre tag fx din form, hvis man nu sagde at databasen var en ordre liste og den du har vil svare til at lave en ny ordre, men jeg skulle have at når jeg hade valgt en ordre at jeg vil få udskrevet værdierne i de "text bokse, dato felter" eller hvad det nu må være.
kort sagt jeg vil have at der bliver hentet værdier ind i formen som man skal kunne redigere og poste igen (også det blive opdateret i databasen)
Men tekst-felterne i en form kommer jo kun i to varianter input="text" og så textarea. Der er ikke noget specielt felt som lige egner sig til f.eks. tal eller datoer. Den eneste anden mulighed er en checkboks (til en boolean).
jep, men fisk... så siger vi bare at hvis felt typen er varchar skal den vises som <input type='text'>, int skal skjules og text/longtext skal vises som en textarea ;) ... meget smart... hvordan vil man kunne lave dette...???
Tænkte nok at det var noget i den stil som var forklaringen; If'et har jeg jo netop sorteret fra i det tidligere eksempel. Det ville være surt hvis man sorterede alle tal-felter fra, over en kam, bare for ikke at skulle vise id'et.
Jeg skal nok give et eksempel, men det kommer nok lige til at tage et stykke tid.
Her er det første udkast til en form side som trækker data ud og præsentere dem for redigering. Den er endnu ikke så sofistikeret at den kender forskel på forskellige datatyper:
<? $result = mysql_query("SHOW COLUMNS FROM dinTabel") or die(mysql_error()); if (mysql_num_rows($result) > 0) { // Først finder vi field-navne. $fields = array(); $keys = array();
while ($row = mysql_fetch_assoc($result)) { // Fields sorteres mellem om de er primary-keys/auto_increment eller "almindelige" felter. if (strpos($row["Key"], "PRI") === false && strpos($row["Field"], "auto_increment") === false) { $fields[] = $row["Field"]; } else { $keys[] = $row["Field"]; } }
// Data opsættes i en tabel. echo "<table border='1'>";
// Der sættes overskrifter på tabellen. echo "<tr>"; foreach ($fields as $field) { echo "<th>" . $field . "</th>"; } echo "<th> </td>"; // Ekstra kolonne til submit-buttons. echo "</tr>";
// Data trækkes ud af database-tabellen. $result = mysql_query("SELECT * FROM dinTabel") or die(mysql_error()); while ($row = mysql_fetch_assoc($result)) { // En form pr. række i database-tabellen. echo "<form action='updateData.php' method='post'>"; echo "<tr>";
// Et input felt pr. field. foreach ($fields as $field) { echo "<td valign='top'>"; echo "<input type='text' name='" . $field . "' value='" . $row[$field] . "'>"; echo "</td>"; }
// Den sidste kolonne i tabellen. echo "<td valign='top'>";
// Hver key indsættes som et hidden felt. foreach ($keys as $key) { echo "<input type='hidden' name='" . $key . "' value='" . $row[$key] . "'>"; }
// Og en submit-button. echo "<input type='sibmit'>"; echo "</td>";
ok... fair men det skal være stillet op på en anden måde... den skal stadig udskrive alle rækker... men det skal stilles op på på måden vist neden for.
<? $result = mysql_query("SHOW COLUMNS FROM dinTabel") or die(mysql_error()); if (mysql_num_rows($result) > 0) { // Først finder vi field-navne. $fields = array(); $keys = array();
while ($row = mysql_fetch_assoc($result)) { // Fields sorteres mellem om de er primary-keys/auto_increment eller "almindelige" felter. if (strpos($row["Key"], "PRI") === false && strpos($row["Field"], "auto_increment") === false) { $fields[] = $row["Field"]; } else { $keys[] = $row["Field"]; } }
// Data trækkes ud af database-tabellen. $result = mysql_query("SELECT * FROM dinTabel") or die(mysql_error()); while ($row = mysql_fetch_assoc($result)) { // En form pr. række i database-tabellen. echo "<form action='updateData.php' method='post'>";
// Hver key indsættes som et hidden felt. foreach ($keys as $key) { echo "<input type='hidden' name='" . $key . "' value='" . $row[$key] . "'>"; }
// Data opsættes i en tabel. echo "<table border='1'>";
// En række i tabellen pr. field. foreach ($fields as $field) { echo "<tr>"; echo "<td valign='top'>" . $field . "</td>"; echo "<td><input type='text' name='" . $field . "' value='" . $row[$field] . "'><td>"; echo "</tr>"; }
// Og en submit-button. echo "<tr>"; echo "<td colspan='2' align='center'><input type='submit'></td>"; echo "</tr>";
Nåe, det var da ikke fordi at jeg ikke var parat til at gøre den færdig. Jeg ville bare sikre mig at det var den rette vej inden at jeg lavede en masse kode mere.
Dit ønske om at bruge et textarea for visse typer kan f.eks. implementeres ved at kigge på indholdet af feltet $row["Type"]. Du kan se hvilke felter der er findes, og hvad deres data er i den grå boks lige under Eksempel 1 på:
der bliver variablen fields udskrevet med felt navnet, men jeg vil også gerne have udskrevet felt typen der... alså om det er ini varchar longtext etc.
Det er da i orden, men så er det mindste du kan gøre at poste den her.
Desuden synes jeg ikke at det var specielt høfligt bare at lukke spørgsmålet på den pludselige måde uden en gang at give en forklaring eller et tak for hjælpen. Så vidt jeg kan se har jeg da brugt temmeligt meget tid på at hjælpe dig med denne her.
Hey nielle. Beklager, jeg har ikke været online i langtid og kan ikke huske grunden til dette... jeg vil gerne undskylde og gerne give dig dine Point samt sige stor tak for din fine indsats...
Jeg acceptere da din undskyldning, og der er egentligt også lige meget med point. :^)
Men du skriver at du har fundet en bedre løsning. Siden at du har det, så synes jeg da at du skal poste den her sådan ar den kan komme nogle flere til gavn.
Hey nielle. Jeg skulle bruge det til en kalender, hvor man kunne have forskellige kalender grupper og hver gruppe skulle have forskellige felter. fandt ud af det var nemere at oprette en hoved tabel til alle kalender emner og lave en join på de forskellige felter, alt af hængeligt af gruppen de var i.
Det kom til at se således ud som SQL, der hvor den henter de ekstre felter ud. SELECT data, name FROM kalendere ke JOIN kalenderstruk ks ON ke.t_id = ks.id WHERE e_id = '$row[id]' ORDER BY position
Det virker, men kunne nok have været lavet på en anden måde uden 30 SQL sætninger. Men buhu det var mit første system i PHP, det virker og gør jobbet ;o)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.