Zurück   WordPress Deutschland Forum > Support > Plugins und Widgets > Plugin-Entwicklung

Antwort
 
Themen-Optionen Ansicht
Alt 16.07.2008, 03:02   #1 (permalink)
PostRank: 0
 
Registriert seit: 16.07.2008
Beiträge: 2
wpdb tabellen als user anlegen lassen

Hallo zusammen,
ich bastel grade an einer Pluginerweiterung zum GeoAddress-plugin.
Weiteres verwendetes Plugin: Registered Only

Mein Ziel:
Jeder Benutzer soll seine eigene Kontakt-Datenbank haben.

Meine Ansatz:
Ich lese die Userdaten via action "user_register" oder "wp_login" mit einer function aus:

PHP-Code:
function leed_user_install(){
$user_obj wp_get_current_user();
$user_info get_userdata($user_obj->id);
  global 
$wpdb;
  
$table_name $wpdb->prefix$user_info->user_nicename "geoaddress";
  
$structure " CREATE TABLE IF NOT EXISTS $table_name (
  id int(11) NOT NULL auto_increment,
  cpName varchar(50) NOT NULL,
  cpStrasse varchar(50) NOT NULL,
  cpNr varchar(10) NOT NULL,
  cpPlz varchar(10) NOT NULL,
  cpOrt varchar(50) NOT NULL,
  cpLand varchar(10) NOT NULL,
  cpTelefon varchar(50) NOT NULL,
  cpFax varchar(50) NOT NULL,
  cpEmail varchar(100) NOT NULL,
  cpWeb varchar(255) NOT NULL,
  cpCat varchar(255) NOT NULL,
  latitude varchar(30) NOT NULL,
  longitude varchar(30) NOT NULL,
  active tinyint(1) NOT NULL default '0',
  validatecode varchar(100) NOT NULL,
  valid tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM  AUTO_INCREMENT=2 ;
"
;

$wpdb->query($structure);


Ich hab schon mit echo getestet, was in der Variable steht: Tatsächlich der User. Wenn ich jetzt als Admin beim Login für einen Aufruf sorge, dann legt er auch brav die Tabelle an.
Aber als User darf er das scheinbar nicht? Da ich auch ein User-level-plugin drin hab, hab ich einem Testuser mal das Level 10 verpasst - bringt nix. Aber echo bestätigt mir, dass in der Variable die tatsächlichen gewünschten Daten drin stehen.

Was wäre die Lösung?
Muss ich die Variablen irgendwo hin übergeben das der Admin die dann übernimmt oder bekommt man das hin, dass die User in die DB schreiben dürfen?

Irgendwie stehe ich mittler Weile auf dem Schlauch.
BunzBunz ist offline   Mit Zitat antworten
Alt 16.07.2008, 09:54   #2 (permalink)
WPD-Team
 
Benutzerbild von marX
 
Registriert seit: 05.10.2006
Beiträge: 7.866
Lass dir doch mal die Fehlermeldung ausgeben, die die Query wirft:
Function Reference/wpdb Class « WordPress Codex
__________________
FAQ // Codex // WP-Stuff // marcus.zelend.de
marX ist gerade online   Mit Zitat antworten
Alt 18.07.2008, 03:47   #3 (permalink)
PostRank: 0
 
Registriert seit: 16.07.2008
Beiträge: 2
Komische Fehler?

Hallo zusammen,

hab jetzt mal Deinen Vorschlag ausprobiert und an verschiedenen Stellen im Page-Template das hier eingefügt:

PHP-Code:
<?php $wpdb->print_error(); ?>
Dabei hab ich dann das hier bekommen:

PHP-Code:
WordPress Datenbank-Fehler: []
SELECT FROM erfahrung3_categories ORDER BY cat_name 
und zwar hier (reduziert):

PHP-Code:
<?php
global $wpdb,$table_name// muss das eigentlich global sein? - ne?
$user_obj wp_get_current_user();
$user_info get_userdata($user_obj->id);
echo 
'Hallo ' $user_info->user_nicename '!'//test klappt: zeigt User
?><?php $wpdb->print_error(); ?>
<div id="WFDForm" style="position:relative;left:0px;top:0px;width:407px;height:286px;background-color:#FFFFCE;">
<form name="Download_form" action="<?php echo do_action('leed_speichern'); echo $wpdb->show_errors(); ?>" method="POST" enctype="application/x-www-form-urlencoded" onsubmit="<?php echo do_action('leed_speichern'); echo $wpdb->show_errors();?>" > // ... usw..

Damit hab ich ja garnicht gerechnet - ich glaub dass das auch nix mit meinem Problem zu tun hat. Allerdings stellt sich dann die Frage: "Warum gibts keine passenden Fehlermeldungen?"

Wenn mir hier keiner weiterhelfen kann, wäre ich dankbar für einen Tipp, wo ich mal versuchen könnte zu fragen...

OK: Ich hab den $wpdb->print_error(); aufruf nochmal höher eingefügt. Das hat nix mit meinem Problem zu tun.

Geändert von BunzBunz (18.07.2008 um 03:53 Uhr).
BunzBunz ist offline   Mit Zitat antworten
Alt 23.07.2008, 18:12   #4 (permalink)
PostRank: 0
 
Registriert seit: 24.02.2008
Beiträge: 5
So klappts

Hallo zusammen,

hab das mit den User-DBs jetzt hinbekommen.

Im Template (Fazit weiter unten...):

PHP-Code:


<form action="<?php do_action(leed_speichern$arg = ); ?>" method="post">
<table align="center" cellpadding="0" cellspacing="2" class="geoTableFront">
  <tr>
    <td width="150px" align="left"></td>
    <td align="left"></td>
  </tr>
  <tr>
    <td colspan="2">
        <?php
    
if(count($err) && !$_POST["newId"]) {
    
?>
    <h2 class="cpError">Es sind Fehler aufgetreten:</h2>
    <ul class="cpError">
    <?php for($i 0$i count($err); $i++) { echo $err[$i]; } ?>
    </ul>
    <?php
    
}
    
?>
    <p><small>Bitte keine Abk&uuml;rzungen wie z.B Talstr. oder Oberhsn. verwenden, alle Angaben m&uuml;ssen korrekt ausgeschrieben werden!</small></p>
    <p><small>Mit (*) gekennzeichnete Felder sind Pflichtfelder und m&uuml;ssen ausgef&uuml;llt werden!</small></p>
    </td>
  </tr>
  <tr>
    <td align="left">Name, Vorname <strong>*</strong></td>
    <td align="left"><input type="text" name="cpName" class="cpTextbox" value="<?php echo $post["cpName"]; ?>" /></td>
  </tr>
  <tr>
    <td align="left">Stra&szlig;e <strong>*</strong></td>
    <td align="left"><input type="text" name="cpStrasse" class="cpTextbox" value="<?php echo $post["cpStrasse"]; ?>" /></td>
  </tr>
  <tr>
    <td align="left">Hausnummer <strong>*</strong></td>
    <td align="left"><input type="text" name="cpNr" class="cpTextbox" style="width:100px" value="<?php echo $post["cpNr"]; ?>" /></td>
  </tr>
  <tr>
    <td align="left">PLZ <strong>*</strong></td>
    <td align="left"><input type="text" name="cpPlz" class="cpTextbox" style="width:100px" value="<?php echo $post["cpPlz"]; ?>" /></td>
  </tr>
  <tr>
    <td align="left">Ort <strong>*</strong></td>
    <td align="left"><input type="text" name="cpOrt" class="cpTextbox" value="<?php echo $post["cpOrt"]; ?>" /></td>
  </tr>
  <tr>
    <td align="left">Land</td>
    <td align="left">
      <select name="cpLand" class="cpTextbox" style="width:254px">
            <?php  echo GeoAddress_buildCountryOptions$_POST["cpLand"] ); ?>
      </select>
    </td>
  </tr>
  <?php if($params["cpSetField_Telefon"] == "1") { ?>
  <tr>
    <td align="left">Telefon</td>
    <td align="left"><input type="text" name="cpTelefon" class="cpTextbox" style="width:100px" value="<?php echo $post["cpTelefon"]; ?>" /></td>
  </tr>
  <?php ?>
  <?php if($params["cpSetField_Fax"] == "1") { ?>
  <tr>
    <td align="left">FAX</td>
    <td align="left"><input type="text" name="cpFax" class="cpTextbox" style="width:100px" value="<?php echo $post["cpFax"]; ?>" /></td>
  </tr>
    <?php ?>
  <tr>
    <td align="left">E-Mail <strong>*</strong><br /><small>(Wird nicht angezeigt)</small></td>
    <td align="left" valign="top"><input type="text" name="cpEmail" class="cpTextbox" value="<?php echo $post["cpEmail"]; ?>" /></td>
  </tr>
  <?php if($params["cpSetField_Web"] == "1") { ?>
    <tr>
        <td align="left">Homepage</td>
    <?php $web = ($post["cpWeb"]) ? $post["cpWeb"] : "http://"?>
        <td align="left" valign="top"><input type="text" name="cpWeb" class="cpTextbox" value="<?php echo $web?>" /></td>
    </tr>
  <?php ?>
  <?php if($params["cpSetField_Cat"] == "1") { ?>
  <tr>
    <td align="left">Kategorie</td>
    <td align="left" valign="top">
        <select name="cpCat" class="cpTextbox" style="width:254px">
      <?php $sel = (!$post["cpCat"] || $post["cpCat"] == "-1") ? 'selected="selected"' ''?>
      <option value="-1" <?php echo $sel?>>Bitte w&auml;hlen</option>
      <?php echo GeoAddress_buildCatOptions$post["cpCat"] ); ?>
      </select>
    </td>
  </tr>
  <?php ?>
  <?php if($params["UseCaptcha"] == "1") { ?>
  <tr>
    <td align="left" valign="top">&nbsp;<br />Spamschutzcode  <strong>*</strong></td>
    <td align="left">&nbsp;<br /><?php echo $captcha->display_form(); ?></td>
  </tr>
  <?php } else { ?>
  <tr>
    <td align="left" valign="top">&nbsp;</td>
    <td align="left">&nbsp;<br /><input type="submit" name="addAddress" value="Absenden" /></td>
  </tr>
  <?php ?>
</table>
</form>
<?php

 $table_name 
$wpdb->prefix$user_info->user_nicename "geoaddress"
  
$structure " CREATE TABLE IF NOT EXISTS $table_name ( 
  id int(11) NOT NULL auto_increment, 
  cpName varchar(50) NOT NULL, 
  cpStrasse varchar(50) NOT NULL, 
  cpNr varchar(10) NOT NULL, 
  cpPlz varchar(10) NOT NULL, 
  cpOrt varchar(50) NOT NULL, 
  cpLand varchar(10) NOT NULL, 
  cpTelefon varchar(50) NOT NULL, 
  cpFax varchar(50) NOT NULL, 
  cpEmail varchar(100) NOT NULL, 
  cpWeb varchar(255) NOT NULL, 
  cpCat varchar(255) NOT NULL, 
  latitude varchar(30) NOT NULL, 
  longitude varchar(30) NOT NULL, 
  active tinyint(1) NOT NULL default '0', 
  validatecode varchar(100) NOT NULL, 
  valid tinyint(1) NOT NULL default '0', 
  PRIMARY KEY  (id) 
) TYPE=MyISAM  AUTO_INCREMENT=2 ; 
"

 
$wpdb->query($structure); 
$next "";
$sql "SELECT * FROM " $table_name .  " ORDER BY id DESC;";
$res $wpdb->query $sql );
echo 
"res: "$res;
$letzter_datensatz $res;
$letzte_id $letzter_datensatz["id"];
echo 
"Letzte ID: "$letzte_id;
$next $res +1;
echo 
"Zweites Next: "$next;
$query "
INSERT INTO "
.$wpdb->prefix$user_info->user_nicename "geoaddress (id, cpName, cpStrasse, cpNr, cpPlz, cpOrt, cpLand, cpTelefon, cpFax, cpEmail, cpWeb, cpCat, latitude, longitude, active, validatecode, valid) VALUES 
($next, '$cpName', '$cpStrasse', '$cpNr', '$cpPlz', '$cpOrt', '$cpLand', '$cpTelefon', '$cpFax', '$cpEMail', '$cpWeb', '$cpCat', '', '', 1, '', 1);
"
;
$wpdb->query$query );
?>
Ich hab da glaub ich was nicht kapiert !!
Kann mir mal jemand den Kopf waschen:

Was muss ich machen, damit die $Variablen auch Werte haben, die dann in die DB gehen. Ich hab so die Vermutung, dass ich die entweder irgendwo übergeben muss, oder dass die einfach nicht übergeben werden dürfen?

Die Anmeldung ins Forum ist etwas tricky: Ich arbeite mit Konqueror/Firefox und hab das Problem, dass ich beim Antworten immer gesagt bekomme dass ich nicht eingeloggt bin.(Ja - Cookies sind an)

Bitte Bitte mach sich einer die Mühe und drücke nach dem Login nochmal F5 = Lösung (ich kann mir vorstellen, dass die meisten die eine Antwort hätten, einfach nicht antworten, weil sie nicht mit dem Login klarkommen?)
Partner ist offline   Mit Zitat antworten
Alt 26.07.2008, 03:08   #5 (permalink)
PostRank: 0
 
Registriert seit: 24.02.2008
Beiträge: 5
Hab die Lösung

Hallo zusammen,

auch wenn ich hier keine Antwort bekommen habe, will ich für zukünftige Deppen wie mich hier die Lösung präsentieren:

Nach einem "Submit" eines Formulars (also wenn man auf den Knopf "Absenden" gedrückt hat), werden die Variablen in ein sogenanntes Array gespeichert ($_POST)
Diese Daten kann man dann abrufen und mit eine Funktion verarbeiten - also z.B. in eine Datenbank schreiben...

Dazu muss man aber wissen, wie das genau aussehen muss. Genau da war mein Problem, denn weil ich das nicht genau wusste, war ich unsicher und hab mich immer wieder verrant..

PHP-Code:
function leed_speichern(){ 

$query 
INSERT INTO "
.$wpdb->prefix$user_info->user_nicename "geoaddress SET".   "\n cpName='"$_POST["cpName"] ."',"
                             
"\n cpStrasse='"$_POST["cpStrasse"] ."',"
                             
"\n cpNr='"$_POST["cpNr"] ."',"
                             
"\n cpPlz='"$_POST["cpPlz"] ."',"
                             
"\n cpOrt='"$_POST["cpOrt"] ."',"
                             
"\n cpLand='"$_POST["cpLand"] ."',"
                             
"\n cpTelefon='"$_POST["cpTelefon"] ."',"
                             
"\n cpFax='"$_POST["cpFax"] ."',"
                             
"\n cpEmail='"$_POST["cpEmail"] ."',"
                             
"\n cpWeb='"$_POST["cpWeb"] ."',"
                             
"\n cpCat='"$_POST    ["cpCat"] ."',"
                             
"\n latitude='',"
                             
"\n longitude='',"
                             
"\n active='1',"
                              
"\n validatecode='',"
                             
"\n valid='1'";

$wpdb->query$query );
 
}
add_action('wp_head''leed_speichern'); 
cpName='". $_POST["cpName"]"', ist also die Lösung! $_POST ist der Name es Arrays und "cpName" ist ein Feld im Array. cpName= gehört zum SQL-String, der dann ausgeführt wird.

Ach ja - leider kann man scheinbar nicht auf die "add_action" verzichten (momentan testweise auf wp_head). Man kann die Funktionen ja theoretisch auch mit do_action aufrufen. Die Funktion würde dann nicht im sogenannte "Loop" laufen und den Blog langsamer machen.
Mein Plan war es, do_action an das absenden des Formulars zu knüpfen.

Anmerkung:
Natürlich merkt ein Blinder mit dem Krückstock, dass ich PHP nie wirklich aktiv genutzt habe - ich bin eine Bash-Kind.
Partner ist offline   Mit Zitat antworten
Alt 28.07.2008, 09:01   #6 (permalink)
WPD-Team
 
Benutzerbild von marX
 
Registriert seit: 05.10.2006
Beiträge: 7.866
Zitat:
Zitat von Partner Beitrag anzeigen
Nach einem "Submit" eines Formulars (also wenn man auf den Knopf "Absenden" gedrückt hat), werden die Variablen in ein sogenanntes Array gespeichert ($_POST)
Diese Daten kann man dann abrufen und mit eine Funktion verarbeiten - also z.B. in eine Datenbank schreiben...
Aaaaaahhhhh!!!! Bitte NIEMALS ungeprüfte und ungefilterte Eingaben so verarbeiten!
FAQ der Newsgroups de.comp.lang.php.* - 12.11.*Prüfe importierte Parameter. Traue niemandem

Zitat:
Dazu muss man aber wissen, wie das genau aussehen muss. Genau da war mein Problem, denn weil ich das nicht genau wusste, war ich unsicher und hab mich immer wieder verrant..
Dann Grundlagen PHP und Datenbankprogrammierung lernen. Tutorials gibts ohne Ende im Netz.
(Übrigens war für mich aus deiner Ausgangsfrage nicht ersichtlich, dass du nicht weißt, wo Variablen nach einem Formular-Submit stehen.)

Zitat:
Ach ja - leider kann man scheinbar nicht auf die "add_action" verzichten (momentan testweise auf wp_head).
Doch schon, kommt drauf an wie du das ganze angehst. Ich würde ein Seitentemplate für das Ganze verwenden, dann ist der Code auch nur in diesem Template enthalten, und man spart sich die Actions und Filter.
(In deinem Fall wäre übrigens der "wp"-Hook etwas sinnvoller, da bei wp_head() möglicherweise schon Ausgaben gemacht wurden und es so evtl. zu Fehlermeldungen kommen kann - je nachdem welche Daten du wie verarbeitest)

Zitat:
Natürlich merkt ein Blinder mit dem Krückstock, dass ich PHP nie wirklich aktiv genutzt habe - ich bin eine Bash-Kind.
Wie gesagt, Grundlagen PHP. Sonst hast du nicht lange Freude an deinem Code bzw. an WordPress...
__________________
FAQ // Codex // WP-Stuff // marcus.zelend.de
marX ist gerade online   Mit Zitat antworten
Alt 28.07.2008, 10:38   #7 (permalink)
WPD-Moderator
 
Benutzerbild von Alphawolf
 
Registriert seit: 31.05.2005
Ort: Gera Ghetto
Beiträge: 2.399
Zitat:
Zitat von marX Beitrag anzeigen
Aaaaaahhhhh!!!!
*startet Wiederbelebungsmaßnahmen* Geht's wieder?
__________________
FAQ // Doku // Erbreiterungen
Alphawolf ist offline   Mit Zitat antworten
Alt 28.07.2008, 10:55   #8 (permalink)
WPD-Team
 
Benutzerbild von marX
 
Registriert seit: 05.10.2006
Beiträge: 7.866
Zitat:
Zitat von Alphawolf Beitrag anzeigen
*startet Wiederbelebungsmaßnahmen* Geht's wieder?
*röchel* *hust* Danke, geht wieder...
__________________
FAQ // Codex // WP-Stuff // marcus.zelend.de
marX ist gerade online   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 | Impressum | Ein Inpsyde.com Projekt