php mysql
Margit Brnoviak
- html
- mysql
- php
Hallo zusammen, ich finde den eintrag von zuerst leider nicht mehr
mein erstes problem ion php mysql
ich hab eine tabelle in der die ID automatisch logischerweise bestückt wird.
jetzt möchte ich in einer select (php) die id aus der ersten tabelle in eine zweite tabelle per while aus dem html select automatisch eintragen lassen.
heist die id besteht schon und soll sich automatisch wenn ich aus dem options fehlt auswählte eintragen in die neue tabelle.
und ich habe echt keinen plan mehr
ps.: rechtschreibfehler bitte überlesen. pss.: bin nicht blond dennoch zuviel im kopf
aso ja ich kann am server kein mysqli verwenden. der lasst das nicht zu
Hallo Margit,
aso ja ich kann am server kein mysqli verwenden. der lasst das nicht zu
Sicher, dass das wirklich der Fall ist? Führe einmal folgendes aus und schaue, ob sich unter „Configuration“ nicht eine Infobox zu mysqli befindet.
<?php
phpinfo();
?>
Selbst wenn dem so wäre, PHP5.6 ist die letzte noch unterstützte PHP-Version, die noch die mysql
-Erweiterung unterstützt. Angenommen, dein Hoster stellt auf PHP7 um, dann musst du alle deine Skripte anpassen.
Gruß
Julius
--
Zu argumentieren, dass Sie keine Privatsphäre brauchen, weil Sie nichts zu verbergen haben, ist so, als würden Sie sagen, dass Sie keine Freiheit der Meinungsäußerung brauchen, weil Sie nichts zu sagen haben.
Hallo Julius,
ja sogar extra bei anbieter damals schon in anfänger kurs 2013 angefragt.
doch seit dem nichts mehr an scripten geschrieben, leider
//// server auszug Erweiterte Informationen
PHP Version
5.5.38
/// php info
Configuration ADOdb Info Extension requires ADOdb classes Download http://adodb.sourceforge.net/ API Version 5.04
MySQL Version
5.5.52
Hallo Margit,
PHP Version
5.5.38
Die 5.5er-Reihe ist bereits seit Mitte 2016 aus dem Support raus.
/// php info
Configuration
ADOdb
Info Extension requires ADOdb classes
Download http://adodb.sourceforge.net/
API Version 5.04
MySQL Version5.5.52
Das dürfte die MySQL-Version sein.
Ich glaube, du verstehst da etwas falsch:
Suche mal nach mysqli, wenn diese Zeichenkette wirklich nicht zu finden ist, dann musst du tatsächlich das veraltete mysql benutzen oder den Anbieter wechseln.
Aber nun zu deiner eigentlichen Frage:
Du könntest die ID des eben eingefügten Eintrags mittels mysql_insert_id herausfinden und diese dann in die Datenbank eintragen.
Gruß
Julius
--
Zu argumentieren, dass Sie keine Privatsphäre brauchen, weil Sie nichts zu verbergen haben, ist so, als würden Sie sagen, dass Sie keine Freiheit der Meinungsäußerung brauchen, weil Sie nichts zu sagen haben.
Mach mal das, was Julius empfohlen hat. Den Test mit der Ausgabe von phpinfo
.
Wenn der Hosting-Anbieter wirklich kein mysqli bereitstellt (was ich für unwahrscheinlich halte), würde ich einen Wechsel vorschlagen. Bei so grundlegenden Aspekten bringt es nichts, sich selbst künstlich alles zu erschweren, weil die Umgebung eine Standardfunktionalität nicht anbietet.
mysql ist zwar grundsätzlich ähnlich genug zu mysqli, dass ich jetzt nicht sagen würde, dass es völlig verkehrt ist, zum Lernen noch mit mysql einzusteigen. Vieles lässt sich später fast 1:1 umstellen. Aber dennoch gilt grundsätzlich der vorherige Absatz.
Edit: Nicht mehr Thread aktualisiert vor Absenden.
Hallo Margit,
ich finde den eintrag von zuerst leider nicht mehr
Ich aber :-)
Dieses Forum besteht aus zwei Foren, dem Meta-Forum und dem SELFHTML-Forum, in dem du gerade gepostet hast, falls dich der Aufbau des Forums verwirrt. Es exitiert auch eine Gesamtübersicht über beide Foren.
Gruß
Julius
verwirren ist gut
weiß eg grade keinen ausweg, und will weiter kommen
Tag,
heist die id besteht schon und soll sich automatisch wenn ich aus dem options fehlt auswählte eintragen in die neue tabelle.
"wenn ich aus dem options fehlt auswählte eintragen"? Das ist kein Deutsch, tut mir leid.
ps.: rechtschreibfehler bitte überlesen.
Rechtschreibung hat einen tieferen Sinn und Zweck. Möchtest du eine Antwort von jemandem, dann schreibe so, dass du auch verstanden wirst. Das da oben ist nur, Verzeihung, zusammenhangloses Gestammel.
VERZEIHUNG,
<select name="mga_bezeichnung">
<?php
//mitgliedschaftsart
$result_ma=mysql_query("SELECT * FROM mitgliedschaftsart ORDER BY mga_id Limit 2, 999999");
while($row_ma=mysql_fetch_array($result_ma))
{
//abfrageergebinss
$mga_id=$row_ma[0];
$mga_bezeichnung=$row_ma[1];
echo '<option value="' . $row_ma[0] . ' ' . $row_ma[1] . ' ">' . $row_ma[0] . ' ' . $row_ma[1] . ' </option>';
} // ende while
?>
</select>
ich hätte gerne das er die $row_ma in eine extra tabelle/zelle schreibt und nicht alles zusammen. da ich ja sonst keine erneute abfrage per id erstellen könnte
er merkt sich die ID wenn ich es in einen input feld eintage/habe
wie bekomm ich das jetzt hin das er aus dieser select/while die id in das entsprechende feld schreibt
BITTE
Gut, dass ich grad eine Weile nicht am PC war, dein Codebeispiel macht schonmal teilweise klar, was Du möchtest.
Du erzeugst also eine <select> Element und bestückst die <option>s dazu aus deiner Tabelle der Mitgliedschaftsarten.
In deinem Beispiel zeigst Du dem Anwender in der Dropdownliste in jeder Zeile die ID und die Art an, willst Du das wirklich? Ich hätte es vermutlich so gemacht (ohne Kommentare)
while ($row_ma = mysql_fetch_array($result_ma))
{
$mga_id = $row_ma[0];
$mga_bezeichnung = htmlspecialchars($row_ma[1]);
echo '<option value="$mga_id">$mga_bezeichnung</option>';
}
Erklärung:
Wenn aus diesem HTML jetzt die Antwort zurückkommt, solltest Du in der $_POST Variablen mga_bezeichnung die ausgewählte ID finden (oder nix wenn der Anwender nichts ausgewählt hat).
Eins noch: mysql(i)_fetch_array liefert Dir nicht nur die Spalten nach Spaltennummer, sondern auch noch nach Name. Wenn deine Tabelle also die Spalten mga_id und mga_bezeichnung enthält, dann findest Du in einer mga_row vier Einträge:
mga_row[0] = ID
mga_row[1] = Bezeichnung
mga_row['mga_id'] = ID
mga_row['mga_bezeichnung'] = Bezeichnung
Wenn Du nur die Einträge mit 0 und 1 als Schlüssel haben willst, kannst Du mysql(i)_fetch_row verwenden, oder mysql(i)_fetch_array($result_ma, MYSQL_NUM). Mit mysql(i)_fetch_assoc bzw. mysql(i)_fetch_array($result_ma, MYSQL_ASSOC) bekommst Du nur die Einträge mit den Spaltennamen als Schlüssel.
Und wo ich das gerade schon erwähne: Die Kombination von SELECT * und Zugriff auf die Row mit Spaltennummern ist ein Lottospiel. Entweder schreibst Du SELECT mga_id, mga_bezeichnung FROM ...
, dann weißt Du, an welcher Position welches Feld ist, oder du nimmst zum SELECT * die namentlichen Schlüssel für den Zugriff in der Row. Es ist aber eigentlich gute Praxis, SELECT * nicht in Programmen zu verwenden, sondern immer explizit hinzuschreiben, welche Spalten man haben will.
Rolf
Tach!
- Ich verwende das PHP Feature "string parsing", um die Akrobatik mit der Stringverketterei zu vermeiden
Nimm mal lieber sprintf() (oder in dem Fall printf), um die Akrobatik mit den zusätzlichen Variablen zu vermeiden.
printf('<option value="%s">%s</option>',
htmlspecialchars($row_ma[0], htmlspecialchars($row_ma[1]));
dedlfix.
Die waren eh da ;-)
Aber wie gesagt - die ID ist numerisch, da braucht man kein htmlspecialchars. Nicht bei den üblichen arabischen Zahlen...
Margit, wenn Du sprintf nehmen willst und die ID in den value UND in den Klartext setzen willst, dann guck Dir hier das Beispiel 4 an, das zeigt, wie man einen sprintf-Parameter mehrfach verwendet.
Rolf
guten abend Rolf,
das von angegebene beispiel
while ($row_ma = mysql_fetch_array($result_ma)) { $mga_id = $row_ma[0]; $mga_bezeichnung = htmlspecialchars($row_ma[1]); echo '<option value="$mga_id">$mga_bezeichnung</option>'; }
funkt mit $mga_bezeichnung eben nicht bei mir am server
den wenn ich ihm sage schreib mir die $row_ma[0] in die spalte $mga_id kommt immer die 1
also nicht die passende mga_id zur mga_bezeichnung. und logischer weise brauche ich um weiter arbeitn zu können die passende id auch im der db. in der spalte mga_id. dort schreibt er immer nur die 1
und in der mga_bezeichnung logischerweise die richtige weil er sie ja in value drin hat
so und wie bekomm ich das jetzt hin das er sich das so wei merkt, das er die mga_id die aus dem <option value .... auch im insert in die spalte mga_id schreibt
ps.: es lasst mir halt keine ruhe, udn ich will das wenigstens fertig bekommen
Hm, ich sehe gerade einen dummen Fehler von mir:
echo '<option value="$mga_id">$mga_id $mga_bezeichnung</option>';
Kann nicht funktionieren, weil PHP Variablen nur in Strings mit doppelten Anführungszeichen ersetzt. Es muss natürlich
echo "<option value='$mga_id'>$mga_bezeichnung</option>";
heißen. Oder die Variante von dedlfix, leicht variiert (ich unterstelle, dass deine ID in der Datenbank ein integer-Wert ist; trotzdem muss sie als %s formatiert werden weil mysql/mysqli die Ergebnisse als strings liefert):
printf('<option value="1$%s">1$%s 2$%s</option>', $row_ma[0], htmlspecialchars($row_ma[1]));
Die Frage mit der ID 1 zu klären ist schwierig. Zunächst mal muss ich erraten, was Du eigentlich tust, weil deine Beschreibung sehr, nun, kontextfrei und unsortiert ist. Aber ich probiere es mal mit dem, was ich erraten zu haben glaube :)
Den INSERT machst Du ja sicherlich erst, nachdem der Anwender was ausgewählt und das Form abgeschickt hat. D.h. zwischen Erzeugen des SELECT Elements und dem INSERT gibt es einen Roundtrip Server -> Browser -> Server. Den müssten wir schrittweise überprüfen.
Sieht das Select Element im Browser richtig aus? Wie sieht das erzeugte HTML für das Formular aus, in dem der <select> steht? Kannst Du das mal rauskopieren? Oder - falls die Seite, an der du baust, öffentlich zugänglich ist, einen Link dahin posten?
Was sagt der Netzwerktrace des Browsers über die Daten, die abgeschickt werden? Den findest Du in den Entwicklerwerkzeugen deines Browsers (hat eigentlich jeder moderne Desktop-Browser an Bord).
Wie sieht der Code aus, mit dem Du die Antwort auf das Form verarbeitest?
Wenn diese Fragen nicht zu dem passen, was Du tust - ok. Was tust Du statt dessen?
Rolf
Tach!
Oder die Variante von dedlfix, leicht variiert (ich unterstelle, dass deine ID in der Datenbank ein integer-Wert ist; trotzdem muss sie als %s formatiert werden weil mysql/mysqli die Ergebnisse als strings liefert):
Nö, ob %s oder der Platzhalter für Zahlen verwendet wird, spielt unter PHP keine große Rolle. Notfalls nimmt PHP selbständig eine Typumwandlung vor. Ich nehme immer %s, wenn ich keine Formatierungszusätze für Zahlen brauche.
dedlfix.
Hello,
Oder die Variante von dedlfix, leicht variiert (ich unterstelle, dass deine ID in der Datenbank ein integer-Wert ist; trotzdem muss sie als %s formatiert werden weil mysql/mysqli die Ergebnisse als strings liefert):
Nö, ob %s oder der Platzhalter für Zahlen verwendet wird, spielt unter PHP keine große Rolle. Notfalls nimmt PHP selbständig eine Typumwandlung vor. Ich nehme immer %s, wenn ich keine Formatierungszusätze für Zahlen brauche.
Das liegt jetzt aber an der Eigenart von PHP, ohne Spezialfunktionen {z. B. pack()} sowieso nur String-Literale (ist das jetzt der richtige Ausdruck?) zu erzeugen, auch wenn man in Dateien schreibt. Binäre Werte kommen dabei nicht heraus. Und die SQL-Schnittstellen der DBMS erwarten als Daten ja ebensolche "String-Literale", warum man ja Binärdaten und Steuerzeichen innerhalb von Datenwerten escapen muss.
Wie ist das bei C? Wenn ich da %d anstelle von %s schreibe, wird doch tatsächlich eien binäre Darstellung erzeugt, oder?
Liebe Grüße
Tom S.
Hallo TS,
Wie ist das bei C? Wenn ich da %d anstelle von %s schreibe, wird doch tatsächlich eien binäre Darstellung erzeugt, oder?
Nein. Dann wird der Pointer auf das erste Byte der Zeichenkette in Dezimalschreibweise formatiert.
LG,
CK
Hallo und Mahlzeit Rolf,
nein ich kann die seite nicht öffentlich machen. tut leid.
HTML Select usw alles okay.
ich denke es habert das er es sich bis zum insert nicht mehr merkt
"Er" merkt sich gar nichts. DEIN Programm speichert etwas und reicht es angemessen weiter, oder DEIN Programm tut es eben nicht. Wenn die ID beim INSERT nicht ankommt, dann hat DEIN Programm unterwegs etwas verschlampt. Dafür kann es vielfältige Gründe geben, und wir müssen den richtigen finden.
Rolf