Antworten auf deine Fragen:
Neues Thema erstellen

If bei msyql

cmfa

Nicht mehr ganz neu hier

Hallo zusammen,

ich bin gerade bei einer kleinen Selbstübung, da ich mich mit mit mysql noch nicht so richtig auskenne.
Was möchte ich erreichen? Ich möchte aus einer Tabelle bestimmte Datenin eine andere übertragen. Das übertragen klappt. Nun möchte ich aber auf bestimmte Inhalte achten und beim Eintrag in die andere Tabelle Teile ändern. Anbei mein laienhafter Versuch. Was mache ich falsch? Ist das der richtige Weg?

CMFA
PHP:
<?php
    if(!$db = @mysql_connect("****","****","****")) die("Keine Verbindung zur Datenbank moeglich!");
    if(!@mysql_select_db("****",$db)) die("Die Datenbank existiert nicht!");

    $result = mysql_query("SELECT user_group FROM cpg15x_users");
    if (!$result = 1)
    {
      $sql_query = "INSERT INTO luxcal_users (user_name, password, email, language, sedit, privs) SELECT user_name, user_password, user_email, `NULL`, '1', '3' FROM cpg15x_users";
      $sql_res = mysql_query( $sql_query );
      } 
      else 
      {
      $sql_query = "INSERT INTO luxcal_users (user_name, password, email, language, sedit, privs) SELECT user_name, user_password, user_email, `NULL`, '0', '2' FROM cpg15x_users";
      $sql_res = mysql_query( $sql_query );
     }
    @mysql_close($db)
?>
 

Duddle

Posting-Frequenz: 14µHz

AW: If bei msyql

PHP:
    if (!$result = 1)

Da fehlt ein "=" für einen Vergleich, im Moment ist es eine Zuweisung.

PHP:
    if (!$result == 1)

Eindeutiger ist aber, statt $result zu invertieren, das im Vergleich selbst zu machen. $result kann ja nur True oder False sein.

PHP:
    if ($result != 1)

Die Abfrage selbst ist aber recht sinnlos. $result wird nur nicht TRUE, wenn es einen tatsächlichen Fehler bei der Abfrage gab. Falls z.B. keine Zeilen gefunden werden, in deinem Beispiel also die Tabelle cpg15x_users keine Einträge hat, dann wird $result trotzdem True.

Prinzipiell stimmt der Rest aber, auch wenn es ohne Kontext nur schwer zu sagen ist, ob nicht noch generell ein Fehler im Ansatz sitzt.


Duddle
 

cmfa

Nicht mehr ganz neu hier

AW: If bei msyql

hi,
leider bleibt das script immer in der if anweisung und springt nicht in den else zweig. In der user_group gibt es nur die Zahlen 1 & 2 von Typ int(11).

wie wäre es denn richtig?

cmfa
 
Zuletzt bearbeitet:

m_c

Nicht mehr ganz neu hier

AW: If bei msyql

Die MySQL-Abfrage fehlt. Bis jetzt gibt's nur nen Verbindungsaufbau, aber eben keine Abfrage.

mysql_fetch_array; mysql_result, mysql_fetch_row; mysql_fetch_object: je nachdem, was gewünscht ist.

Hätte man per Debugging sehr gut rausbekommen können.

EDIT: Und es ist immer eins, da die MySQL-Abfrage korrekt ist.
EDIT 2: Beim Testen immer ohne @. Ansonsten werden eventuell wichtige Meldungen ausgeblendet.
 
Zuletzt bearbeitet:

Orlandoo

Nicht mehr ganz neu hier

AW: If bei msyql

Mit
Code:
[COLOR=#000000][COLOR=#0000BB]$result [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]mysql_query[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"SELECT user_group FROM cpg15x_users"[/COLOR][COLOR=#007700]);
    if (![/COLOR][COLOR=#0000BB]$result [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700])
    {
...[/COLOR][/COLOR]
testest Du lediglich, ob die Abfrage korrekt ausgeführt wurde. $result enthält nicht einen einzelnen, sondern alle Datensätze Deiner Datenbank. Du musst also in einer Schleife jeden einzelnen Datensatz auf die gewünschte Bedingung prüfen und dann entscheiden (if ...), was Du in die zweite Datenbank schreiben willst. Die Befehle, mit denen Du auf die einzelnen Datensätze zugreifen kannst, hat m_c ja oben schon aufgelistet.
 
Zuletzt bearbeitet:

cmfa

Nicht mehr ganz neu hier

AW: If bei msyql

Hi,
so ich bin in meinem Selbstversuch ein Stück weiter. Habe jetzt es mit mysql_fetch_array gemacht. mit printf lasse ich es mir ausgeben. Das ist das Ergebniss.
User_Group: 1 Name: CMFA
User_Group: 1 Name: Torsten
User_Group: 1 Name: Thomas
User_Group: 2 Name: Simone
User_Group: 2 Name: Rainer
User_Group: 2 Name: Dieter
User_Group: 2 Name: Siegfried
User_Group: 2 Name: Axel
User_Group: 2 Name: Volkhard
User_Group: 2 Name: Horst
User_Group: 2 Name: Ulrich
Sobald es aber in die Tabelle eingetragen wird, sind die Daten doppelt und dreifach vorhaben.
Wo ist mein Fehler?
CMFA

PHP:
<?php
 if(!$db = mysql_connect("localhost","root","")) die("Keine Verbindung zur Datenbank moeglich!");
    if(!mysql_select_db("copg",$db)) die("Die Datenbank existiert nicht!");

    $result = mysql_query("SELECT user_group,user_name FROM cpg15x_users");
    #$a =0;
    #while ($a < $row = mysql_fetch_array($result, MYSQL_ASSOC)) {
      while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
      if ($row[user_group] !=1){
        $sql_query = "INSERT INTO luxcal_users (user_name, password, email, language, sedit, privs) SELECT user_name, user_password, user_email, 'NULL', '1', '3' FROM cpg15x_users";
        #$sql_res = mysql_query( $sql_query );
        printf ("User_Group: %s  Name: %s<br>",$row[user_group],$row[user_name]);
        }
        else{
        #$sql_query = "INSERT INTO luxcal_users (user_name, password, email, language, sedit, privs) SELECT user_name, user_password, user_email, 'NULL', '0', '2' FROM cpg15x_users";
        #$sql_res = mysql_query( $sql_query );
        printf ("User_Group: %s  Name: %s<br>",$row[user_group],$row[user_name]);
        }
        #$a++;
}
mysql_free_result($result);
mysql_close($db)
?>
 

Duddle

Posting-Frequenz: 14µHz

AW: If bei msyql

Ein SELECT holt die angegebenen Spalten aller Datensätze einer angegebenen Tabelle. Du kannst aus diesem Ergebnis bestimmte Datensätze mit gewünschten Eigenschaften mit einer WHERE-Klausel herausfiltern.
Beispiel:
Code:
SELECT user_name, user_password, user_email, 'NULL', '1', '3' FROM cpg15x_users [B]WHERE user_name = 'Siegfried' OR user_email LIKE "%gmail%"[/B]
Diese Abfrage würde dir alle Datensätze ausgeben, die bei user_name "Siegfried" haben oder deren E-Mail-Adresse irgendwo "gmail" enthält. Wenn du das mit dem INSERT INTO kombinierst, würdest du nur exakt diese gerade beschriebenen Datensätze in die andere Tabelle kopieren.

Dir fehlt aber diese WHERE-Klausel in deinen SELECTs, deshalb werden bei jedem Aufruf dieser Abfrage ("INSERT INTO luxcal_users....") alle Datensätze in die andere Tabelle kopiert.

Ich empfehle dir dringendst, ein paar SQL-Tutorials zu machen, bevor du dich an destruktivere Befehle wie DELETE oder UPDATE wagst. Sonst sind ganz schnell mal alle Daten verloren.


Da du jetzt aber glücklicherweise etwas durchblicken lassen hast, was du eigentlich willst, kann man dir eine viel sinnvollere Lösung präsentieren: Mit dem oben bereitgestellten Wissen kannst du auf diesen ganzen Kram mit Schleife usw. verzichten. Du willst aus cpg15x_users alle Nutzer aus Nutzergruppe ungleich 1 mit bestimmten Zusatzinformationen kopieren. Also machst du das ganz normale INSERT INTO, aber kombinierst das mit WHERE:
Code:
INSERT INTO luxcal_users (user_name, password, email, language, sedit, privs) SELECT user_name, user_password, user_email, 'NULL', '1', '3' FROM cpg15x_users [B]WHERE user_group != 1[/B]
und entsprechend
Code:
INSERT INTO luxcal_users (user_name, password, email, language, sedit, privs) SELECT user_name, user_password, user_email, 'NULL', '0', '2' FROM cpg15x_users [B]WHERE user_group = 1[/B]
Lass dich nicht davon verwirren, dass hier der Vergleich mit einfachen "=" und nicht wie in PHP mit "==" gemacht wird.

Diese beiden Abfragen kannst du nacheinander ohne das ganze drumherum ausführen und dein Problem ist gelöst.


Duddle
 
Zuletzt bearbeitet:

cmfa

Nicht mehr ganz neu hier

AW: If bei msyql

Hi,

danke für die Hilfe.
Ich möchte damit erreichen das ich zwei User Tabellen von zwei unterschiedlichen Anwendungen gleich halte, die Nutzer sind 60+ und sollen sich ein Benutzername und ein Passwort merken. Sicher nicht die eleganteste Lösung aber für mich als Anfänger...
Bei deinem Code bekomme ich in phpmyadmin eine Fehlermweldung
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*WHERE user_group != 1*' at line 1

CMFA
 

Duddle

Posting-Frequenz: 14µHz

AW: If bei msyql

Hast du das nach Word oder so kopiert? Scheinbar hat irgendeines deiner Programme * reingeschmuggelt, dort wo ich den Text fett markiert hatte. Offensichtlich müssen die * in beiden Abfragen weg.

Code:
INSERT INTO luxcal_users (user_name, password, email, language, sedit, privs) SELECT user_name, user_password, user_email, 'NULL', '1', '3' FROM cpg15x_users WHERE user_group != 1


Ja, deine Lösung ist nicht sehr schick :) Wenn mehrere Tabellen in der gleichen Datenbank liegen, können sie problemlos vereinigt werden. Das ist mehr oder weniger das Grund-Feature einer relationalen Datenbank.


Duddle
 

cmfa

Nicht mehr ganz neu hier

AW: If bei msyql

Hi,
danke, habe es aus der Mail die gekommen ist heraus kopiert, * entfernt und es geht. Ja ich möchte genau dahin das ich die beiden Tabellen vereinige, aber habe noch nicht den Plan wie es gehen soll.

CMFA
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.614
Beiträge
1.538.351
Mitglieder
67.525
Neuestes Mitglied
mgtaucher
Oben