Seite 1 von 2

Code optimieren kürzen

Verfasst: 01.06.2009, 16:27
von Michael1967
Hallo,

mal ne Frage. Ich habe da ein Formular (insgesamt 40 Felder). Nun übergebe ich die Werde so -

Code: Alles auswählen

$s1 = $_POST["s1"];
$s2 = $_POST["s2"];
$s3 = $_POST["s3"];
$s4 = $_POST["s4"];
$s5 = $_POST["s5"];
$s6 = $_POST["s6"];
$s7 = $_POST["s7"];
$s8 = $_POST["s8"];
$s9 = $_POST["s9"];
$s10 = $_POST["s10"];
// Geht bis $s40
Gibt es da eine Möglichkeit diesen Block zu kürzen?

Und noch eine Frage hinterher - wie kann ich 3 Tabellen in der Datenbank mit nur einer Abfrage ansprechen?

Ich mache das noch so -

Code: Alles auswählen

$aendern = "UPDATE tabelle1 set aktiv=1 where id=$id";
$update = mysql_query($aendern);

$aendern = "UPDATE tabelle2 set aktiv=1 where id=$id";
$update = mysql_query($aendern);

$aendern = "UPDATE tabelle3 set aktiv=1 where id=$id";
$update = mysql_query($aendern);
Geht das mit einer Abfrage? Wenn ja - wie ist sowas aufgebaut?

Danke für die Hilfe.

Verfasst:
von

Re: Code optimieren kürzen

Verfasst: 01.06.2009, 17:56
von Mork vom Ork
Michael1967 hat geschrieben:

Code: Alles auswählen

$s1 = $_POST["s1"];
$s2 = $_POST["s2"];
$s3 = $_POST["s3"];
// Geht bis $s40
Gibt es da eine Möglichkeit diesen Block zu kürzen?
Gegenfrage: Warum schiebst du alles von der Variablen $_POST["sn"] in die Variable $sn? Einen Vorteil hast du davon per se nicht, vielleicht mal abgesehen davon, dass sich deine P-, O- und T-Tasten weniger abnutzen, aber bei den derzeitigen Tastaturpreisen ist das IMHO weniger dramatisch …
wie kann ich 3 Tabellen in der Datenbank mit nur einer Abfrage ansprechen?
Wär's nicht so unhöflich, würde ich ja jetzt RTFM schreiben ;>

Verfasst: 01.06.2009, 18:05
von Nullpointer
Inserts in mehrere Tabellen gehen nicht, da wirst Du mit leben müssen.

Beim Formular wäre die Frage, was Du mit den Variablen machst? Du kannst über die POST vars iterieren und über den index zugreifen.
Evtl ist die zusätzliche Varaiblendeklaration gar nicht notwendig?

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 01.06.2009, 18:12
von bloddy newbie
extract ist dein Freund, wenn auch unnötig...

Updates auf mehrere Tabellen gleichzeitig sind möglich. Siehe MySQL Doku.

Grüße BN

Re: Code optimieren kürzen

Verfasst: 01.06.2009, 18:39
von net(t)worker
Michael1967 hat geschrieben:Hallo,

mal ne Frage. Ich habe da ein Formular (insgesamt 40 Felder). Nun übergebe ich die Werde so -

Code: Alles auswählen

$s1 = $_POST["s1"];
$s2 = $_POST["s2"];
$s3 = $_POST["s3"];
$s4 = $_POST["s4"];
$s5 = $_POST["s5"];
$s6 = $_POST["s6"];
$s7 = $_POST["s7"];
$s8 = $_POST["s8"];
$s9 = $_POST["s9"];
$s10 = $_POST["s10"];
// Geht bis $s40
Gibt es da eine Möglichkeit diesen Block zu kürzen?
das kannste genausogut in einer for schleife erledigen

Code: Alles auswählen

for &#40;$x=1;$x<41;$x++&#41;
&#123;
$hilfsvar="s".$x;  
$$hilfsvar=$_POST&#91;$hilfsvar&#93;;
&#125;
ich würde dort dann aber auch noch eine Prüfung auf korrekte werte einbauen, nicht das dir jemand etwas unterschieben kann, also wenn es sich dabei um zahlen handelt, z.B.:

Code: Alles auswählen

for &#40;$x=1;$x<41;$x++&#41;
&#123;
$hilfsvar="s".$x;  
if &#40;is_numeric&#40;$_POST&#91;$hilfsvar&#93;&#41;&#41;
&#123;
$$hilfsvar=$_POST&#91;$hilfsvar&#93;;
&#125;
else
&#123;
die&#40;"Nu hasses kaputt gemacht &#58;-&#40;"&#41;;
&#125;
&#125;
oder für formulare allgemein die pear class quickform verwenden und dort für jedes feld des Formulars die entsprechenden Regeln angeben....

Verfasst: 01.06.2009, 20:11
von Michael1967
Erstmal ein Danke für die Hilfe und Tipps.
Beim Formular wäre die Frage, was Du mit den Variablen machst?
Ich schicke das Formular ab (Zu einer Funktion) von dort werden die Daten (40 Sätze) dann in die Datenbank geschrieben (funktionieren tut es ja).

$s1 = Satz1
$s2 = Satz2
usw.

Wie soll ich die Daten sonst vom Formula zur Funktion übergeben?

Verfasst: 01.06.2009, 21:32
von Mork vom Ork
Michael1967 hat geschrieben:$s1 = Satz1
$s2 = Satz2
usw.

Wie soll ich die Daten sonst vom Formula zur Funktion übergeben?
Ich stehe vermutlich auf dem Schlauch, aber mir ist immer noch nicht klar, was du dir von $s1 erhoffst. mysql_query('insert into bla set x="' . mysql_real_escape_string($_POST["s1"]) . '"') macht exakt das Gleiche wie $s1 = $_POST["s1"];, gefolgt von mysql_query('insert into bla set x="' . mysql_real_escape_string($s1) . '"');.
net(t)worker hat geschrieben:for ($x=1;$x<41;$x++)
{
$hilfsvar="s".$x;
$hilfsvar=$_POST[$hilfsvar];
}
- Umständlich, erst von $x in $hilfsvar, dann von $hilfsvar in den $_POST-Index; es spricht nichts dagegen, $_POST["s" . $x] zu benutzen.
- Seine Frage löst es nicht (er wollte einzelne Variablen haben).
- Das Grundproblem löst es nicht (wozu die ganzen Variablen, wenn alles fein säuberlich in $_POST steht).

Verfasst: 01.06.2009, 23:51
von Michael1967
Hmmm, nun bin ich wirr. Sorry!

Also noch mal - ich habe ein Formular das die Daten an eine functionen.php weitergibt. Und zwar so -

Code: Alles auswählen

echo"<form id=\"eintragform\" method=\"post\" action=\"\">

<label for=\"titel\"> 1&#58; </label><input size=\"60\" type=\"text\" name=\"s1\" id=\"s1\" value=\"$row->s1\" /><br />

<label for=\"titel\"> 2&#58; </label><input size=\"60\" type=\"text\" name=\"s2\" id=\"s2\" value=\"$row->s2\" /><br />

// 40 mal

Ich stehe vermutlich auf dem Schlauch, aber mir ist immer noch nicht klar, was du dir von $s1
Hier gehen die Daten aus dem Formular hin -

Code: Alles auswählen

function SatzEintragen&#40;&#41; &#123;
$s1 = $_POST&#91;"s1"&#93;;
$s2 = $_POST&#91;"s2"&#93;;
// bis 40 
// hier folgt die Abfrage $aendern = "UPDATE tabelle Set s1 = '$s1',.....
&#125;
Wen ich - $s1 = $_POST["s1"]; usw. nicht in die Funktion setze, dann kommen auch keinen Daten dort an. Somit wird auch nichts in die Datenbank-Spalten geschrieben

$s1, $s2 usw. sind Spalten in der Datenbank in denen jeweils ein Satz bestehend aus 100 bis 200 Zeichen steht.

Verfasst: 02.06.2009, 08:27
von Mork vom Ork
Michael1967 hat geschrieben:

Code: Alles auswählen

function SatzEintragen&#40;&#41; &#123;
$s1 = $_POST&#91;"s1"&#93;;
$s2 = $_POST&#91;"s2"&#93;;
// bis 40 
// hier folgt die Abfrage $aendern = "UPDATE tabelle Set s1 = '$s1',.....
&#125;
Wen ich $s1 = $_POST["s1"]; usw. nicht in die Funktion setze, dann kommen auch keinen Daten dort an. Somit wird auch nichts in die Datenbank-Spalten geschrieben
Wenn du

Code: Alles auswählen

$s1 = $_POST&#91;"s1"&#93;;
$aendern = "UPDATE tabelle1 set aktiv=1 where id=$s1";
benutzt, erfolgt ein Eintrag bzw. eine Änderung, aber wenn du stattdessen

Code: Alles auswählen

$aendern = "UPDATE tabelle1 set aktiv=1 where id=" . $_POST&#91;"s1"&#93;;
schreibst, passiert nichts in der Tabelle? Glaube ich dir nicht.

Wenn überhaupt, dann ist dein Problem, dass du den SQL-Befehl falsch zusammenzimmerst, weil für einen Textvergleich die Anführungszeichen fehlen - aber das ist in beiden Fällen so und hat nichts mit $s1 vs. $_POST["s1"] zu tun.

Probiere es folgendermaßen:

Code: Alles auswählen

if &#40;! mysql&#40;'UPDATE tabelle1 set aktiv=1 where id="' . mysql_real_escape_string&#40;$_POST&#91;"s1"&#93;&#41; . '"'&#41;&#41; &#123;
    die&#40;"Update-Fehler Tabelle 1&#58; " . mysql_error&#40;&#41;&#41;; // die&#40;&#41; später durch error_log&#40;&#41; und exit&#40;&#41; ersetzen.
&#125;
Wenn das tut, was es soll, kannst du da eine Schleife drumherum setzen.

Verfasst: 02.06.2009, 12:09
von Michael1967
Sorry, aber du hast mich falsch verstanden. Die zweite Frage hat mit der ersten Frage nichts zu tun.

Bei Frage 2 ging es mir nur darum, ob man mit einer Abfrage 3 Tabellen in der Datenbank gleichzeitig ansprechen kann.

Frage 1 bezog sich auf ein Formular mit 40 Feldern - wo die Daten per Post an eine Datei mit dem Namen funktionen.php weitergegeben werden.

Code: Alles auswählen

$aendern = "UPDATE tabelle1 set aktiv=1 where id=$id"; 
$update = mysql_query&#40;$aendern&#41;; 

$aendern = "UPDATE tabelle2 set aktiv=1 where id=$id"; 
$update = mysql_query&#40;$aendern&#41;; 

$aendern = "UPDATE tabelle3 set aktiv=1 where id=$id"; 
$update = mysql_query&#40;$aendern&#41;; 
Diese Abfragen gehören nicht zum Formular, sondern ich wollte nur erfragen - ob es auch kürzer geht.

Verfasst: 02.06.2009, 14:01
von Nullpointer
@Michael1967 der mork will dir nur klar machen, dass das verschieben in neue variablen unnötig ist. wenn die deklaration weggelassen wird und weiter unten eben auf die neu deklarierten vars zugegriffen wird, kann es natürlich nicht funktionieren.

Verfasst: 02.06.2009, 14:11
von Michael1967
Ach so - nun habe ich sogar begriffen. Vielen Dank!

Verfasst: 02.06.2009, 14:15
von net(t)worker
Mork vom Ork hat geschrieben:
net(t)worker hat geschrieben:for ($x=1;$x<41;$x++)
{
$hilfsvar="s".$x;
$hilfsvar=$_POST[$hilfsvar];
}
:o

wenn du schon phpcode von mir zitierst, dann bitteschön auch richtig...

bei mir steht:

$$hilfsvar=$_POST[$hilfsvar];

und durch diese variable Variable werden die Variablen $s1 - $s40 mit den entsprechenden POST-Variabeln belegt....

https://www.php-center.de/de-html-manua ... iable.html

Verfasst: 02.06.2009, 14:49
von net(t)worker
Mork vom Ork hat geschrieben: - Umständlich, erst von $x in $hilfsvar, dann von $hilfsvar in den $_POST-Index; es spricht nichts dagegen, $_POST["s" . $x] zu benutzen.
wie bereits im Vorposting ausgeführt hast du meinen Code nicht verstanden... es ist nötig erstmal diese hilfsvariable zu füllen, damit ich sie später als variable Variable nutzen kann... und wenn ich einmalig etwas in einer Variable definiert habe, nutze ich diese natürlich auch um auf die entsprechende $_POST Variable zuzugreifen... so muss ich den Wert nur an einer Stelle definieren/editieren....
Mork vom Ork hat geschrieben: - Seine Frage löst es nicht (er wollte einzelne Variablen haben).
bekommt er bei meinem Code ja auch...
Mork vom Ork hat geschrieben: - Das Grundproblem löst es nicht (wozu die ganzen Variablen, wenn alles fein säuberlich in $_POST steht).
wie ich bereits weiter oben ausführte wäre es immer sinnvoll alle externen Variabeln auch zu validieren, also auf gültige Werte zu prüfen... wir kennen hier nur ein paar codeschnipsel und nicht das ganze script... bei Scripten, in denen einmalig auf eine $_POST Variuable zugegriffen wird, mag es zwar ok sein diese an der Stelle direkt anzusprechen, aber im Allgemeinen sollte man sie einmalig validieren und den validierten wert dann in eine andere Variable übergeben, mit der im script dann gearbeitet wird... so hat man dann die komplette Validierung an einer zentralen Stelle und eine Fehlersuche/Änderungen diesbezüglich wird einfacher... vor allem wenn später irgendjemand anderes das script erweitern muss...

Verfasst: 02.06.2009, 15:08
von Michael1967
wir kennen hier nur ein paar codeschnipsel und nicht das ganze script
Na dann sag ich mal an was ich bastel. Ich versuche mich in Sachen "Eintragshilfe und Content Generator". Das ist sowas wie fastbacklink.de - nur nicht automatisiert.

Bei meinem Script klickt man beispielsweise auf einen Button und dann wird der Titel, Url, Beschreibung, Name, Firma und und und - in die Zwischenablage kopiert. Man muss diese Inhalte dann nur in die Formularfelder kopieren.

Der Content Generator erzeugt aus 40 Sätzen und Titel (erweiterbar) immer zufällig und völlig automatisch einen neuen Text - 400 bis 600 Zeichen lang. Für meine Verhältnisse klappt das schon wunderbar.

Danke nochmal für die hilfreichen Tipps.