php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 23-03-2017, 16:04
Andreas-H
 Registrierter Benutzer
Links : Onlinestatus : Andreas-H ist offline
Registriert seit: Mar 2017
Beiträge: 5
Andreas-H befindet sich auf einem aufstrebenden Ast
Standard 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!
Mit Zitat antworten
  #2 (permalink)  
Alt 23-03-2017, 17:12
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 451
mermshaus wird schon bald berühmt werden
Standard

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)
Mit Zitat antworten
  #3 (permalink)  
Alt 23-03-2017, 17:16
Andreas-H
 Registrierter Benutzer
Links : Onlinestatus : Andreas-H ist offline
Registriert seit: Mar 2017
Beiträge: 5
Andreas-H befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #4 (permalink)  
Alt 23-03-2017, 17:48
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 451
mermshaus wird schon bald berühmt werden
Standard

Wie hast du denn vorher Daten abgerufen?

Tutorials zu mysqli zum Beispiel hier:

- PHP: MySQLi extension basic examples - Manual
- https://www.sanwebe.com/2013/03/basic-php-mysqli-usage

Im Handbuch/der Doku sind zu den Funktionen auch in der Regel Beispiele.

- http://php.net/manual/en/book.mysqli.php


Siehe auch Crossposting hier: → http://phpforum.de/forum/showthread.php?t=284392

Geändert von mermshaus (23-03-2017 um 17:50 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 24-03-2017, 10:09
Andreas-H
 Registrierter Benutzer
Links : Onlinestatus : Andreas-H ist offline
Registriert seit: Mar 2017
Beiträge: 5
Andreas-H befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #6 (permalink)  
Alt 24-03-2017, 15:44
Andreas-H
 Registrierter Benutzer
Links : Onlinestatus : Andreas-H ist offline
Registriert seit: Mar 2017
Beiträge: 5
Andreas-H befindet sich auf einem aufstrebenden Ast
Standard

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);
            
[
UPDATEaber 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
Mit Zitat antworten
  #7 (permalink)  
Alt 25-03-2017, 21:04
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 451
mermshaus wird schon bald berühmt werden
Standard

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($sENT_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)
Mit Zitat antworten
  #8 (permalink)  
Alt 27-03-2017, 09:38
Andreas-H
 Registrierter Benutzer
Links : Onlinestatus : Andreas-H ist offline
Registriert seit: Mar 2017
Beiträge: 5
Andreas-H befindet sich auf einem aufstrebenden Ast
Standard

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!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
dynamische Editierseite JCDenton SQL / Datenbanken 32 14-05-2007 15:02
Formularauswertung: dynamische Anzahl an Checkboxgruppen Olliu PHP Developer Forum 2 07-06-2006 16:55
dynamische ip yard Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) 7 29-04-2004 17:06
Dynamische Liste plr1 PHP Developer Forum 3 22-10-2003 12:53
Anzahl Berni SQL / Datenbanken 1 05-11-2000 20:14

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:35 Uhr.