SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden. |
 |

23-03-2017, 16:04
|
Andreas-H
Registrierter Benutzer
|
|
Registriert seit: Mar 2017
Beiträge: 5
|
|
Dynamische Anzahl an Formfeldern
Hallo,
ich war mal gut in MySQL, aber bin nun schon einige Jahre raus. Könnt ihr mir auf die Sprünge helfen?
ich habe eine DB-Tabelle mit den Spalten Unternehmen, Land, Teilnehmer. Nun möchte ich per im URL-String übergebenen PHP-Parameter "Unternehmen" jeweils alle registrierten Teilnehmer/Länder anzeigen lassen. Mit dem Clou: Diese sollen in Input-Formfeldern dargestellt werden, die dann direkt geändert und per Submit-Button in der Datenbank geändert werden können.
Wie gehe ich das am besten an?!
Danke Euch und VG!
|

23-03-2017, 17:12
|
 |
mermshaus
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 452
|
|
Nun ja, SELECT-Query mit WHERE Unternehmen = <Wert-aus-Parameter>.
Aus der Rückgabe per Schleife die Eingabeelemente erzeugen. Als Name am besten ein Array aufbauen mit der ID des Datensatzes als Key. Schematisch so:
Code:
foreach Datensatz as D
<input type="text" name="data[D->id][Land]" value="D->Land">
<input type="text" name="data[D->id][Teilnehmer]" value="D->Teilnehmer">
endforeach
Nach dem Absenden hast du die Daten dann als Array in POST und kannst UPDATE-Queries ausführen.
Fehlerbehandlung und Behandlung von Kontextwechseln (Escaping) nicht vergessen.
- Programmiertechnik/Kontextwechsel ? SELFHTML-Wiki
Geändert von mermshaus (23-03-2017 um 17:34 Uhr)
|

23-03-2017, 17:16
|
Andreas-H
Registrierter Benutzer
|
|
Registriert seit: Mar 2017
Beiträge: 5
|
|
Das sieht sehr vielversprechend aus, Dankeschön!
Könntest Du mir auch ein Beispiel geben für den SQL-Teil?
Ich habe SQL zum letzten Mal benutzt, als es mysqli noch nicht gab :-O Mit der (für mich) "neuen" Anwendungsweise von SQL-Arrays, -Fetches & Co. bin ich daher noch nicht so gut vertraut.
|

24-03-2017, 10:09
|
Andreas-H
Registrierter Benutzer
|
|
Registriert seit: Mar 2017
Beiträge: 5
|
|
Moin, vorher hab ich mysql (ohne i) benutzt.
Danke für Deine Hilfe! Und sorry für das unerwünschte Doppelposting. Mir war nicht klar, dass das unerwünscht ist - verstehe es aber jetzt.
|

24-03-2017, 15:44
|
Andreas-H
Registrierter Benutzer
|
|
Registriert seit: Mar 2017
Beiträge: 5
|
|
Hi mermshaus & andere,
Mit foreach hat es nicht geklappt. mysqli_fetch_assoc scheint damit nicht kompatibel zu sein. Ich habe es jetzt per while geschrieben, was gut funktioniert.
Mit ist aber wirklich nicht klar, wie ich das Update vornehmen kann. Die Input-Felder haben ja alle einen anderen Namen (nummeriert anhand der Zeilen-ID) als die Tabellenspalten in der Datenbank... ?
Ist es ganz einfach und ich stehe nur auf dem Schlauch?
PHP-Code:
<?php
if(isset($_POST['update'])) { echo "Updated data successfully";
$dbhost = '...'; $dbuser = '...'; $dbpass = '...'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); [UPDATE, aber wie? :-/]
mysql_select_db('...'); $retval = mysql_query( $sql, $conn );
} else {
$Company = $_GET['company'];
$link = mysqli_connect ("...", "...", "...", "...");
echo ("<html><body><table>");
$query = "SELECT ID, Country, FullName, Conference, DietaryRequests FROM DinnerAttendees WHERE Company = '$Company'";
if ($result = mysqli_query($link, $query)) {
echo ("<form method='post' action='regstest.php'>");
/* fetch associative array */ while ($row = mysqli_fetch_assoc($result)) { printf ("<input type='text' name='%s_ID' value='%s'> <input type='text' name='%s_Land' value='%s'> <input type='text' name='%s_Name' value='%s'> <input type='text' name='%s_Conf' value='%s'> <input type='text' name='%s_Diet' value='%s'><br>", $row["ID"], $row["ID"], $row["ID"], $row["Country"], $row["ID"], $row["Country"], $row["ID"], $row["FullName"], $row["ID"], $row["Conference"], $row["ID"], $row["DietaryRequests"]); }
echo ("<input name='update' type='submit' id='update' value='Update'></form>");
/* free result set */ mysqli_free_result($result); }
/* close connection */ mysqli_close($link);
echo ("</table></body></html>");
}
?>
Danke!
(Und dieses Mal nur hier gepostet
|

25-03-2017, 21:04
|
 |
mermshaus
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 452
|
|
Hier mal ein vollständiges Beispiel (allerdings ungetestet):
(Die Klasse ist dann eigentlich so gedacht, dass sie in einer eigenen Datei liegt und inkludiert wird (bzw. Autoloader). Zudem ist sie universell nutzbar und steht in keinem Zusammenhang mit dem HTML-Code aus dem Beispiel. Trennung von Zuständigkeiten.)
PHP-Code:
<?php
/** * Class AttendeeService */ class AttendeeService { /** * @var mysqli */ private $mysqli;
/** * AttendeeService constructor. * @param mysqli $mysqli */ public function __construct(mysqli $mysqli) { $this->mysqli = $mysqli; }
/** * @param string $query * @return mysqli_result * @throws Exception */ private function query($query) { $result = $this->mysqli->query($query);
if ($result === false) { throw new Exception('Abfrage konnte nicht ausgeführt werden'); }
return $result; }
/** * @param $s * @return string */ private function escape($s) { return $this->mysqli->real_escape_string($s); }
/** * @param string $company * @return array * @throws Exception */ function getAttendeesByCompany($company) { $query = sprintf( "SELECT ID, Country, FullName, Conference, DietaryRequests FROM DinnerAttendees WHERE Company = '%s'", $this->escape($company) );
$result = $this->query($query);
$attendees = $result->fetch_all(MYSQLI_ASSOC);
return $attendees; }
/** * @param $id * @param array $data * @throws Exception */ private function updateAttendee($id, array $data) { $fields = array('Country', 'FullName', 'Conference', 'DietaryRequests');
$parts = array();
foreach ($fields as $field) { if (!isset($data[$field]) || !is_string($data[$field])) { throw new Exception(sprintf('Feld "%s" fehlerhaft in Datensatz mit ID %s', $field, $id)); }
$tmp = trim($data[$field]);
$parts[] = sprintf("%s = '%s'", $field, $this->escape($tmp)); }
$query = sprintf( 'UPDATE DinnerAttendees SET %s WHERE ID = %s', implode(', ', $parts), $this->escape($id) );
$this->query($query); }
/** * @param array $entries */ public function updateAttendees(array $entries) { foreach ($entries as $id => $data) { $this->updateAttendee($id, $data); } } }
/** * @param $s * @return string */ function e($s) { return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); }
/** * @param string $url */ function redirect($url) { header('Location: ' . $url); exit; }
// Verarbeitung
$mysqli = new mysqli('...', '...', '...', '...'); $mysqli->set_charset('utf8');
$service = new AttendeeService($mysqli);
$tpl = array( 'company' => '', 'data' => array() );
if (isset($_POST['update'])) { $service->updateAttendees($_POST['data']); redirect('regstest.php'); } else { $company = (isset($_GET['company']) && is_string($_GET['company'])) ? $_GET['company'] : '';
$data = $service->getAttendeesByCompany($company);
$tpl['company'] = $company; $tpl['data'] = $data; }
// Ausgabe
header('Content-Type: text/html; charset=UTF-8');
?><!DOCTYPE html> <html lang="de">
<head> <meta charset="UTF-8"> <title>Einträge für <?=e($tpl['company'])?></title> </head>
<body>
<h1>Einträge für <?=e($tpl['company'])?></h1>
<?php if (count($tpl['data']) > 0): ?>
<form method="post" action="regstest.php"> <?php foreach ($tpl['data'] as $row): ?> <?php $prefix = sprintf('data[%s]', e($row['ID'])); ?> <p> <input type="text" name="<?=$prefix?>[Country]" value="<?=e($row['Country'])?>"> <input type="text" name="<?=$prefix?>[FullName]" value="<?=e($row['FullName'])?>"> <input type="text" name="<?=$prefix?>[Conference]" value="<?=e($row['Conference'])?>"> <input type="text" name="<?=$prefix?>[DietaryRequests]" value="<?=e($row['DietaryRequests'])?>"> </p> <?php endforeach; ?> <p><input name="update" type="submit" value="Update"></p> </form>
<?php else: ?>
<p>Es liegen keine Daten vor.</p>
<?php endif; ?>
</body>
</html>
Geändert von mermshaus (25-03-2017 um 21:59 Uhr)
|

27-03-2017, 09:38
|
Andreas-H
Registrierter Benutzer
|
|
Registriert seit: Mar 2017
Beiträge: 5
|
|
Vielen lieben Dank, mermshaus!
Übers Wochenende habe ich anhand Deines Codes mich schon in einige mir "solala"-bekannte Funktionen wieder eingelesen und denke, jetzt bin ich auf einem guten Weg. Danke!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
Aktuelle PHP Scripte
Homepagetools 2022
Kostenloses Gästebuch und Homepagetools für die eigene Homepage.
Bei GuxDu kann man sich kostenlos die Websitetools auf die vorhandene Website einbauen. Zudem kann man bei GuxDU auch eine eigene Homepage mit 3D Effekten erstellen. GuxDu ist kostenlos.
29.04.2022
freepler | Kategorie: PHP/ Gaestebuch
|
SF-Shopsystem V1.0
Hier haben wir ein einzigartiges Shopsystem in PHP.
Die Anzahl der Artikel ist unbegrenzt, einfach zu bedienen und erklärt sich.
Ausführliche Beschreibung weiter unten.
28.04.2022
Speedcrawler | Kategorie: PHP/ Shops
|
Anzeigen Markt mit PayPal Bezahl System
Anzeigen Markt Script
mit PayPal Bezahl System
Der Benutzer hat die Möglichkeit sofort nach Bezahlung mit PayPal
seine Anzeigen zu schalten, je nach seinem Guthaben.
27.04.2022
Webace_de | Kategorie: PHP/ Anzeigenmarkt
|
Alle PHP Scripte anzeigen
|